在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;
    end
end

%-------------第五步:計算得分-----------------%
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來計算。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM