在matlab中實現PCA演算法

2021-07-25 11:31:55 字數 2085 閱讀 6223

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; %累計貢獻率

fork=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 基礎 假設...