2015-07-20 39 views
0

我想在matlab中對車輛進行分類。我需要降低功能的維度以消除冗餘。我正在使用pca。不幸的是,pca函數沒有返回預期的結果。輸出似乎被截斷,我不明白爲什麼。的這個使用Matlab中的PCA降維減少

總結如下:

Components_matrix = [Areas_vector MajorAxisLengths_vector MinorAxisLengths_vector Perimeters_vector... 
     EquivDiameters_vector Extents_vector Orientations_vector Soliditys_vector] 

的輸出是:

Components_matrix =

1.0e+03 * 

1.4000 0.1042 0.0220 0.3352 0.0422 0.0003 0.0222 0.0006 
2.7690 0.0998 0.0437 0.3973 0.0594 0.0005 0.0234 0.0007 
1.7560 0.0853 0.0317 0.2610 0.0473 0.0005 0.0236 0.0008 
1.0870 0.0920 0.0258 0.3939 0.0372 0.0003 0.0157 0.0005 
0.7270 0.0583 0.0233 0.2451 0.0304 0.0004 0.0093 0.0006 
1.2380 0.0624 0.0317 0.2436 0.0397 0.0004 0.0106 0.0007 

然後我使用的PCA的功能如下:

[COEFF, SCORE, LATENT] = pca(Components_matrix) 
The displayed results are: 

COEFF =

0.9984 -0.0533 -0.0057 -0.0177 0.0045 
0.0162 0.1810 0.8788 0.0695 -0.3537 
0.0099 -0.0218 -0.2809 0.8034 -0.2036 
0.0514 0.9817 -0.1739 -0.0016 0.0468 
0.0138 -0.0018 0.0616 0.4276 -0.3585 
0.0001 -0.0008 -0.0025 0.0215 0.0210 
0.0069 0.0158 0.3388 0.4070 0.8380 
0.0001 -0.0011 0.0022 0.0198 0.0016 

SCORE =

1.0e+03 * 

    -0.0946 0.0312 0.0184 -0.0014 -0.0009 
    1.2758 0.0179 -0.0086 -0.0008 0.0001 
    0.2569 -0.0642 0.0107 0.0016 0.0012 
    -0.4043 0.1031 -0.0043 0.0015 0.0003 
    -0.7721 -0.0299 -0.0079 -0.0017 0.0012 
    -0.2617 -0.0580 -0.0083 0.0008 -0.0020 

LATENT =

1.0e+05 * 

5.0614 
0.0406 
0.0014 
0.0000 
0.0000 

我預期例如COEFF和潛在分別爲8×8和8×1矩陣。但那不是我得到的。爲什麼會這樣以及如何糾正這種情況。請幫助。

+2

嘗試'pca(Components_matrix。')' –

+0

你似乎認爲PCA會爲你排序數據,但這不是發生了什麼? – milez

回答

2

您對pca()和Matlab的輸出的使用是正確的。問題在於你有更多的維度比你有樣品,即你只有6輛車,但8個變量。如果您有N個樣本和N或更多變量,那麼主要組件的數量僅爲N-1,因爲其他組件不會是唯一的。所以COEFF是輸入的協方差矩陣的特徵向量,並且SCORE(:,1)是第一主成分,SCORE(:,2)是第二等,其中總共只有N-1=5,並且LATENT是協方差矩陣的特徵值,或者是由每個連續的主成分解釋的方差量,其中再次只有N-1=5

對此here有更詳細的討論。

+0

卡爾非常感謝你。我現在看到我的錯誤。 –

+0

很好解釋。 +1 – rayryeng