一些多维信号的处理如图像,其维度等于其像素数,若直接用于识别的计算,计算量极大。PCA是降维的算法,等同于变换矩阵为协方差矩阵时的K-L变换,其妙处不次于图像压缩编码中的DCT变换。在人脸识别等应用中,PCA用于降维,带来的好处是维度减少,从而减少计算量。
以matlab中的应用为例,有一个4行8列(即样本数为4,维数为8)的矩阵X如下:
>> X=[28 8 8 34 11 26 5 40;23 39 30 37 45 49 48 43;0 15 13 22 7 3 0 4;16 26 32 4 41 22 38 19]
X =
28 8 8 34 11 26 5 40
23 39 30 37 45 49 48 43
0 15 13 22 7 3 0 4
16 26 32 4 41 22 38 19
%对其执行主成分分析
>> [C,S,L]=princomp(X)
C =
0.1749 0.3266 -0.5260 0.5043 -0.0473 -0.1923 0.0683 -0.5366
0.2961 -0.1630 0.4653 0.7100 -0.2288 -0.1257 -0.1855 0.2501
0.2447 -0.2781 -0.0008 -0.3671 -0.4369 -0.2495 -0.5755 -0.3790
0.0484 0.5227 0.6438 -0.1672 0.2200 -0.3282 0.0771 -0.3463
0.4657 -0.2536 -0.1057 -0.0115 0.7979 -0.0779 -0.2540 0.0154
0.4290 0.3071 0.1031 -0.0532 -0.0989 0.8163 -0.1290 -0.1244
0.5730 -0.2497 0.0139 -0.2032 -0.2007 -0.1357 0.7134 -0.0127
0.3005 0.5434 -0.2652 -0.1859 -0.1393 -0.2942 -0.1832 0.6083
S =
-17.4956 30.4765 -8.2819 0 0 0 0 0
47.5771 8.5765 9.2663 0 0 0 0 0
-45.0906 -11.8355 9.5006 0 0 0 0 0
15.0091 -27.2175 -10.4850 0 0 0 0 0
L =
1.0e+003 *
1.6094
0.6277
0.1182
0
0
0
0
0
得到的C为特征向量(列向量)构成的矩阵,各特征向量(按其对应的特征值从大到小的顺序)从左向右排列。从S可以看出变换后只需要保留三个维度就能够达到主成分的贡献率100%。L是排序后特征值(从大到小的顺序)。
原始样本数据X的协方差矩阵的特征值非负,并且其正的特征值个数不大于min(样本数, 维数), 也就是说如果样本数小于维数,其PCA处理后的维数必然小于实际维数。