原理
主成分分析(PCA)是一种数据降维算法。设在n维空间中的m个样本,记作X=[x(1),x(2),...,x(m)],现在对其进行压缩,投影到k维空间中,k<n,要求损失的信息最少。设W=[w(1),w(2),...,w(k)]是此k维空间的一组标准正交基,其中w(i)∈Rn,满足:∥w(i)∥2=1,(w(i))Tw(j)=0(i=j),设X在投影空间中的矩阵表示为Z,即有:
Xn×m=Wn×k⋅Zk×m
主成分分析(PCA)是一种数据降维算法。设在n维空间中的m个样本,记作X=[x(1),x(2),...,x(m)],现在对其进行压缩,投影到k维空间中,k<n,要求损失的信息最少。设W=[w(1),w(2),...,w(k)]是此k维空间的一组标准正交基,其中w(i)∈Rn,满足:∥w(i)∥2=1,(w(i))Tw(j)=0(i=j),设X在投影空间中的矩阵表示为Z,即有:Xn×m=Wn×k⋅Zk×m
显然Z=WTX(根据正交阵性质:WTW=E,即W−1=WT),再将X投影在k维空间中的矩阵Z重新映射回原n维空间,重构X,得到X∗=WZ=WWTX,既然要使前后损失的信息最少,一种合理的设想是重构后的X∗与原始X之间的“距离”最小,于是可转化为求解以下最优化问题:
Wmin∣∣X−X∗∣∣F2=Wmin∣∣X−WWTX∣∣F2s.t.WTW=E
显然Z=WTX(根据正交阵性质:WTW=E,即W−1=WT),再将X投影在k维空间中的矩阵Z重新映射回原n维空间,重构X,得到X∗=WZ=WWTX,既然要使前后损失的信息最少,一种合理的设想是重构后的X∗与原始X之间的“距离”最小,于是可转化为求解最优化问题:Wmin∥X−X∗∥F2=Wmin∥X−WWTX∥F2,s.t.WTW=E
化简上式:Wmin∣∣X−X∗∣∣F2=Wmintr((X−WWTX)T(X−WWTX))(根据矩阵F范数和迹的关系:∣∣A∣∣F=tr(ATA))
=Wmintr(XTX−XTWWTX−XTWWTX+XTWWTWWTX) (和W无关的项不会影响最优化结果,因此丢弃XTX)
=Wmintr(−2XTWWTX+XTWWTX)=Wmintr(−XTWWTX)=Wmaxtr(XTWWTX)(下面再根据矩阵迹运算的循环不变性:tr(ABC)=tr(CAB)=tr(BCA),调一下序)
化简上式:Wmin∣∣X−X∗∣∣F2=Wmintr((X−WWTX)T(X−WWTX))=Wmintr(−2XTWWTX+XTWWTX)=Wmaxtr(XTWWTX)
=Wmaxtr(WTXXTW),最终转换为以下优化问题:
Wmaxtr(WTXXTW)s.t.WTW=E(1)
=Wmaxtr(WTXXTW),最终转换为优化问题:Wmaxtr(WTXXTW),s.t.WTW=E(式(1))
利用拉格朗日乘子法求解上述最优化问题,转为求解以下拉格朗日函数的极值(参考南瓜书):
L(W,Θ)=tr(WTXXTW)+<Θ,(E−WTW)>
L(W,Θ)=tr(WTXXTW)+<Θ,(E−WTW)>
其中Θ∈Rk×k是拉格朗日乘子矩阵,若将约束条件WTW=E拆分下来看,即同时满足(w(i))Tw(i)=1,(w(i))Tw(j)=0(i=j)(只看前者模长为1的条件,后者等于0也就是正交的约束就不管了,至于为何继续阅读就明白了,那么拆解下来的约束条件一共就k个,拉格朗日乘子也就只有k个),显然Θ是一个对角矩阵,记新的拉格朗日乘子矩阵为Λ,并设Λ=diag{λ1,λ2,...,λk},于是新的拉格朗日函数为:
L(W,Λ)=tr(WTXXTW)+tr(ΛT(E−WTW))
其中Θ∈Rk×k是拉格朗日乘子矩阵,若将约束条件WTW=E拆分下来看,即同时满足(w(i))Tw(i)=1,(w(i))Tw(j)=0(i=j)(只看前者模长为1的条件,后者等于0也就是正交的约束就不管了,至于为何继续阅读就明白了,那么拆解下来的约束条件一共就k个,拉格朗日乘子也就只有k个),显然Θ是一个对角矩阵,记新的拉格朗日乘子矩阵为Λ,并设Λ=diag{λ1,λ2,...,λk},于是新的拉格朗日函数为:L(W,Λ)=tr(WTXXTW)+tr(ΛT(E−WTW))
两端对W求偏导,令其为0,得到:∂W∂L(W,Λ)=∂W∂tr(WTXXTW)−∂W∂tr(ΛTWTW)=2XXTW−2WΛ=0,于是XXTW=WΛ
注:求∂W∂tr(WTXXTW),迹是标量,即标量对矩阵求导,参考矩阵求导术或维基百科,主要基于以下规则:
tr(A±B)=tr(A)±tr(B)tr(A)=tr(AT)tr(ABC)=tr(CAB)=tr(BCA)d(AB)=d(A)B+Ad(B)d(AT)=(dA)Td(A±B)=d(A)±d(B)d(tr(A))=tr(d(A))
于是d(tr(WTXXTW))=tr(d(WTXXTW))=tr(d(WT)XXTW+WTd(XXTW))=tr(d(WT)XXTW)+tr(WTd(XXTW))=tr(XXTWd(WT))+tr(WTXXTd(W))
=tr((XXTWd(WT))T)+tr(WTXXTd(W))=tr(d(W)WTXXT)+tr(WTXXTd(W))=tr(WTXXTd(W))+tr(WTXXTd(W))=tr(2WTXXTd(W))=tr((2XXTW)Td(W))
设f=f(x1,1,...,x1,n,x2,1,...,x2,n,...,xm,1,...,xm,n)=f(X),有df=∂x1,1∂fdx1,1+...+∂xm,n∂fdxm,n=i=1∑mj=1∑n∂xi,j∂fdxi,j=tr((∂X∂f)TdX)成立,其中
X=⎣⎢⎢⎢⎢⎡x1,1x2,1⋮xm,1x1,2x2,2⋮xm,2⋯⋯⋱⋯x1,nx2,n⋮xm,n⎦⎥⎥⎥⎥⎤
设f=f(x1,1,...,x1,n,x2,1,...,x2,n,...,xm,1,...,xm,n)=f(X),有df=∂x1,1∂fdx1,1+...+∂xm,n∂fdxm,n=i=1∑mj=1∑n∂xi,j∂fdxi,j=tr((∂X∂f)TdX)成立,其中X=\{x_{i,j}\}_{i\in\{1,...,m\},\,j\in\{1,...,n\}}\inR^{m\times n}
于是立即推,∂W∂tr(WTXXTW)=2XXTW
再求∂W∂tr(ΛTWTW),同上,有
d(tr(ΛTWTW))=tr(d(ΛTWTW))=tr(d(ΛT)WTW+ΛTd(WTW))=tr(ΛTd(WTW))=tr(ΛT(d(WT)W+WTd(W)))
=tr(ΛTd(WT)W)+tr(ΛTWTd(W))=tr(WTd(W)Λ)+tr(ΛTWTd(W))=tr(ΛWTd(W))+tr(ΛTWTd(W))=tr(2ΛTWTd(W))(其中ΛT=Λ)
立即推,∂W∂tr(ΛTWTW)=2WΛ(注解部分结束)
将XXTW=WΛ展开来看,有:
XXTw(i)=λiw(i)(2)
将XXTW=WΛ展开来看,有:XXTw(i)=λiw(i)(式(2))
i∈{1,2,...,k},显然这是矩阵特征值和特征向量的定义式,事实上XXT是实对称矩阵((XXT)T=XXT),而实对称矩阵的不同特征值所对应的特征向量是相互正交的,即使同一特征值的不同特征向量也可以通过施密特正交化使其变得正交,所以上述仅仅在(w(i))Tw(i)=1限制条件下计算出的W可以同时满足限制条件:(w(i))Tw(j)=0(i=j)
回代式(1),有:
Wmaxtr(WTXXTW)=Wmaxi=1∑k(w(i))TXXTw(i)注:XXT相当于常数=Wmaxi=1∑k(w(i))T⋅λiw(i)=Wmaxi=1∑kλi
Wmaxtr(WTXXTW)=Wmaxi=1∑k(w(i))TXXTw(i)=Wmaxi=1∑k(w(i))T⋅λiw(i)=Wmaxi=1∑kλi
所以只要使特征值λ1,λ2,...,λk是矩阵XXT的前k个最大的特征值即可,此时目标函数(1)达到最优,即数据降维后的耗损是最小的。简单来说,计算过程是这样的:首先计算出XXT的特征值,挑出其中最大的前k个特征值所对应的特征向量,然后进行单位化以及施密特正交化,最后将这些特征向量按列拼凑即得待求W
在实际算法中,首先会对数据进行预处理,使样本的均值变为0,我的理解是,考虑到不同特征之间的数值或数量级存在较大差异,此举可防止数值较小的特征被忽略,此时XXT正是这些特征的协方差矩阵
PCA算法:
输入:样本集X={x(1),x(2),...,x(m)},投影空间维度k
过程:
- 预处理:x(i)=x(i)−m1j=1∑mx(j)
- 计算样本协方差矩阵XXT(此处省略了协方差矩阵前面的常系数,这是因为对一个矩阵做特征分解,Aξ=λξ,两边同乘一个常系数a并不影响特征向量的值,aAξ=aλξ=λ′ξ)
- 对协方差矩阵做特征值分解
- 取前k个最大的特征值以及其对应的特征向量(经过单位化和正交化,简称规范化):w(1),w(2),...,w(k)
输出:W=[w(1),w(2),...,w(k)],于是投影矩阵为WT,有Z=WTX,Z是降维后的数据
核PCA
——本节推导参考[1]
对于数据集X=[x1,x2,...,xm],xi∈Rn,现在通过非线性变换ϕ:Rn→RN将全部样本映射到高维特征空间(希尔伯特空间),设zi是原始空间中的样本点xi在高维空间中的像,有zi=ϕ(xi),然后在此高维空间(RN)实施PCA,降维到d维空间,要做PCA,首先计算协方差矩阵:
C=m1i=1∑m(ϕ(xi)−m1j=1∑mϕ(xj))(ϕ(xi)−m1j=1∑mϕ(xj))T
对于数据集X=[x1,x2,...,xm],xi∈Rn,现在通过非线性变换ϕ:Rn→RN将全部样本映射到高维特征空间(希尔伯特空间),设zi是原始空间中的样本点xi在高维空间中的像,有zi=ϕ(xi),然后在此高维空间(RN)实施PCA,降维到d维空间,要做PCA,首先计算协方差矩阵:C=m1i=1∑m(ϕ(xi)−m1j=1∑mϕ(xj))(ϕ(xi)−m1j=1∑mϕ(xj))T
为描述方便,令ψ(xi)=ϕ(xi)−m1j=1∑mϕ(xj),则协方差矩阵C=i=1∑mψ(xi)ψ(xi)T(此处已省略常系数m1),根据公式(2)有Cvj=λjvj,j∈{1,2,...,d}(指取前d个最大的特征值λj),其中vj是C对应于特征值λj的特征向量,即:
(i=1∑mψ(xi)ψ(xi)T)vj=λjvj
于是vj=i=1∑mλj1ψ(xi)ψ(xi)Tvj,令αij=λj1ψ(xi)Tvj,则:
vj=i=1∑mψ(xi)αij
为描述方便,令ψ(xi)=ϕ(xi)−m1j=1∑mϕ(xj),则协方差矩阵C=i=1∑mψ(xi)ψ(xi)T(此处已省略常系数m1),根据公式(2)有Cvj=λjvj,j∈{1,2,...,d}(指取前d个最大的特征值λj),其中vj是C对应于特征值λj的特征向量,即:(i=1∑mψ(xi)ψ(xi)T)vj=λjvj,于是vj=i=1∑mλj1ψ(xi)ψ(xi)Tvj,令αij=λj1ψ(xi)Tvj,则:vj=i=1∑mψ(xi)αij
在Cvj=λjvj两边左乘ψ(xk)T得到ψ(xk)TCvj=ψ(xk)Tλjvj,化简该式:左式=ψ(xk)T(i=1∑mψ(xi)ψ(xi)T)(i=1∑mψ(xi)αij)(根据(i=1∑mf(xi))⋅(i=1∑ng(xi))=i=1∑mj=1∑n(f(xi)g(xj)))=ψ(xk)Ti=1∑ml=1∑m(ψ(xi)ψ(xi)T⋅ψ(xl)αlj)=i=1∑ml=1∑m(ψ(xk)Tψ(xi)ψ(xi)Tψ(xl)⋅αlj)=i=1∑m([ψ(xk)Tψ(xi)ψ(xi)Tψ(x1),ψ(xk)Tψ(xi)ψ(xi)Tψ(x2),...,ψ(xk)Tψ(xi)ψ(xi)Tψ(xm)]⎣⎢⎢⎢⎢⎢⎢⎢⎡α1jα2j...αmj⎦⎥⎥⎥⎥⎥⎥⎥⎤)=[ψ(xk)T⋅(i=1∑mψ(xi)ψ(xi)T)⋅ψ(x1),ψ(xk)T⋅(i=1∑mψ(xi)ψ(xi)T)⋅ψ(x2),...,ψ(xk)T⋅(i=1∑mψ(xi)ψ(xi)T)⋅ψ(xm)]⎣⎢⎢⎢⎢⎢⎢⎢⎡α1jα2j...αmj⎦⎥⎥⎥⎥⎥⎥⎥⎤=右式=λji=1∑m(ψ(xk)Tψ(xi)⋅αij)=λj[ψ(xk)Tψ(x1),ψ(xk)Tψ(x2),...,ψ(xk)Tψ(xm)]⎣⎢⎢⎢⎢⎢⎢⎢⎡α1jα2j...αmj⎦⎥⎥⎥⎥⎥⎥⎥⎤
在Cvj=λjvj两边左乘ψ(xk)T得到ψ(xk)TCvj=ψ(xk)Tλjvj,化简该式:左式=[ψ(xk)T⋅(i=1∑mψ(xi)ψ(xi)T)⋅ψ(x1),ψ(xk)T⋅(i=1∑mψ(xi)ψ(xi)T)⋅ψ(x2),...,ψ(xk)T⋅(i=1∑mψ(xi)ψ(xi)T)⋅ψ(xm)][α1j,α2j,...,αmj]T=右式=λj[ψ(xk)Tψ(x1),ψ(xk)Tψ(x2),...,ψ(xk)Tψ(xm)][α1j,α2j,...,αmj]T
其中k∈{1,2,...,m},对全部的k应用上述等式,拼凑得到:K2αj=λjKαj(如果正向推有困难,可以反向证明其成立),其中K2=K⋅K(矩阵乘法),K、αj分别为:
K=⎣⎢⎢⎢⎢⎡ψ(x1)Tψ(x1)ψ(x2)Tψ(x1)⋮ψ(xm)Tψ(x1)ψ(x1)Tψ(x2)ψ(x2)Tψ(x2)⋮ψ(xm)Tψ(x2)⋯⋯⋱⋯ψ(x1)Tψ(xm)ψ(x2)Tψ(xm)⋮ψ(xm)Tψ(xm)⎦⎥⎥⎥⎥⎤αj=[α1j,α2j,...,αmj]T
K={ψ(xi)Tψ(xj)}i,j∈{1,...,m}∈Rm×m,αj=[α1j,α2j,...,αmj]T
于是有:
Kαj=λjαj(3)
于是有:Kαj=λjαj(式(3))
j∈{1,2,...,d},显然,式(3)就是一个特征值分解问题(并取K前d个最大的特征值所对应的特征向量),现在要计算K
Ki,j=ψ(xi)Tψ(xj)=(ϕ(xi)−m1l=1∑mϕ(xl))T(ϕ(xj)−m1l=1∑mϕ(xl))=(ϕ(xi)T−m1l=1∑mϕ(xl)T)(ϕ(xj)−m1l=1∑mϕ(xl))=ϕ(xi)Tϕ(xj)−m1ϕ(xi)T(l=1∑mϕ(xl))−m1(l=1∑mϕ(xl)T)ϕ(xj)+m21(l=1∑mϕ(xl)T)(l=1∑mϕ(xl))
Ki,j=ψ(xi)Tψ(xj)=(ϕ(xi)−m1l=1∑mϕ(xl))T(ϕ(xj)−m1l=1∑mϕ(xl))=(ϕ(xi)T−m1l=1∑mϕ(xl)T)(ϕ(xj)−m1l=1∑mϕ(xl))=ϕ(xi)Tϕ(xj)−m1ϕ(xi)T(l=1∑mϕ(xl))−m1(l=1∑mϕ(xl)T)ϕ(xj)+m21(l=1∑mϕ(xl)T)(l=1∑mϕ(xl))
引入核函数k(⋅,⋅):
k(xi,xj)=ϕ(xi)Tϕ(xj)
引入核函数k(⋅,⋅):k(xi,xj)=ϕ(xi)Tϕ(xj)
其对应的核矩阵为:
K=⎣⎢⎢⎢⎢⎡k(x1,x1)k(x2,x1)⋮k(xm,x1)k(x1,x2)k(x2,x2)⋮k(xm,x2)⋯⋯⋱⋯k(x1,xm)k(x2,xm)⋮k(xm,xm)⎦⎥⎥⎥⎥⎤(4)
其对应的核矩阵为:K={k(xi,xj)}i,j∈{1,...,m}∈Rm×m(式(4))
对Ki,j继续化简得到Ki,j=Ki,j−m1l=1∑m(ϕ(xi)Tϕ(xl))−m1l=1∑m(ϕ(xl)Tϕ(xj))+m21l=1∑mp=1∑m(ϕ(xl)Tϕ(xp))=Ki,j−m1l=1∑mKi,l−m1l=1∑mKl,j+m21l=1∑mp=1∑mKl,p
于是有(如果看不懂,可以反向证明其成立):
K=K−KIm−ImK+ImKIm(5)
于是有(如果看不懂,可以反向证明其成立):K=K−KIm−ImK+ImKIm(式(5))
其中I是元素全为1的m×m形矩阵,Im表示m1I。K求出来了,αj也就解出来了,于是vj=i=1∑mψ(xi)αij=ψ(X)αj,其中ψ(X)=[ψ(x1),ψ(x2),...,ψ(xm)],根据之前的PCA算法可知,vj需要进行单位化和正交化(?),然而vj实际是算不出来的,但是可以修改αj的值使满足∥vj∥=1的条件,根据∥vj∥2=vjTvj=(αj)Tψ(X)Tψ(X)αj=(αj)TKαj=λj(αj)Tαj=1,从而得到新的αj值(j∈{1,2,...,d})。现在给定原始空间中的样本xi,可以计算其在KPCA投影空间中的表示VTψ(xi)(先将xi映射到高维空间得到ψ(xi),再从高维希尔伯特空间做PCA降维,即左乘投影矩阵VT),其中V=[v1,v2,...,vd]=ψ(X)[α1,α2,...,αd],有VTψ(xi)=⎣⎢⎢⎡(α1)T⋮(αd)T⎦⎥⎥⎤ψ(X)Tψ(xi)=⎣⎢⎢⎡(α1)T⋮(αd)T⎦⎥⎥⎤⎣⎢⎢⎡ψ(x1)T⋮ψ(xm)T⎦⎥⎥⎤ψ(xi)=⎣⎢⎢⎡(α1)T⋮(αd)T⎦⎥⎥⎤d×m⎣⎢⎢⎡ψ(x1)Tψ(xi)⋮ψ(xm)Tψ(xi)⎦⎥⎥⎤m×1=⎣⎢⎢⎡(α1)T⋮(αd)T⎦⎥⎥⎤K:,i∈Rd
其中I是元素全为1的m×m形矩阵,Im表示m1I。K求出来了,αj也就解出来了,于是vj=i=1∑mψ(xi)αij=ψ(X)αj,其中ψ(X)=[ψ(x1),ψ(x2),...,ψ(xm)],根据之前的PCA算法可知,vj需要进行单位化和正交化(?),然而vj实际是算不出来的,但是可以修改αj的值使满足∥vj∥=1的条件,根据∥vj∥2=vjTvj=(αj)Tψ(X)Tψ(X)αj=(αj)TKαj=λj(αj)Tαj=1,从而得到新的αj值(j∈{1,2,...,d})。现在给定原始空间中的样本xi,可以计算其在KPCA投影空间中的表示VTψ(xi)(先将xi映射到高维空间得到ψ(xi),再从高维希尔伯特空间做PCA降维,即左乘投影矩阵VT),其中V=[v1,v2,...,vd]=ψ(X)[α1,α2,...,αd],有VTψ(xi)=[α1,...,αd]T[ψ(x1),...,ψ(xm)]Tψ(xi)=[α1,...,αd]d×mT(K:,i)m×1∈Rd
注:推荐李振轩老师的视频教程,其从“什么样的投影轴可以最大化投影后的样本方差,以使得投影后的样本分散得最开(显然如果投影到同一个点意味着信息将全部丢失,所以投影后的点离散程度越大越好)”的视角来看待PCA问题,而且推导形式更简单,可以参见我做的笔记[3]