Skip to content

PCA

样本矩阵

设一个随机变量有p个维度,那么第i个样本ai可以用p维向量来描述:

rn=[a1,a2,,ap]

样本集合有n个样本,每个维度的样本构成一个列向量c

cp=[a1a2an]

那么就形成了n×p的样本矩阵:

A=[r1r2rn]=[a11a12a1pa21a22a2pan1an2anp]=[c1,c2,,cp]

对每一列求均值,第p列的均值a¯p为:

a¯p=i=1nai,p

进行样本中心化,每一列的值减去该列的平均值,得到新矩阵:

A=[c1a¯1,c2a¯2,,cpa¯p]

协方差矩阵

协方差计算公式为:

Cov(X,Y)=1n1i=1n(XiX¯)(YiY¯)

对于p维变量的协方差矩阵是分别计算每个维度之间的协方差:

C=[Cov(c1,c1)Cov(c1,c2)Cov(c1,cp)Cov(c2,c1)Cov(c2,c2)Cov(c2,cp)Cov(cp,c1)Cov(cp,c2)Cov(cp,cp)]

协方差矩阵的每个值Ci,j表示第i和第j个维度的协方差,而对角线的值表示方差。

把协方差公式展开后,提出公共的1n1项,得到:

C=1n1[i=1nai,1ai,1i=1nai,1ai,2i=1nai,1ai,pi=1nai,2ai,1i=1nai,2ai,2i=1nai,2ai,pi=1nai,pai,1i=1nai,pai,2i=1nai,pai,p]

上述矩阵中的每个值:

i=1nai,pai,p=a1,pa1,p+a2,pa2,p++an,pan,p=[a1,pa2,pan,p]×[a1,pa2,pan,p]=cpTcp

整个矩阵可以最终化简得到:

C=[c1Tc1c1Tc2c1Tcpc2Tc1c2Tc2c2TcpcpTc1cpTc2cpTcp]=[c1c2cp]×[c1c2cp]=1n1ATA

主成分1

求第一主成分PC1的问题可转化为计算每个样本向量在v上投影点的方差最大问题:

maxs2=1n1i=1nSi2

式子中的S2是每个样本在v向量上的投影值:

S2=(av)2

av得到一个标量,而行向量乘以列向量也得到标量(一维矩阵),av=vTai=aiTv,那么可以代换得到:

i=1nSi2=i=1n(aiv)2=i=1n(vTai)(aiTv)

这时公共项可以提出求和式:

i=1n(vTai)(aiTv)=vT(i=1naiaiT)vi=1naiaiT=ATA

AAT代换1求和式:

vT(i=1naiaiT)v=vT(ATA)v

根据上文的推导,最终样本方差s2就转化为下式:

s2=1n1i=1nSi2=1n1vT(ATA)v=vTCv

求极大值问题

最终将问题转变为已知条件下的最大值问题,可以利用拉格朗日乘数法求解:

maxs2=vTCvs.t.vvT=1

构造拉格朗日函数:

F(v)=vCvTλ(1vvT)

对函数求偏导:

Fv=2CvT2λvT=0

最后就得到了:

CvT=λvT

这说明,vT是协方差矩阵C的特征向量,λ是对应的特征值,把上式带入目标函数,得到:

vTCv=vT(λv)=λ(vTv)=λ

最大化目标函数就等价于最大化特征值λ,求每个主成分就相当于对协方差矩阵C做特征值分解,选前k个特征值。