PCA

pic2.zhimg.com/v2-a307713b57b2e099fc3aaca9d77e5...

主成分分析(PCA,Principle Component Analysis)就是在寻找使方差最大的方向,并在该方向上投影。(通常方差越大被视为越重要,方差也常常被称为能量)

Y=A(XX)Y=A\left( X-\overline{X} \right)

YY是PCA的输出,aa是投影的方向矩阵,XX是PCA的输入,X\overline{X}XX的期望(通常也可以用均值代替X=1Pi=1PXi\overline{X}=\frac{1}{P}\sum_{i=1}^P{X_i})。

其中:YYM×1M\times1矩阵,aaM×NM\times N矩阵,XXX\overline{X}N×1N \times1矩阵。可以看出,PCA把NN维的数据XX投影到了以aia_i为基向量的空间中得到MM维的YY,完成降维。(M<NM<N

A=[a1a2aM]A=\left[ \begin{array}{c} a_1\\ a_2\\ \vdots\\ a_M\\ \end{array} \right]

PCA的推导

假设训练样本有{Xi}i=1P\left\{ X_i \right\} _{i=1\sim P},则YiY_i可以写成:

Yi=[yi1yi2yiM]=[a1(XiX)a2(XiX)aM(XiX)](i=1P)\begin{aligned} Y_i=\left[ \begin{array}{c} y_{i1}\\ y_{i2}\\ \vdots\\ y_{iM}\\ \end{array} \right] =\left[ \begin{array}{c} a_1\left( X_i-\overline{X} \right)\\ a_2\left( X_i-\overline{X} \right)\\ \vdots\\ a_M\left( X_i-\overline{X} \right)\\ \end{array} \right] \,\, \quad\quad \left( i=1\sim P \right) \end{aligned}

由主成分的含义,yi1y_{i1}有最大的方差,因此我们需要最大化 var(y1)=i=1P(yi1yi1)2var(y_{1})=\sum_{i=1}^P{\left( y_{i1}-\overline{y_{i1}} \right)^2}

又因为:

yi1=1Pi=1Pyi1=1Pi=1Pai(XiX)=aiP(i=1PXiPX)=0\overline{y_{i1}}=\frac{1}{P}\sum_{i=1}^P{y_{i1}}=\frac{1}{P}\sum_{i=1}^P{a_i\left( X_i-\overline{X} \right)}=\frac{a_i}{P}\left( \sum_{i=1}^P{X_i}-P\overline{X} \right) =0

所以有:

var(y1)=i=1P(yi1yi1)2=i=1Pyi12=i=1P[a1(XiX)]2=i=1P[a1(XiX)][a1(XiX)]T=a1i=1P[(XiX)(XiX)T]a1T=a1Σa1T\begin{aligned} var(y_{1})&=\sum_{i=1}^P{\left( y_{i1}-\overline{y_{i1}} \right) ^2}=\sum_{i=1}^P{y_{i1}^2}=\sum_{i=1}^P{\left[ a_1\left( X_i-\overline{X} \right) \right] ^2} \\ &=\sum_{i=1}^P{\left[ a_1\left( X_i-\overline{X} \right) \right] \left[ a_1\left( X_i-\overline{X} \right) \right] ^T} \\ &=a_1\sum_{i=1}^P{\left[ \left( X_i-\overline{X} \right) \left( X_i-\overline{X} \right) ^T \right]}a_1^T \\ &=a_1\varSigma a_1^T \end{aligned}

其中Σ=i=1P(XiX)(XiX)T\varSigma =\sum_{i=1}^P{ \left( X_i-\overline{X} \right) \left( X_i-\overline{X} \right) ^T }称为XX的协方差矩阵。在上式中,我们不希望y1y_{1}的大小和a1a_1有关,因为a1a_1只是一个基向量,控制投影的方向,我们希望a1a_1是一个单位向量。因此,上述求最大值变成以下优化问题:

max:a1Σa1Ts.t.a1a1T=a12=1\begin{aligned} &\max:\quad a_1\varSigma a_1^T \\ &s.t. \quad a_1a_1^T=\lVert a_1 \rVert ^2 =1 \end{aligned}

解上面优化问题可以使用拉格朗日乘数法:

E(a1)=a1Σa1Tλ1(a1a1T1)E(a1)a1=2(Σa1Tλ1a1T)T=0\begin{aligned} &E\left( a_1 \right) =a_1\varSigma a_1^T-\lambda_1 \left( a_1a_1^T-1 \right) \\ &\frac{\partial E\left( a_1 \right)}{\partial a_1}=2\left( \varSigma a_1^T-\lambda_1 a_1^T \right) ^T=0 \end{aligned}

得到:Σa1T=λ1a1T\varSigma a_1^T=\lambda_1 a_1^T(即a1Ta_1^TΣ\Sigma的特征向量,λ1\lambda_1是对应的特征值)

目标函数变为:

var(y1)=a1Σa1T=λ1a1a1T=λ1var(y_1)=a_1\varSigma a_1^T=\lambda_1 a_1a_1^T=\lambda_1

则当a1a_1Σ\Sigma最大的特征值λ1\lambda_{1}对应的特征向量时,a1a_1是此优化问题的解。

我们称y1=a1(XX)y_1=a_1\left( X-\overline{X} \right)XX的第一主成分,a1a_1Σ\Sigma最大的特征值λ1\lambda_{1}对应的特征向量

我们接着求a2a_2,我们希望求出的主成分之间是不相关的,即:

cov(y1,y2)=iP(yi1yi1)(yi2yi2)=iPyi1yi2=iP[a1(XiXˉ)][a2(XiXˉ)]T=a1Σa2T=0\begin{aligned} cov\left( y_1,y_2 \right) &=\sum_i^P{\left( y_{i1}-\overline{y_{i1}} \right) \left( y_{i2}-\overline{y_{i2}} \right)}=\sum_i^P{y_{i1}y_{i2}} \\ &=\sum_i^P{\left[ a_1\left( X_i-\bar{X} \right) \right] \left[ a_2\left( X_i-\bar{X} \right) \right] ^T} \\ &=a_1\varSigma a_2^T=0 \end{aligned}

同理,由cov(y2,y1)=0cov\left( y_2,y_1 \right)=0推出a2Σa1T=0a_2\varSigma a_1^T=0,且由上面的推导可知,a2Σa1T=λ1a2a1T=0a_2\varSigma a_1^T=\lambda _1a_2a_1^T=0推出a2a1T=0a_2a_1^T=0,即a1a_1a2a_2正交。

求解a2a_2变成了下列优化问题:

max:a2Σa2Ts.t.a2a2T=a22=1,a1a2T=a2a1T=0\begin{aligned} &\max :\quad a_2\varSigma a_{2}^{T} \\ &s.t.\quad a_2a_{2}^{T}=\lVert a_2 \rVert ^2=1,a_1a_{2}^{T}=a_2a_{1}^{T}=0 \end{aligned}

解上面优化问题可以使用拉格朗日乘数法:

E(a2)=a2Σa2Tλ2(a2a2T1)βa1a2TE(a2)a2=(2Σa2T2λ2a2Tβa1T)T=0\begin{aligned} &E\left( a_2 \right) =a_2\varSigma a_{2}^{T}-\lambda _2\left( a_2a_{2}^{T}-1 \right) -\beta a_1a_{2}^{T} \\ &\frac{\partial E\left( a_2 \right)}{\partial a_2}=\left( 2\varSigma a_{2}^{T}-2\lambda_2 a_{2}^{T}-\beta a_{1}^{T} \right) ^T=0 \end{aligned}

得到:

(2Σa2T2λ2a2Tβa1T)T=2a2ΣT2λ2a2βa1=2a2Σ2λ2a2βa1=0(2a2Σ2λ2a2βa1)a1T=2a2Σa1T2λ2a2a1Tβa1a1T=β=0\begin{aligned} \left( 2\varSigma a_{2}^{T}-2\lambda _2a_{2}^{T}-\beta a_{1}^{T} \right) ^T&=2a_2\varSigma ^T-2\lambda _2a_2-\beta a_1=2a_2\varSigma -2\lambda _2a_2-\beta a_1=0 \\ \left(2 a_2\varSigma -2\lambda _2a_2-\beta a_1 \right) a_{1}^{T}&=2a_2\varSigma a_{1}^{T}-2\lambda _2a_2a_{1}^{T}-\beta a_1a_{1}^{T}=-\beta =0 \end{aligned}

β=0\beta=0带入E(a2)a2\frac{\partial E\left( a_2 \right)}{\partial a_2}得到:

Σa2Tλ2a2T=0\varSigma a_{2}^{T}-\lambda _2a_{2}^{T}=0

a2Ta_2^TΣ\Sigma的特征向量,λ2\lambda_2是对应的特征值

目标函数变为:

var(y2)=a2Σa2T=λ2a2a2T=λ2var(y_2)=a_2\varSigma a_2^T=\lambda_2 a_2a_2^T=\lambda_2

则当a2a_2Σ\Sigma第二大的特征值λ2\lambda_2对应的特征向量时,a2a_2是此优化问题的解。

Σ\Sigma最大的特征值λ1\lambda_1已经分配给var(y1)var(y_1)

我们称y2=a2(XX)y_2=a_2\left( X-\overline{X} \right)XX的第二主成分,a2a_2Σ\Sigma最大的特征值λ2\lambda_{2}对应的特征向量

按照上述方法可以求得第一、第二、直到第MM主成分yiy_i,其系数向量a1T,a2T,,aMTa_1^T,a_2^T,\cdots ,a_M^T分别是Σ\Sigma的第一个、第二个、直到第MM个单位特征向量,λ1,λ2,,λM\lambda_1,\lambda_2,\cdots,\lambda_M分别是对应的特征值,其值依次递减。并且,第kk主成分的方差等于Σ\Sigma的第kk个特征值。

PCA算法总结

PCA算法:

  1. Σ=i=1P(XiX)(XiX)T\varSigma =\sum_{i=1}^P{ \left( X_i-\overline{X} \right) \left( X_i-\overline{X} \right) ^T }

  2. Σ\varSigma的特征值并按从大到小排序[λ1,λ2,,λM]\left[ \lambda _1,\lambda _2,\cdots ,\lambda _M \right],对应特征值[a1T,a2T,,aMT]\left[ a_1^T,a_2^T,\cdots ,a_M^T \right]

  3. 归一化所有aiTa_i^T,使aiT=1\lVert a_{i}^{T} \rVert =1

  4. A=[a1a2aM]A=\left[ \begin{array}{c} a_1\\ a_2\\ \vdots\\ a_M\\ \end{array} \right]

  5. Y=A(XX)Y=A\left( X-\overline{X} \right)

SVD(Singular Value Decomposition)算法可以快速求得特征值