题目PCA算法讨论
1.1 题目的主要研究内容
- 算法的原理介绍
- 算法的试验
- 算法的实例展示
- 算法上机演示
1.2 题目研究的工作基础或实验条件
(1)硬件环境(电脑)
(2)软件环境(python 语言,MATLAB语言)
1.3 设计思想
PCA(主成分分析)是十大经典机器学习算法之一。PCA是Pearson在1901年提出的,后来由Hotelling在1933年加以发展提出的一种多变量的统计方法。PCA通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提取数据的主要特征分量,常用于高维数据的降维。简而言之,PCA就是压缩数据,降低维度,把重要的特征留下来。最终达到数据可视化的目的。
- 将原始数据按列组成m行n列矩阵X
- 将X的每一列进行零均值
- 求出协方差公式
- 求出协方差矩阵的特征值和特征向量
- 将特征向量按照特征值大小从左到右排列成矩阵P
- Y=XP即为降维的数据
1.4 流程图
1.5 主要程序代码(要求必须有注释)
(1)python程序演示
import numpy as np
import matplotlib.pyplot as plt
#数据表示
x = np.array([1,1,2,4,2])
y = np.array([1,3,3,4,4])
x1 = x
y1 = y
data = np.matrix([ [x1[i],y1[i]] for i in range(len(x1)) ]) #将数据转化为矩阵形式
print("输出矩阵", data)
mean_x = np.mean(x) #求均值
mean_y = np.mean(y)
print("第一列均值", mean_x)
print("第二列均值", mean_y)
x1 = x - mean_x
y1 = y - mean_y
data = np.matrix([ [x1[i],y1[i]] for i in range(len(x1)) ]) #将数据转化为矩阵形式
print("求均值之后的数据", data)
#求协方差矩阵(Covariance Matrix)
cov1 = np.cov(x1,y1)
print("协方差矩阵", cov1)
#求协方差矩阵的特征值和特征向量
#用numpy自带的函数计算特征根和特征向量
val,vec = np.linalg.eig(cov1)
print("特征值", val)
print("特征向量", vec)
#原数据 X 特征向量 = 降维后的数据
main_pair = [(np.abs(val[i]) ,vec[:,i]) for i in range(len(val))]
feature = main_pair[0][1]
new_data_reduced = np.transpose(np.dot(feature,np.transpose(data)))
print("降维之后的结果", new_data_reduced)
(2)MATLAB程序演示
clc;
clear all;
close all; % 清理工作空间
clear;
data = [1,1 %矩阵数据
1,3
2,3
4,4
2,4]
fprintf(1,'均值为\n ')
mapping.mean = mean(data, 1) %计算均值
fprintf(1,'去均值为\n ')
data = data - repmat(mapping.mean, [size(data, 1) 1])%去均值
fprintf(1,'协方差为\n ')
C = cov(data) %协方差矩阵
fprintf(1,'C矩阵特征向量及特征值为\n ')
[M, lambda] = eig(C)%求C矩阵特征向量及特征值
[lambda, ind] = sort(diag(lambda), 'descend'); %排序
lambda=lambda./sum(lambda);
lambda=cumsum(lambda);
k=find(lambda>0.85) ;%选出贡献率达到85的指标前K个
M = M(:,ind(1:k(1)-1));%%取前k列
mappedX = data * M %降维后的X
1.6 运行结果及分析
- python结果演示
- MATLAB结果演示