MATLAB自帶工具箱實現PCA降維代碼

PCA基本流程:

一、訓練集矩陣算協方差矩陣A;函數

二、算協方差矩陣特徵值與特徵向量;測試

三、按特徵值的大小排列特徵矩陣,得B,對應的特徵值(按從大到小排列)組成向量a;spa

四、A*B獲得去關聯的新矩陣C,A與C的對應位置物理意義相同(指樣本維度和樣本數),可是去掉了關聯,而且按特徵貢獻度大小排列;code

五、選貢獻度百分比或降維後的維度。例如百分之90,則是取知足sum(a(1:n))/sum(a)>90%的最小的n;若是直接定降維後的維度,則直接設置個n;blog

六、任同樣本的降維公式相同,對於樣本x:x*B(1:n,:)。圖片

原理說明:

步驟3,4本質上是基變換原理。4能夠去關聯的原理與馬氏距離相仿。貢獻度的原理與協方差矩陣的數學意義相關。轉換矩陣相關的計算必須在訓練集上完成是由於協方差矩陣的計算須要一個樣本集,如將測試集樣本加入這個樣本集,則訓練集中已經包含了測試集信息(例如某一維特徵的均值)。get

matlab函數說明:

[coeff,score,latent,tsquare] = pca(feature);%咱們這裏須要他的pc和latent值作分析

feature是被降維的特徵,每一行是一個特徵,列數表明總的特徵個數,好比一個圖片的HOG特徵是96維,總共有8000個HOG特徵,那麼feature的維度是8000×96,咱們的目標就是將其降維(假設將96維降到50維,)那麼咱們指望的降維後feature就變成了咱們須要的feature_after_PCA:8000×50數學

coeff:步驟3算出來的矩陣B,本質上是一個基變換矩陣。數學意義是協方差矩陣按特徵值的大小排列的特徵矩陣。class

score:步驟4算出來的矩陣C,與A同維同物理意義。原理

latent:步驟3算出來的向量a,存儲了貢獻度,數學意義是協方差矩陣特徵值從大到小排列。 

用途:

根據latent計算知足某貢獻度所需的樣本維度,或直接定一個樣本維度,而後feature*coeff(1:n,:)降維。把訓練集中全部樣本計算feature*coeff就是score,固然,feature*coeff(1:n,:)這個式子更大的用途是計算測試集中的樣本。

重點!!!

pca內建函數在算協方差的時候先減了個樣本均值,因此這裏feature*coeff不是score,須要先算:

x0 = bsxfun(@minus,feature,mean(feature,1));

而後x0*coeff纔是score。

參考原文:matlab_PCA,訓練集與測試集分開,原理和用法

相關文章
相關標籤/搜索