主成分分析(Principle Component Analysis)

本文深入解析主成分分析(PCA)算法,介绍PCA的数学原理、推导过程及应用,包括特征提取、数据降维和主成分选择等内容。

主成分分析(Principle Component Analysis, PCA)是一种特征提取的方法,设{Xi},i=1∼p\{X_i\},i=1\sim p{Xi}i=1p 是一组样本的输入,其中Xi=(xi1,xi2,⋯ ,xin)T\displaystyle X_i=(x_{i1},x_{i2},\cdots,x_{in})^TXi=(xi1,xi2,,xin)T,PCA的目的是构造一个线性变换 Y=AX+bY=AX+bY=AX+bnnn 维特征 XXX 转成 mmm 维特征 YYY,实现数据的降维(n>mn \gt mn>m),每个量的维度为:

parametershape
YYY(m,1)(m,1)(m,1)
AAA(m,n)(m,n)(m,n)
XXX(n,1)(n,1)(n,1)
bbb(m,1)(m,1)(m,1)

PCA可以看成是只一层的有mmm个神经元的神经网络:

自编码器(Auto-encoder)的思想也是对标PCA的:

直观来说,PCA的目标是寻找方差最大方向,并在该方向投影,例如取n=2,m=1n=2, m=1n=2,m=1,则每个数据有2个维度的特征 x=(x1,x2)Tx = (x_1,x_2)^Tx=(x1,x2)T,将其投影到一个维度上,使数据在该维度上方差最大,这个方向就是 y=y1y = y_1y=y1 如下图所示:


下面对PCA进行推导

