首页 > 代码库 > 在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算法
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。