最近两个星期都在研究pca的人脸识别,一直都对pca有些不是很理解,首先是关于协方差矩阵的问题,开始的时候,我认为可以把一幅100*100的图片看出1*10000懂得矢量,50个样本,但是在看人家的代码的时候发现在求解协方差矩阵的时候,人家是使用样本与样本间求的,后来我在计算机视觉群里面询问,终于把问题给解决了,首先假如A是10000*50的图像数据,矩阵的列是样本(表示一幅图像),假如求矩阵A的协方差矩阵,应该为求AA'得协方差(因为协方差是维与维的关系,现在我们的图像是10000维),这样AA'就是一个10000*10000的矩阵,这未免太多了,对于求其特征值和特征向量是很困难的,因此有人给出了一个小技巧(trick),就是先求A'A的的特征值和特征向量,我们发现其实AA'和A'A的特征值是相同的(当然是包含关系),举个例子,
clear,clc
S=fix(rand(3,5)*50); %3为样本的个数,5为样本的维数
S=S-repmat(mean(S),3,1); %样本中心化
S=S';
C1=S*S';
C2=S'*S
%C=(S*S')./(size(S,2)-1); %样本的协方差矩阵
[P,Lambda]=eig(C1) %对协方差矩阵进行特征值分解
[P1,Lambda1]=eig(C2)
结果为:
%%************
C2 =
1.0e+003 *
0.5514 -0.6259 0.0744
-0.6259 1.0468 -0.4209
0.0744 -0.4209 0.3464
P =
0.7885 0.0322 -0.3100 -0.3302 0.4148
0.0487 -0.6597 -0.5790 0.4651 -0.1039
-0.4122 -0.5407 -0.0142 -0.6803 0.2734
0.4432 -0.4197 0.4729 -0.1887 -0.6068
0.0974 -0.3085 0.5873 0.4198 0.6117
Lambda =
1.0e+003 *
-0.0000 0 0 0 0
0 -0.0000 0 0 0
0 0 0.0000 0 0
0 0 0 0.3487 0
0 0 0 0 1.5960
P1 =
0.5774 0.6410 -0.5057
0.5774 0.1174 0.8080
0.5774 -0.7585 -0.3023
Lambda1 =
1.0e+003 *
-0.0000 0 0
0 0.3487 0
0 0 1.5960
%%***********************
我们发现AA'和A'A的特征值的确有部分是相同的。