设数据集为{Xi},i=1∼p\{X_i\},i=1\sim p{Xi},i=1p,我们采用如下线性变换来进行PCA:{Y=A(X−X‾)X‾=E(X)=1p∑i=1pXi\begin{aligned}\begin{cases}Y=A(X-\overline{X}) \\ \\ \overline{X}=E(X)=\displaystyle\frac{1}{p}\sum_{i=1}^{p}X_i \end{cases}\end{aligned}Y=A(XX)X=E(X)=p1i=1pXi为了方便计算,设A=(a1a2⋮am)A=\begin{pmatrix}a_{1}\\a_{2}\\ \vdots\\a_{m}\end{pmatrix}A=a1a2am,其中ai=(ai1,ai2,⋯ ,ain),i=1∼m\displaystyle a_i=(a_{i1},a_{i2},\cdots,a_{in}),i=1\sim mai=(ai1,ai2,,ain)i=1m,代入线性变换可得:Yi=(a1(Xi−X‾)a2(Xi−X‾)⋮am(Xi−X‾))=(yi1yi2⋮yim),i=1∼p(yij是1×1的矩阵也就是数)Y_i=\begin{pmatrix}a_{1}(X_i-\overline{X})\\a_{2}(X_i-\overline{X})\\ \vdots\\a_{m}(X_i-\overline{X})\end{pmatrix}=\begin{pmatrix}y_{i1}\\y_{i2}\\ \vdots\\y_{im}\end{pmatrix},\quad i=1\sim p\quad(y_{ij}是1\times1的矩阵也就是数)Yi=a1(XiX)a2(XiX)am(XiX)=yi1yi2yim,i=1p(yij1×1)我们已经说过,PCA是为了找到数据方差最大的mmm个方向进行投影,所以我们的目标函数就是最大化 YiY_iYi 每个维度上数据的方差,即最大化数据序列{yij}\{y_{ij}\}{yij}的方差,其中i=1∼p,j=1∼mi=1\sim p,j=1\sim mi=1p,j=1m,以{yi1}\{y_{i1}\}{yi1}为例,最大化的目标函数是:
∑i=1p(yi1−yi1‾)2=∑i=1pyi12=∑i=1p[a1(Xi−X‾)]2=∑i=1pa1(Xi−X‾)(Xi−X‾)Ta1T=a1[∑i=1p(Xi−X‾)(Xi−X‾)T]a1T=ai∑a1T\begin{aligned} &\sum_{i=1}^{p}(y_{i1}-\displaystyle\overline{y_{i1}})^2\\ =&\displaystyle\sum_{i=1}^{p}y_{i1}^2 \\ =&\sum_{i=1}^{p}[a_1(X_i-\overline{X})]^2 \\ =&\displaystyle\sum_{i=1}^{p}a_1(X_i-\overline{X}) (X_i-\overline{X})^Ta_1^T\\ =&\displaystyle a_1[\sum_{i=1}^{p}(X_i-\overline{X}) (X_i-\overline{X})^T]a_1^T\\ =&a_i\sum a_1^T \end{aligned}=====i=1p(yi1yi1)2i=1pyi12i=1p[a1(XiX)]2i=1pa1(XiX)(XiX)Ta1Ta1[i=1p(XiX)(XiX)T]a1Taia1T其中∑=∑i=1p(Xi−X‾)(Xi−X‾)T\displaystyle\sum=\displaystyle\sum_{i=1}^{p}(X_i-\overline{X}) (X_i-\overline{X})^T=i=1p(XiX)(XiX)T称为协方差矩阵(covariance matrix),显然∑=∑T\displaystyle\sum=\displaystyle{\sum}^T=T是对称矩阵,其维度为 n×nn \times nn×n

为什么 yi1‾=0\displaystyle\overline{y_{i1}}=0yi1=0
yi1‾=1p∑i=1pyi1=1p∑i=1pa1(Xi−X‾)=a1p∑i=1p(Xi−X‾)=a1p(∑i=1pXi−∑i=1pX‾)=a1p(∑i=1pXi−pX‾)=a1p×O=0\begin{aligned}\displaystyle\overline{y_{i1}}=& \displaystyle \frac{1}{p}\sum_{i=1}^p y_{i1}= \frac{1}{p}\sum_{i=1}^p a_{1}(X_i-\overline{X}) \\ = &\displaystyle\frac{a_1}{p}\displaystyle\sum_{i=1}^p (X_i-\overline{X})=\frac{a_1}{p}(\sum_{i=1}^p X_i-\sum_{i=1}^p\overline{X}) \\ =& \frac{a_1}{p}(\sum_{i=1}^p X_i-p\overline{X})=\frac{a_1}{p} \times \bold{O} \\ = & 0\end{aligned}yi1====p1i=1pyi1=p1i=1pa1(XiX)pa1i=1p(XiX)=pa1(i=1pXii=1pX)pa1(i=1pXipX)=pa1×O0这里要记得 X‾=1p∑i=1pXi\displaystyle \overline{X}=\frac{1}{p}\sum_{i=1}^pX_iX=p1i=1pXi

此时还有个问题,a1a_1a1 虽然确定了方向,但是 a1a_1a1 的模的大小未定,如果 ∣∣a1∣∣||a_1||a1 越大,则投影越大,所以要对 ∣∣a1∣∣||a_1||a1 进行限制,至此,我们的问题就变成了这样:
max⁡a1∑a1Ts.t.a1a1T=∣∣a1∣∣2=1\begin{aligned} &\max \quad a_1 \sum a_1^T \\ &s.t.\quad \quad a_1a_1^T=||a_1||^2=1 \end{aligned}maxa1a1Ts.t.a1a1T=a12=1我们可以用拉格朗日乘数法求解:
目标函数为L(a1,α)=a1∑a1T−α(a1a1T−1)∂L∂a1=2a1∑−2αa1=0  ⟹  ∑Ta1T=∑a1T=αa1T所以α是∑的特征值,对应特征向量为a1T  ⟹  a1∑a1T=a1αa1T=α由于要最大化方差,所以α应该是∑的最大的特征值,记为λ1,则a1T就是对应于λ1的单位特征向量\begin{aligned} 目标函数为\quad&\displaystyle L(a_1, \alpha) = a_1 \sum a_1^T-\alpha(a_1 a_1^T-1) \\\\ &\frac{\partial L}{\partial a_1}=2a_1\sum-2\alpha a_1=0\implies {\sum}^Ta_1^T={\sum}a_1^T=\alpha a_1^T \\ \\所以\quad& \alpha是\sum的特征值,对应特征向量为a_1^T\\ \\ \implies&a_1\sum a_1^T = a_1\alpha a_1^T=\alpha \\ \\由于要&最大化方差,所以\alpha应该是\sum的最大的特征值,记为\lambda_1 , 则a_1^T就是对应于\lambda_1的单位特征向量\end{aligned}L(a1,α)=a1a1Tα(a1a1T1)a1L=2a12αa1=0Ta1T=a1T=αa1Tαa1Ta1a1T=a1αa1T=ααλ1a1Tλ1

拉格朗日乘数法计算过程
a1=(a11,a12,⋯ ,a1n)a_1=(a_{11},a_{12},\cdots,a_{1n})a1=(a11,a12,,a1n), a1T=(a11a12⋮a1n)a_1^T=\begin{pmatrix}a_{11}\\ a_{12} \\ \vdots \\ a_{1n}\end{pmatrix}a1T=a11a12a1n∑=(σ11σ12⋯σ1nσ21σ22⋯σ2n⋮⋮⋮σn1σn2⋯σnn)\displaystyle\sum=\begin{pmatrix} \sigma_{11}&\sigma_{12}&\cdots&\sigma_{1n}\\\sigma_{21}&\sigma_{22}&\cdots&\sigma_{2n}\\\vdots&\vdots&&\vdots\\\sigma_{n1}&\sigma_{n2}&\cdots&\sigma_{nn}\end{pmatrix}=σ11σ21σn1σ12σ22σn2σ1nσ2nσnn,则:
{a1∑=(∑i=1na1iσi1,∑i=1na2iσi2,⋯ ,∑i=1naniσin)a1∑a1T=a11∑i=1na1iσi1+a12∑i=1na2iσi2+⋯+a1n∑i=1naniσin  ⟹  ∂(a1∑a1T)∂a1k=∑i=1na1iσki+∑i=1na1iσik,又∑=∑T  ⟹  σij=σji  ⟹  ∂(a1∑a1T)∂a1k=2∑i=1na1iσik=2a1(σ1kσ2k⋮σnk)(k=1∼n)  ⟹  ∂(a1∑a1T)∂a1=(∂(a1∑a1T)∂a11,∂(a1∑a1T)∂a12,⋯ ,∂(a1∑a1T)∂a1n)=2a1∑a1a1T=∑i=1na1i2  ⟹  ∂a1a1T∂a1k=2a1k(k=1∼n)  ⟹  ∂a1a1T∂a1=2a1\begin{aligned}&\begin{cases}a_1 \displaystyle\sum =(\displaystyle\sum_{i=1}^{n}a_{1i}\sigma_{i1},\displaystyle\sum_{i=1}^{n}a_{2i}\sigma_{i2},\cdots,\displaystyle\sum_{i=1}^{n}a_{ni}\sigma_{in})\\ a_1\displaystyle\sum a_1^T=a_{11}\displaystyle\sum_{i=1}^{n}a_{1i}\sigma_{i1}+a_{12}\sum_{i=1}^{n}a_{2i}\sigma_{i2}+\cdots+a_{1n}\sum_{i=1}^{n}a_{ni}\sigma_{in}\end{cases}\\ \implies& \displaystyle \frac{\partial (a_1\displaystyle \sum a_1^T)}{\partial a_{1k}}=\sum_{i=1}^{n}a_{1i}\sigma_{ki}+\sum_{i=1}^{n}a_{1i}\sigma_{ik},又\sum={\sum}^T\implies\sigma_{ij}=\sigma{ji}\\ \implies& \frac{\partial (a_1\displaystyle \sum a_1^T)}{\partial a_{1k}}=2\sum_{i=1}^{n}a_{1i}\sigma_{ik}=2a_1\begin{pmatrix}\sigma_{1k}\\ \sigma_{2k}\\ \vdots \\ \sigma_{nk}\end{pmatrix}\quad(k=1 \sim n)\\ \implies & \frac{\partial (a_1\displaystyle \sum a_1^T)}{\partial a_{1}} =\bigg(\frac{\partial (a_1\displaystyle \sum a_1^T)}{\partial a_{11}},\frac{\partial (a_1\displaystyle \sum a_1^T)}{\partial a_{12}},\cdots,\frac{\partial (a_1\displaystyle \sum a_1^T)}{\partial a_{1n}}\bigg)=2a_1\sum \\ \\ &a_1 a_1^T=\sum_{i=1}^{n}a_{1i}^2\\ \implies & \frac{\partial a_1 a_1^T}{\partial a_{1k}}= 2a_{1k}\quad(k=1\sim n) \\ \implies & \frac{\partial a_1 a_1^T}{\partial a_{1}}=2a_1\end{aligned}a1=(i=1na1iσi1,i=1na2iσi2,,i=1naniσin)a1a1T=a11i=1na1iσi1+a12i=1na2iσi2++a1ni=1naniσina1k(a1a1T)=i=1na1iσki+i=1na1iσik=Tσij=σjia1k(a1a1T)=2i=1na1iσik=2a1σ1kσ2kσnk(k=1n)a1(a1a1T)=(a11(a1a1T),a12(a1a1T),,a1n(a1a1T))=2a1a1a1T=i=1na1i2a1ka1a1T=2a1k(k=1n)a1a1a1T=2a1

下面再来看看如何寻找第二个维度的最大方差,此时要把{yi1}\{y_{i1}\}{yi1}换成{yi2}\{y_{i2}\}{yi2},和上面推导类似,就简化写了:

这里注意,限制条件多了一个正交条件,因为已经确定了最大方差的一个方向,现在要找一个除了它以外最大方差的方向,故要保证正交,找第三、第四等方向类似,都要与已经找到的方向正交.

max∑i=1p(yi2−yi2‾)2=a2∑a2Ts.t.a2a2T=∣∣a2∣∣2=1a1a2T=a2a1T=0目标函数L(a2,α,β)=a2∑a2T−α(a2a2T−1)−βa1a2T∂L∂a2=2a2∑−2αa2−βa1=0  ⟹  2a2∑a1T−2αa2a1T−βa1a1T=0  ⟹  2a2λ1a1T−β=0  ⟹  β=0  ⟹  ∂L∂a2=2a2∑−2αa2=0  ⟹  ∑a2T=αa2T所以α应该是∑的除λ1以外最大的特征值,记为λ2,则a2T就是对应于λ2的单位特征向量\begin{aligned} max\quad&\sum_{i=1}^{p}(y_{i2}-\displaystyle\overline{y_{i2}})^2=a_2 \sum a_2^T \\\\ s.t. \quad\displaystyle&a_2 a_2^T=||a_2||^2=1 \\ \\\displaystyle&a_1a_2^T=a_2a_1^T=0 \\ \\目标函数\quad&L(a_2,\alpha,\beta)=a_2\sum a_2^T-\alpha(a_2a_2^T-1)-\beta a_1 a_2^T \\\\ &\frac{\partial L}{\partial a_2}=2a_2\sum-2\alpha a_2-\beta a_1=0 \\ \\ \implies&2a_2\sum a_1^T-2\alpha a_2 a_1^T-\beta a_1 a_1^T=0 \\\\ \implies &2a_2\lambda_1a_1^T-\beta=0\\\\ \implies&\beta=0 \\\\ \implies&\frac{\partial L}{\partial a_2}=2a_2\sum-2\alpha a_2=0\\\\ \implies&\sum a_2^T=\alpha a_2^T \\ \\ 所以\alpha应该&是\sum的除\lambda_1以外最大的特征值,记为\lambda_2 ,则a_2^T就是对应于\lambda_2的单位特征向量 \end{aligned}maxs.t.αi=1p(yi2yi2)2=a2a2Ta2a2T=a22=1a1a2T=a2a1T=0L(a2,α,β)=a2a2Tα(a2a2T1)βa1a2Ta2L=2a22αa2βa1=02a2a1T2αa2a1Tβa1a1T=02a2λ1a1Tβ=0β=0a2L=2a22αa2=0a2T=αa2Tλ1λ2a2Tλ2


PCA算法

  1. ∑=∑i=1p(Xi−X‾)(Xi−X‾)T\displaystyle\sum=\displaystyle\sum_{i=1}^{p}(X_i-\overline{X}) (X_i-\overline{X})^T=i=1p(XiX)(XiX)T
  2. ∑\displaystyle\sum的特征值 λi\lambda_iλi 及其对应的单位特征向量 aiTa_i^TaiT ,其中λi−1≥λi\lambda_{i-1}\ge\lambda_iλi1λi
  3. 写出矩阵 A=(a1a2⋮am)A=\begin{pmatrix}a_{1}\\a_{2}\\ \vdots\\a_{m}\end{pmatrix}A=a1a2am
  4. 降维:Yi=A(Xi−X‾),i=1∼pY_i=A(X_i-\overline{X}),\quad i=1\sim pYi=A(XiX),i=1p

【注】
        实际使用中,由于XXX的每个维度数据的量纲可能不同,直接拿来用PCA可能会导致结果错误,故最好先Normalization,使均值为 000,方差为 111

如何选择 kkk 个主成分

kkk 个主成分 yky_kyk 的方差贡献率定义为 yky_kyk 的方差与所有方差之和的比,记作 ηk\eta_kηkηk=λk∑i=1mλi\eta_k=\displaystyle\frac{\lambda_k}{\displaystyle\sum_{i=1}^{m}\lambda_i}ηk=i=1mλiλkkkk个主成分y1,y2,⋯ ,yky_1,y_2,\cdots,y_ky1,y2,,yk的累计方差贡献率定义为 kkk 个方差之和与所有方差之和的比:∑i=1kηi=∑i=1kλi∑i=1mλi\sum_{i=1}^{k}\eta_i=\frac{\displaystyle\sum_{i=1}^{k}\lambda_i}{\displaystyle\sum_{i=1}^{m}\lambda_i}i=1kηi=i=1mλii=1kλi
通常取 kkk 使得累计方差贡献率达到规定的百分比以上,例如达到 90%90\%90% 以上。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值