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


PCA基本流程:

1、訓練集矩陣算協方差矩陣A;

2、算協方差矩陣特征值與特征向量;

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

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

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

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

原理說明:

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

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,本質上是一個基變換矩陣。數學意義是協方差矩陣按特征值的大小排列的特征矩陣。

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,訓練集與測試集分開,原理和用法

 


免責聲明!

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



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