之前對PCA的原理挺熟悉,但一直沒有真正使用過。最近在做降維,實際用到了PCA方法對樣本特征進行降維,但在實踐過程中遇到了降維后樣本維數大小限制問題。
MATLAB自帶PCA函數:[coeff, score, latent, tsquared] = pca(X)
其中,X是n*p的,n是樣本個數,p是特征維數。
(1)coeff矩陣是返回的轉換矩陣,就是把原始樣本轉換到新空間中的轉換矩陣。
(2)score是原始樣本矩陣在新樣本空間中的表示,也就是原始樣本乘上轉換矩陣,但是還不是直接乘,要減去一個樣本的均值。將原始數據轉換到新樣本空間中的算法是這樣實現的:X0 = bsxfun(@minus,X,mean(X,1)); score = X0 * coeff.
(3)latent是返回的按降序排列的特征值,根據這個你可以手動的選擇降維以后的數據要選擇前多少列。
(4)tsquared是X中樣本的T平方統計量,PCA在整個空間中計算使用所有主成分來計算tsquared。
注意:
(1)當樣本個數遠小於特征維數的時候,coeff是比較大的,比如你的降維矩陣是100*50000,那么這個轉換矩陣的大小是50000*99(並不是50000*50000)。也就是說PCA降維時,降維后特征維數要小於樣本個數。
(2)選擇降維后維度的大小:cumsum(latent)./sum(latent),通過這樣計算特征值的累計貢獻率,一般來說都選擇前95%的特征值對應的特征向量。比如矩陣100*50000,如果你計算得到前50個特征值的累計貢獻率已經超過99.9%,那么就完全可以只要降維后的數據的前50列。
