PCA(主成分分析法)详解

来源:互联网 发布:网络摄像头ping不通 编辑:程序博客网 时间:2024/04/27 18:42

       在数据预处理领域,经常遇到的一个问题就是数据降维,通常原始数据都处于一个高维空间中而对建模真正有用的数据则处于一个相对低维的流形之中,数据的众多分量之中存在冗余的相关关系,假若直接使用会带来不可接受的高昂的计算代价。PCA就是一种广泛应用的降维技术,除了解决维度灾难问题,它还可以用于数据可视化、有损压缩等应用领域。PCA本质上是将原始数据投影到低维线性空间上,其有两种优化目标,但都会导出一个同样的算法:一是投影后方差最大化,或者等价地使得投影后损失最小。

方差最大化

       假设有一组数据{xn},n=1,2,3,…N,其处于一个D维空间中,我们的目标是将其投影到K维空间中并使得投影后的方差达到最大值。考虑这个K维子空间的一组互相正交的单位向量{un},n=1,2,…K,选择一个方向u1,故投影后的标量可以写成uT1xn,因而投影后的方差可以写成

1Nn=1N{uT1(xnx¯n)}2x¯n=1Nn=1Nxn
根据协方差矩阵的定义S=1NNn=1(xnx¯n)(xnx¯n)T,上式可写成uT1Su1。最大化这个方差,同时考虑基向量的性质,构造拉格朗日函数
uT1Su1+λ(1uT1u1)
u1求导并令导数为零可得Su1=λu1。关于矩阵求导法则可以参考这里。可以看出,u1是协方差矩阵的一个特征向量,方差uT1Su1=λ。这启发我们,为使得投影后方差最大应该找出协方差矩阵最大特征值对应的特征向量,这就是第一主成分。接下来就是依次找出前K大特征值对应的特征向量,因为协方差矩阵是实对称矩阵,由线性代数知识可知其不同特征值对应的特征向量两两正交,对于多重特征值则可以利用正交化构造相应的特征向量。

损失最小化

       考虑一组单位正交基{un},n=1,2,…D,每一个数据点都可以表示为xn=Di=1aniui,利用正交的特性,等号两边同时与uj做内积有xTnuj=anj,因此有

xn=i=1D(xTnui)ui
这是对数据点的一种精准表示,而我们的目标是降维,而K维线性子空间可以用前K个基向量完整表示(每个基向量的第K个以后的分量都是0),故投影之后的向量可以用下式近似表示
x^n=i=1Kzniui+i=M+1Dbiui
其中,zni与具体的数据点相关,而bi对所有的数据点一样。则投影后误差为
1Ni=1N{xnx^n}2
x^n带入并对znj求导令其导数为0,可得znj=xTnuj,注意这里使用了uTiuj=0uTiui=1的条件。同样的对于bj,求导有bj=x¯Tuj。将上述结果带入误差表达式可得
J=1Nn=1Ni=K+1D(xTnuix¯Tui)2=i=K+1DuTiSui
与最大化方差对比可以发现两个式子是很相似的,都是先要求协方差矩阵再进行后续的运算。依然是构造拉格朗日函数可得Sui=λiui,代入得
J=i=K+1DuTiSui=i=K+1DuTiλiui=i=K+1Dλi
因为目标是最小化误差,所以要使得后面D-K个特征值之和取最小值,等价地就是前K个特征值取最大值。

PCA

       由上述推导总结算法过程如下:

  1. 求数据的协方差矩阵。这一步可以先对数据进行中心化xnx¯再求协方差。
  2. 对协方差矩阵进行正交相似对角化,取正交阵的前K个向量,将原始数据投影到这个线性子空间

       在数据预处理中经常要进行的一步便是标准化,使得每个分量均值为零,方差为单位方差。但是这种标准化并不能消除分量之间的相关性,换言之协方差矩阵并不是单位阵,通过PCA的变化则可以做到这一点。定义如下变换

yn=Λ12PT(xnx¯)
其中,Λ=diag{λ1,λ2,...λD}P为相应的正交阵,有
1Nn=1N(yny¯)(yny¯)T=1Nn=1NynyTn=1Nn=1NΛ12PT(xnx¯)(xnx¯)TPΛ12=Λ12PTSPΛ12=Λ12ΛΛ12=E
可以看出,经过变换之后的数据均值为0,协方差矩阵是单位阵,分量之间的相关性被消除。

高维空间下的PCA

       在某些情景下,数据的维度可能远远大于数据的量,例如在对于一幅图片其维度可能达到百万级别(例如一张1080P的图片,每个像素点是一维),而求解一个D×D的矩阵复杂度一般为Ω(n3),直接使用PCA显然是不可行的。此外,对于一个中心化以后的数据集XD×N,其协方差矩阵为S=1NXXT,由线性代数知识有

r(S)=r(XXT)=r(X)N1
这里解释一下,第一个等号成立利用定义显然成立,第二个等式成立是利用XXTY=0XTY=0同解:

XTY=0XXTY=0
XXTY=0YTXXTY=0(XTY)T(XTY)=0XTY=0

X是中心化以后的数据,故将X中除第一列外的其余列累加到第一列将会使得第一列元素全为0,故不等号成立,因此协方差矩阵最多有N1个非零特征值。为解决这个问题,可以进行如下变换。首先协方差矩阵的特征值与特征向量满足

1NXXTui=λiui
两边同时左乘XT
1NXTXXTui=λiXTui
vi=XTuiS=1NXTX,则可发现SS拥有相同的N1个非零特征值以及DN+1个零特征值。这使得我们可以在低维空间中求解特征向量,复杂度为Ω(N3)。将上式两端再左乘X
1NXXT(XXTui)=λi(XXTui)
可知,原协方差矩阵的特征值为λi,特征向量为XXTui,当然变换过后的特征向量长度未必为1,还需进行归一化。故对此类问题,首先计算S=1NXTX,求出其特征值λi与特征向量vi,对特征向量左乘X并归一化即可得原数据空间的特征向量。

0 0
原创粉丝点击