我正在尝试用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矩阵。但这不是我得到的。为什么会如此,以及如何纠正这种情况。请帮助。
答案 0 :(得分:2)
您对pca()
和Matlab输出的使用是正确的。问题是你有比样本更多的维度,即你只有6辆车而是8个变量。如果您有N
个样本和N
个或更多变量,则主要组件的数量仅为N-1
,因为其他组件不是唯一的。所以COEFF
是输入的协方差矩阵的特征向量,SCORE(:,1)
是第一个主成分,SCORE(:,2)
是第二个,等等,其中只有{{1}总共而言,N-1=5
是协方差矩阵的特征值,或由每个连续主成分解释的方差量,其中只有LATENT
。
对此here进行了更详细的讨论。