主成分分析(PCA,Principle Component Analysis)就是在寻找使方差最大的方向,并在该方向上投影。(通常方差越大被视为越重要,方差也常常被称为能量)
Y=A(X−X)
Y是PCA的输出,a是投影的方向矩阵,X是PCA的输入,X是X的期望(通常也可以用均值代替X=P1∑i=1PXi)。
其中:Y是M×1矩阵,a是M×N矩阵,X和X是N×1矩阵。可以看出,PCA把N维的数据X投影到了以ai为基向量的空间中得到M维的Y,完成降维。(M<N)
A=⎣⎢⎢⎢⎡a1a2⋮aM⎦⎥⎥⎥⎤
PCA的推导
假设训练样本有{Xi}i=1∼P,则Yi可以写成:
Yi=⎣⎢⎢⎢⎡yi1yi2⋮yiM⎦⎥⎥⎥⎤=⎣⎢⎢⎢⎡a1(Xi−X)a2(Xi−X)⋮aM(Xi−X)⎦⎥⎥⎥⎤(i=1∼P)
由主成分的含义,yi1有最大的方差,因此我们需要最大化 var(y1)=∑i=1P(yi1−yi1)2。
又因为:
yi1=P1i=1∑Pyi1=P1i=1∑Pai(Xi−X)=Pai(i=1∑PXi−PX)=0
所以有:
var(y1)=i=1∑P(yi1−yi1)2=i=1∑Pyi12=i=1∑P[a1(Xi−X)]2=i=1∑P[a1(Xi−X)][a1(Xi−X)]T=a1i=1∑P[(Xi−X)(Xi−X)T]a1T=a1Σa1T
其中Σ=∑i=1P(Xi−X)(Xi−X)T称为X的协方差矩阵。在上式中,我们不希望y1的大小和a1有关,因为a1只是一个基向量,控制投影的方向,我们希望a1是一个单位向量。因此,上述求最大值变成以下优化问题:
max:a1Σa1Ts.t.a1a1T=∥a1∥2=1
解上面优化问题可以使用拉格朗日乘数法:
E(a1)=a1Σa1T−λ1(a1a1T−1)∂a1∂E(a1)=2(Σa1T−λ1a1T)T=0
得到:Σa1T=λ1a1T(即a1T是Σ的特征向量,λ1是对应的特征值)
目标函数变为:
var(y1)=a1Σa1T=λ1a1a1T=λ1
则当a1是Σ最大的特征值λ1对应的特征向量时,a1是此优化问题的解。
我们称y1=a1(X−X)为X的第一主成分,a1是Σ最大的特征值λ1对应的特征向量。
我们接着求a2,我们希望求出的主成分之间是不相关的,即:
cov(y1,y2)=i∑P(yi1−yi1)(yi2−yi2)=i∑Pyi1yi2=i∑P[a1(Xi−Xˉ)][a2(Xi−Xˉ)]T=a1Σa2T=0
同理,由cov(y2,y1)=0推出a2Σa1T=0,且由上面的推导可知,a2Σa1T=λ1a2a1T=0推出a2a1T=0,即a1与a2正交。
求解a2变成了下列优化问题:
max:a2Σa2Ts.t.a2a2T=∥a2∥2=1,a1a2T=a2a1T=0
解上面优化问题可以使用拉格朗日乘数法:
E(a2)=a2Σa2T−λ2(a2a2T−1)−βa1a2T∂a2∂E(a2)=(2Σa2T−2λ2a2T−βa1T)T=0
得到:
(2Σa2T−2λ2a2T−βa1T)T(2a2Σ−2λ2a2−βa1)a1T=2a2ΣT−2λ2a2−βa1=2a2Σ−2λ2a2−βa1=0=2a2Σa1T−2λ2a2a1T−βa1a1T=−β=0
将β=0带入∂a2∂E(a2)得到:
Σa2T−λ2a2T=0
即a2T是Σ的特征向量,λ2是对应的特征值
目标函数变为:
var(y2)=a2Σa2T=λ2a2a2T=λ2
则当a2是Σ第二大的特征值λ2对应的特征向量时,a2是此优化问题的解。
Σ最大的特征值λ1已经分配给var(y1)了
我们称y2=a2(X−X)为X的第二主成分,a2是Σ最大的特征值λ2对应的特征向量。
按照上述方法可以求得第一、第二、直到第M主成分yi,其系数向量a1T,a2T,⋯,aMT分别是Σ的第一个、第二个、直到第M个单位特征向量,λ1,λ2,⋯,λM分别是对应的特征值,其值依次递减。并且,第k主成分的方差等于Σ的第k个特征值。
PCA算法总结
PCA算法:
-
求Σ=∑i=1P(Xi−X)(Xi−X)T
-
求Σ的特征值并按从大到小排序[λ1,λ2,⋯,λM],对应特征值[a1T,a2T,⋯,aMT]
-
归一化所有aiT,使∥aiT∥=1
-
A=⎣⎢⎢⎢⎡a1a2⋮aM⎦⎥⎥⎥⎤
-
Y=A(X−X)
SVD(Singular Value Decomposition)算法可以快速求得特征值