大致的思想:
PCA分析主要就是对多维数据进行降维,并且借此来消除噪音和冗余数据。本质上就是对一组多维数据选取一个新的参考坐标,通过线性变换来投影到低维空间上,从而来表达新的数据,从而来进行降维。所以所谓的主要成分就是找到一个最能代表原始数据的投影方法,从而来确保降掉的维度是噪声和冗余资源。
PCA的大致过程:
1.形成样本矩阵,样本中心化:
样本中心化的最主要目的是对初始数据进行处理,也就是得到均值为0,标准差为1的服从标准正态分布的数据。本质上就是保证相同数据的不同特征有相同的尺度,借此使不同的特征具有相同的尺度。
2.计算样本矩阵的协方差矩阵:
协方差矩阵就涉及到了协方差的概念。
协方差本质上就是反映了两个变量在变化过程中之间的关系。例如同向变化或者反向变化。
如果两个变量同向变化,则协方差是正的。
如果两个变量反向变化,协方差就是负的。
因此,从数值上来说,协方差数值越大,两个变量的同化程度越大,反之亦然。
协方差公式:
协方差详细理解
所以对于每个数据集,就会得到一个协方差矩阵
其实协方差矩阵可以这样理解。即:协方差矩阵度量的是维度和维度之间的关系,而不是非样本和样本之间。协方差矩阵主对角线上市元素在各个维度上的方差,也就是能量。非对角线的元素表示不同特征之间的相互联系,也就是相关性。所以,降维的主要目的就是找到一个新的坐标系,或者说正交基来表示新的降维后的数据集。所以,除了主对角线的能量(特征值),其他的相关性都必须为0。
3.对协方差矩阵进行特征分解,选取最大的p个特征值对应的特征向量组成投影矩阵:
矩阵特征值分解的目的就是找到线性空间的正交基表达。正交基并意味着样本变换最剧烈的方向。所以特征值就代表了这个正交基对线性空间的影响权重。选择较大的特征值就留下了主要的正交基。
因此,PCA的本质就是对角化协方差矩阵。
因为协方差矩阵式C是对称矩阵,所以对称矩阵对角化就是找到一个正交矩阵P,来满足
也就是先对C进行特征值分解,得到特征值矩阵(对角矩阵),得到特征向量矩阵并正交化为P。
此时,我们去前p个特征值对应的维度,则p个特征值构成了新的对角矩阵,也就是新的特征向量矩阵P1。
此时,这个P1就是所谓的投影矩阵。每一列就是一个特征向量,也就是低维空间的新坐标系,所谓的"主成分"。
4.对原始样本矩阵进行投影,得到降维后的新的样本矩阵:
在得到P1后,将样本的店投影到所选取的特征向量上。就得到了一个维数降低的新的样本集。
附加Matalab代码:
load hald;
%加载matlab自带的训练集,用于测试算法
[COEFF,SCORE,LATENT,TSQUARED]=pca(ingredients);
%对自带训练集合ingredients进行pca降维,这里ingredients是一个具有多个特征切没有进行中心化的样本集合。
%COEFF:返回的转换矩阵,即用来把样本转换到新空间的内的转换矩阵
%SCORE:原本矩阵在新的坐标系中的表示,中心化处理后的
%LATENT:按降序排列的特征值,根据这个可以选择降维后的数据的列数,也就是最后特征数。
%TSQUARED:不明了
Select_num=cumsum(LATENT)./sum(LATENT);
%计算特征值的累计贡献度,选取前95%的特征值。
index=find(Select_num>=0.95);
ForwardNum=index(1);
tranMatrix=COEFF(:,1:ForwardNum);
%得到新的部分特征的转换矩阵
x=bsxfun(@minus,ingredients,mean(ingredients,1));
%mean(A,1) 返回行向量的mean(A) 列向量的均值。
%初始坐标的中心化处理后,乘以投影矩阵,就是最后选定特征在最后新坐标系上的向量表示。
%上述的SCORE是原始数据中心化后投影在新的坐标系上的表示
newingreiedts=x*tranMatrix;
disp(newingreiedts);
%输出投影且处理后的新的集合。
参考文献和Blog:
http://blog.csdn.net/zhongkelee/article/details/44064401
https://wenku.baidu.com/view/ce7ee04bcc175527072208ca.html
https://www.zhihu.com/question/20852004