在Matlab中使用PCA降低尺寸

时间:2015-07-20 10:40:09

标签: matlab

我正在尝试用matlab对车辆进行分类。我需要减少功能的维度以消除冗余。我正在使用pca。不幸的是,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和LATENT分别为8x8和8x1矩阵。但这不是我得到的。为什么会如此,以及如何纠正这种情况。请帮助。

1 个答案:

答案 0 :(得分:2)

您对pca()和Matlab输出的使用是正确的。问题是你有比样本更多的维度,即你只有6辆车而是8个变量。如果您有N个样本和N个或更多变量,则主要组件的数量仅为N-1,因为其他组件不是唯一的。所以COEFF是输入的协方差矩阵的特征向量,SCORE(:,1)是第一个主成分,SCORE(:,2)是第二个,等等,其中只有{{1}总共而言,N-1=5是协方差矩阵的特征值,或由每个连续主成分解释的方差量,其中只有LATENT

对此here进行了更详细的讨论。