Matlab使用PCA降維

Posted by JSON on December 4, 2013

設有m筆資料,每筆資料皆為n維,可將他們視為一個的矩陣。 若資料維度太高,可能不利於分析,或是在機器學習中要花比較多的時間訓練。

PCA的想法是算是矩陣的斜方差矩陣,此矩陣大小為,並計算出此 矩陣的n個特徵值(Eigen Value)及其對應的特徵向量(Eigen Vector), 取前幾個特徵向量,假設為k個(k<n),製造出的矩陣當作轉換矩陣。 再用原來的矩陣乘上的轉換矩陣得到的矩陣,達到降維的效果, 用較低的維度表示高維度的空間。

至於k值要取多少,降到幾維?k值越低,能表示原空間的程度越有限,建議上是取k值能夠表達原來空間 95%以上,表達程度的計算方式如下:

例如Eigen Values為:

517.7969
67.4964
12.4054
0.2372

則取k=1~4分別能表達的程度為:

0.86597
0.97886
0.9996
1

在Matlab上使用PCA降維

使用Matlab提供的princomp

[eigenVectors,score,eigenValues,tsquare] = princomp(matrix); 

若要降到k維,取轉換矩陣:

transMatrix = eigenVectors(:,1:k);

最後計算出降維後的矩陣: