按照pca的处理步骤,终于用matlab把pca的算法写好了,本来想用C++写的,中间遇到了一个问题:就是在求特征值和特征向量的时候比较麻烦,需要QR迭代算法。自己就投机取巧,matlab里只需要调用一个函数就可以了。想着用matlab把功能实现了先看看效果。
PCA的处理步骤:
1,均值化
2,求协方差矩阵(我知道的有两种方法,这是第一种,按部就班的求,第二种是:(A*A‘/(N-1)))
3,求协方差的特征值和特征向量
4,将特征值按照从大到小的顺序排序,选择其中最大的k个,然后将其对应的k个特征向量分别作为列向量组成特征向量矩阵
5,将样本点投影到选取的特征向量上
matlab实现源代码
%PCA算法,matlab实现
function F=pcad(A,n)%A是M*N
%测试实例A=[2.5,0.5,2.2,1.9,3.1,2.3,2,1,1.5,1.1;2.4,0.7,2.9,2.2,3.0,2.7,1.6,1.1,1.6,0.9]
%结果F=[0.8280,-1.7776,0.9922,0.2742,1.6758,0.9129,-0.0991,-1.1446,-0.4380,-1.2238]
%PCA第一步:均值化
X=A-repmat(mean(A,2),1,size(A,2))%去均值
%PCA第二步:求特征协方差矩阵