首页 > 代码库 > 在matlab中实现PCA算法

在matlab中实现PCA算法

function [V,S,E]=princa(X)[m,n]=size(X); %计算矩阵的行m和列n%-------------第一步:标准化矩阵-----------------%mv=mean(X); %计算各变量的均值st=std(X); %计算各变量的标准差X=(X-repmat(mv,m,1))./repmat(st,m,1); %标准化矩阵X%-------------第二步:计算相关系数矩阵-----------------%% R1=X‘*X/(m-1); %方法一:协方差矩阵计算公式% R2=cov(X);     %方法二:协方差矩阵计算函数R=corrcoef(X); %方法三:相关系数矩阵函数%-------------第三步:计算特征向量和特征值-----------------%[V,D]=eig(R);       %计算矩阵R的特征向量矩阵V和特征值矩阵D,特征值由小到大V=(rot90(V))‘;      %将特征向量矩阵V从大到小排序D=rot90(rot90(D));  %将特征值矩阵由大到小排序E=diag(D);          %将特征值矩阵转换为特征值向量%-------------第四步:计算贡献率和累计贡献率-----------------%ratio=0; %累计贡献率for k=1:n    r=E(k)/sum(E);   %第k主成份贡献率    ratio=ratio+r;  %累计贡献率    if(ratio>=0.9)  %取累计贡献率大于等于90%的主成分        break;    endend%-------------第五步:计算得分-----------------%S=X*V;

 

如果要求主成分分析,用matlab自带一个的函数(princomp)就行。Princomp调用如下:
[COEFF,SCORE,latent,tsquare] = princomp(zscore(X))

zscore(X)是对矩阵X进行标准化操作。
COEFF是X矩阵所对应的协方差阵的所有特征向量组成的矩阵,即变换矩阵或称投影矩阵,每列对应一个特征值的特征向量,列的排列顺序是按特征值的大小递减排序
相当于上面程序中的V,它表示的是主成分的系数。
SCORE是对主成分的打分,也就是说原X矩阵在主成分空间的表示。每行对应样本观测值,每列对应一个主成份(变量),它的行和列的数目和X的行列数目相同。(相当于上面程序中的S)
latent是一个向量,它是X所对应的协方差矩阵的特征值向量。 (相当于程序中的E)
特征值与分数之间的关系:latent=diag(cov(SCORE));
tsquare是表示对每个样本点Hotelling的T方统计量
计算PCA的时候,如果直接有现成的协方差阵,用函数pcacov来计算。

在matlab中实现PCA算法