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來計算。
主成分分析PCA在matlab中實現的展示
by yang liu a 1,2,3,4,5,6,7,8,9,10 1.2,2.5,3.6,98,65,5,6,4,5,4 88,99,66,55,44,11,22,33,66,55 7,8,96,5,4,5,6,5,4,556 1,2,5,4,8,96,3,2,1,1 輸入所要分析的資料,其中行...
PCA演算法學習 2 PCA理論的matlab實現
本文 前言 在前面的博文pca演算法學習 1 opencv中pca實現人臉降維 中已經初步介紹了pca演算法的大概流程及在人臉降維上面的應用。本文就進一步介紹下其理論基礎和matlab的實現 也是網上學者的 開發環境 matlab2012a 基礎 假設x是乙個m n的矩陣,是由樣本資料構成的矩陣。其...
PCA演算法學習 2 PCA理論的matlab實現
pca演算法學習 2 pca理論的matlab實現 前言 在前面的博文 pca演算法學習 1 opencv中pca實現人臉降維 中已經初步介紹了pca演算法的大概流程及在人臉降維上面的應用。本文就進一步介紹下其理論基礎和matlab的實現 也是網上學者的 開發環境 matlab2012a 基礎 假設...