主成分分析(PCA)算法理解

本文深入探讨了主成分分析(PCA)算法的原理及其在数据压缩、降维和可视化中的应用。通过数学推导,解释了PCA如何通过最大化投影方差来实现数据降维,并详细阐述了解码和编码过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

主成分分析(PCA,principle component analysis)算法是一种机器学习中常用的降维算法,这种算法可以用在数据压缩降维,这样可以加快机器学习的速度,PCA还可以用在数据可视化上,因为高维的特征数据是无法观察的,我们可以通过PCA算法将高维的数据降到2维或者3维,这样就可以在坐标系中体现出来。
首先我们来看看PCA降维的原理,假设在Rn{R^n}Rn空间中有m个点{x(1),x(2),...,x(m)}\{ {x^{(1)}},{x^{(2)}},...,{x^{(m)}}\} {x(1),x(2),...,x(m)},我们希望对这些点进行压缩,当然压缩是有损失的,我们目标是将这些损失减到最小。编码这些点的一种方式就是用低维表示,对于每个点x(i)∈Rn{x^{(i)}} \in {R^n}x(i)Rn,会有一个对应的编码向量c(i)∈Rl{c^{(i)}} \in {R^l}c(i)Rll{l}l表示向量的特征数。我们希望找到一个编码函数,根据我们的输入数据返回编码,f(x)=cf(x) = cf(x)=c;当然有编码也有解码,我们也希望找到一个解码函数,这个函数可以重构我们的输入,x=g(f(x))x=g(f(x))x=g(f(x))
PCA由我们选择的解码函数而定,为了简化解码器,我们使用矩阵乘法将编码映射回Rn{R^n}Rn,即g(c)=Dcg(c) = Dcg(c)=Dc,在这个式子中D表示Rn×l{R^{n \times l}}Rn×l的解码矩阵。
首先,我们需要明确如何根据每一个输入xxx得到一个最优编码c∗{c^*}c,一种方法是最小化原始输入向量xxx和重构向量g(c∗)g(c^*)g(c)之间的距离,一般来说,我们使用范数来衡量xxxg(c∗)g(c^*)g(c)之间的距离,PCA算法中,我们使用2范数,这样一来PCA算法就可以转化成求最优解的问题:
c∗=arg⁡min⁡c∥x−g(c)∥2{c^*} = \mathop {\arg \min }\limits_c {\left\| {x - g(c)} \right\|_2}c=cargminxg(c)2然而这个问题可以等价成:
c∗=arg⁡min⁡c∥x−g(c)∥22{c^*} = \mathop {\arg \min }\limits_c \left\| {x - g(c)} \right\|_2^2c=cargminxg(c)22
这个表达式最小化的部分可以表示成:
(x−g(c))T(x−g(c)){(x - g(c))^T}(x - g(c))(xg(c))T(xg(c))
我们将这个数学表达式进行展开:
(x−g(c))T(x−g(c))=xTx−xTg(c)−g(c)Tx+g(c)Tg(c){(x - g(c))^T}(x - g(c)) = {x^T}x - {x^T}g(c) - g{(c)^T}x + g{(c)^T}g(c)(xg(c))T(xg(c))=xTxxTg(c)g(c)Tx+g(c)Tg(c)
因为g(c)xT=(g(c)Tx)T=xTg(c)g(c){x^T} = {(g{(c)^T}x)^T} = {x^T}g(c)g(c)xT=(g(c)Tx)T=xTg(c),所以上述公式可以写成:
xTx−2xTg(c)+g(c)Tg(c){x^T}x - 2{x^T}g(c) + g{(c)^T}g(c)xTx2xTg(c)+g(c)Tg(c)因为xTx{x^T}xxTxccc是不相关的,所以我们可以重新调整我们的优化目标函数:
c∗ = arg⁡min⁡c[−2xTg(c)+g(c)Tg(c)]{c^*}{\text{ = }}\mathop {\arg \min }\limits_c [ - 2{x^T}g(c) + g{(c)^T}g(c)]c = cargmin[2xTg(c)+g(c)Tg(c)]
因为之前定义过g(c)=Dcg(c) = Dcg(c)=Dc,我们将g(c)g(c)g(c)带入目标函数中可以得到:
c∗=arg⁡min⁡c[−2xTDc+cTDTDc]{c^*} = \mathop {\arg \min }\limits_c [ - 2{x^T}Dc + {c^T}{D^T}Dc]c=cargmin[2xTDc+cTDTDc]
为了简化我们的PCA算法,我们假设D是正交矩阵,那么我们就可以将目标函数简化:
c∗=arg⁡min⁡c[−2xTDc+cTIlc]=arg⁡min⁡c[−2xTDc+cTc]{c^*} = \mathop {\arg \min }\limits_c [ - 2{x^T}Dc + {c^T}{I_l}c]=\mathop {\arg \min }\limits_c [ - 2{x^T}Dc + {c^T}c]c=cargmin[2xTDc+cTIlc]=cargmin[2xTDc+cTc],简化了目标函数之后,我们可以将目标函数对ccc求偏导:
∂[−2xTDc+cTc]∂c=∂[−2cTDTx+cTc]∂c=−2DTx+2c=0\frac{{\partial [ - 2{x^T}Dc + {c^T}c]}}{{\partial c}} = \frac{{\partial [ - 2{c^T}{D^T}x + {c^T}c]}}{{\partial c}} = - 2{D^T}x + 2c = 0c[2xTDc+cTc]=c[2cTDTx+cTc]=2DTx+2c=0
由上述表达式我们可以得到c=DTxc = {D^T}xc=DTx,那么就有编码函数c=f(x)=DTxc=f(x)={D^T}xc=f(x)=DTx。为了便于理解,我们可以将2D降维到1D为例,当二位向量向一维向量映射的时候,映射后的数据分布更分散,我们就会认为数据降维的效果就越好,数据的方差就越大,所以我们PCA降维的目标就是最大化投影方差。因为维度是1,所以我们D可以简化成d,因此x(i){x^{(i)}}x(i)在d上的投影坐标可以表示成两个向量的内积(x(i),d)=[x(i)]Td({x^{(i)}},d) = {[{x^{(i)}}]^T}d(x(i),d)=[x(i)]Td,我们目标要找到这个投影方向d,使得我们的数据x(1),x(2),...,x(n){x^{(1)}},{x^{(2)}},...,{x^{(n)}}x(1),x(2),...,x(n)在d上的投影方差最大,点更加分散。投影之后的方差可以表示成:D(x)=1n∑i=1n(x(i)Td)2=1n∑i=1n(x(i)Td)T(x(i)Td)D(x) = \frac{1}{n}\sum\limits_{i = 1}^n {{{({x^{(i)}}^Td)}^2} = } \frac{1}{n}\sum\limits_{i = 1}^n {{{({x^{(i)}}^Td)}^T}} ({x^{(i)}}^Td)D(x)=n1i=1n(x(i)Td)2=n1i=1n(x(i)Td)T(x(i)Td)
我们将式子展开可以得到:D(x)=1n∑i=1ndTx(i)x(i)Td=dT(∑i=1nx(i)x(i)T)dD(x) = \frac{1}{n}\sum\limits_{i = 1}^n {{d^T}{x^{(i)}}{x^{(i)}}^Td} = {d^T}(\sum\limits_{i = 1}^n {{x^{(i)}}{x^{(i)}}^T} )dD(x)=n1i=1ndTx(i)x(i)Td=dT(i=1nx(i)x(i)T)d
所以要求解ddd,我们可以将上述式子表示成arg⁡max⁡d=dT(∑i=1nx(i)x(i)T)d\mathop {\arg \max }\limits_d = {d^T}(\sum\limits_{i = 1}^n {{x^{(i)}}{x^{(i)}}^T} )ddargmax=dT(i=1nx(i)x(i)T)ds.t.dTd=1s.t. {d^T}d = 1s.t.dTd=1。这里我们可以引入拉格朗日乘子,可以得到:
F(d,x,λ)=dT(∑i=1nx(i)x(i)T)d+λ(1−dTd)F(d,x,\lambda ) = {d^T}(\sum\limits_{i = 1}^n {{x^{(i)}}{x^{(i)}}^T} )d + \lambda (1 - {d^T}d)F(d,x,λ)=dT(i=1nx(i)x(i)T)d+λ(1dTd)我们再将F(d,x,λ)F(d,x,\lambda )F(d,x,λ)ddd求偏导,再令其等于0,可以得到(∑i=1nx(i)x(i)T)d=λd(\sum\limits_{i = 1}^n {{x^{(i)}}{x^{(i)}}^T} )d = \lambda d(i=1nx(i)x(i)T)d=λd,将这个式子带入拉格朗日函数中可以得到:
D(x)=dT(∑i=1nx(i)x(i)T)d=λdTd=λD(x) = {d^T}(\sum\limits_{i = 1}^n {{x^{(i)}}{x^{(i)}}^T} )d = \lambda {d^T}d = \lambda D(x)=dT(i=1nx(i)x(i)T)d=λdTd=λ,最终可以很明显地看出xxx投影之后的方差就是协方差矩阵的特征值,我们要找到最大的方差也就是协方差矩阵的最大特征值,最佳投影方向就是最大特征值所对应的特征向量。
以上就是对PCA降维算法的理解,希望对大家在数据降维方面的理解上有所帮助,文中如有纰漏,也请大家不吝指教,谢谢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值