机器学习笔记之主成分分析(PCA)

本文深入讲解了主成分分析(PCA)的基本原理与实现过程。通过数学推导,详细介绍了如何利用PCA进行数据压缩及特征提取,并给出了求解最优编码向量的具体步骤。

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

机器学习笔记之主成分分析(PCA)

主成分分析(principle components analysis ,PCA)是比较基础的机器学习算法,主要是通过保留数据的特征来进行编码与解码。
  假设在Rn\R^nRn空间中有mmm个点{x(1),x(2),⋯ ,x(m)}\{x^{(1)},x^{(2)},\cdots,x^{(m)}\}{x(1),x(2),,x(m)},我们希望对这些点进行压缩。压缩的目的是我们可以使用更少的内存来储存这些数据,但是同时又希望压缩损失的信息(精度)尽可能少。
  编码这些点的一种方式就是使用低维表示。对于每个x(i)∈Rnx^{(i)}\in\R^nx(i)Rn,会有一个对应的编码向量c(i)∈Rlc^{(i)}\in\R^lc(i)Rl。如果lllnnn小,那么我们就可以使用更少的内存来储存数据。我们希望找到一个编码函数,根据输入返回编码,f(x)=cf(x)=cf(x)=c,同时我们也希望找到一个解码函数,给定编码能够重构输入,x≈(f(x))x\approx(f(x))x(f(x))
  具体来说,我们可以使用一个矩阵乘法将编码器映射回Rn\R^nRn,即g(c)=Dcg(c)=Dcg(c)=Dc,其中D∈Rn×lD\in\R^{n\times l}DRn×l是定义解码的矩阵。但是这存在一个小问题,有可能存在多个解。因为如果我们按比例地缩小所有点对应的编码向量c(i)c^{(i)}c(i),那么只需要按比例放大D:iD_{:i}D:i,即可以保持结果不变。为了使问题有唯一解,我们限制DDD中所有列向量都有单位范数。为了简化问题,PCA 限制 DDD的列向量彼此正交。
  那么我们如何选择一个根据每一个输入x\boldsymbol xx得到最优编码c∗\boldsymbol c^*c?一种最常见的方法就是最小化原始输入向量x\boldsymbol xx和重构向量g(c∗)g(\boldsymbol c^*)g(c)之间的距离,使用范数来衡量它们之间的距离。常用L2L^2L2范数,即c∗=arg⁡min⁡c∥x−g(c∗)∥2\boldsymbol c^*=\arg \min\limits_c\|\boldsymbol x-g(\boldsymbol c^*)\|_2c=argcminxg(c)2我们可以使用平方L2L^2L2范数替代L2L^2L2范数。因为二者在相同的值c上取得最小值。
c∗=arg⁡min⁡c∥x−g(c∗)∥22=arg⁡min⁡c(x−g(c∗)T(x−g(c∗))=arg⁡min⁡cxTx−xTg(c)−g(c)Tx⎵标量+g(c)Tg(c)=arg⁡min⁡cxTx⎵与c无关−2xTg(c)+g(c)Tg(c)⇒arg⁡min⁡c−2xTg(c)+g(c)Tg(c)=arg⁡min⁡c−2xTDc+cTDTDc=arg⁡min⁡c−2xTDc+cTIlc=−2xTDc+cTc\begin{aligned}\boldsymbol c^*&=\arg\min\limits_c\|\boldsymbol x-g(\boldsymbol c^*)\|_2^2=\arg\min\limits_c(\boldsymbol x-g(\boldsymbol c^*)^T(\boldsymbol x-g(\boldsymbol c^*))\\&=\arg\min\limits_c \boldsymbol x^T\boldsymbol x-\boldsymbol x^Tg(\boldsymbol c)-\underbrace{g(\boldsymbol c)^T\boldsymbol x}_{\text{标量}}+g(\boldsymbol c)^Tg(\boldsymbol c)\\&=\arg\min\limits_c\underbrace{\boldsymbol x^T\boldsymbol x}_{\text{与c无关}}-2\boldsymbol x^Tg(\boldsymbol c)+g(\boldsymbol c)^Tg(\boldsymbol c)\\&\Rightarrow\arg\min\limits_c-2\boldsymbol x^Tg(\boldsymbol c)+g(\boldsymbol c)^Tg(\boldsymbol c)\\&=\arg\min\limits_c-2\boldsymbol {x^TDc}+\boldsymbol c^TD^TD\boldsymbol c\\&=\arg\min\limits_c-2\boldsymbol {x^TDc}+\boldsymbol c^TI_l\boldsymbol c\\&=-2\boldsymbol {x^TDc}+\boldsymbol c^T\boldsymbol c\end{aligned}c=argcminxg(c)22=argcmin(xg(c)T(xg(c))=argcminxTxxTg(c)标量g(c)Tx+g(c)Tg(c)=argcminc无关xTx2xTg(c)+g(c)Tg(c)argcmin2xTg(c)+g(c)Tg(c)=argcmin2xTDc+cTDTDc=argcmin2xTDc+cTIlc=2xTDc+cTcccc求导,∇(−2xTDc+cTc)=0⇒−2DTx+2c=0⇒c=DTx∴f(x)=DTx\nabla(-2\boldsymbol {x^TDc}+\boldsymbol c^T\boldsymbol c)=0\Rightarrow-2\boldsymbol D^Tx+2c=0\Rightarrow\boldsymbol c=\boldsymbol D^Tx\\\therefore f(x)=\boldsymbol D^Tx(2xTDc+cTc)=02DTx+2c=0c=DTxf(x)=DTx
进一步使用矩阵乘法,我们可以定义重构操作:r(x)=g(f(x))=DDTxr(x)=g(f(x))=\boldsymbol{DD}^Txr(x)=g(f(x))=DDTx,因为重构要求最小化所有维数和所有点上的误差矩阵的Frobenius范数:D∗=arg⁡min⁡D∑i,j(xj(i)−r(x(i))j)2subjecttoDTD=Il\begin{aligned}&\boldsymbol D^*=\arg\min\limits_{D}\sqrt{\sum_{i,j}\Big(x_j^{(i)}-r(x^{(i)})_j\Big)^2}\\&subject\quad to\quad D^TD=I_l\end{aligned}D=argDmini,j(xj(i)r(x(i))j)2subjecttoDTD=Il
为了简化推导,首先考虑l=1l=1l=1的情况。此时DDD简化为一个单一向量ddd,即d∗=arg⁡min⁡d∑i∥x(i)−ddTx(i)⎵标量∥22=arg⁡min⁡d∑i∥x(i)−dTx(i)d∥22=argmin⁡d∑i∥x(i)−x(i)Tdd∥22subjectto∥d∥2=1\begin{aligned}&\boldsymbol d^*=\arg\min\limits_d\sum_{i}\|\boldsymbol x^{(i)}-\boldsymbol d\underbrace{\boldsymbol d^T\boldsymbol x^{(i)}}_{\text{标量}}\|_2^2\\&=\arg\min\limits_d\sum_{i}\|\boldsymbol x^{(i)}-\boldsymbol d^T\boldsymbol x^{(i)}\boldsymbol d\|_2^2\\&=arg\min\limits_d\sum_{i}\|\boldsymbol x^{(i)}-\boldsymbol x^{(i)T}\boldsymbol d\boldsymbol d\|_2^2\\&subject\quad to\quad \|\boldsymbol d\|_2=1\end{aligned}d=argdminix(i)d标量dTx(i)22=argdminix(i)dTx(i)d22=argdminix(i)x(i)Tdd22subjecttod2=1将各点的向量写成矩阵形式,记为X∈Rm×nX\in\R^{m\times n}XRm×n,其中XI,:=x(i)TX_{I,:}=\boldsymbol x^{(i)T}XI,:=x(i)T
∴d∗=arg⁡min⁡d∥X−XddT∥F2,subjecttoddT=1\therefore\boldsymbol d^*=\arg\min\limits_{d}\|\boldsymbol{X}-\boldsymbol{Xdd}^T\|_F^2,\quad subject\quad to\quad \boldsymbol{dd}^T=1d=argdminXXddTF2subjecttoddT=1
又∵∥A∥F=∑i,jAi,j2,Tr(A)=∑iAi,i,∥A∥F=Tr(AAT)又\begin{aligned}\because\|A\|_F=\sqrt{\sum_{i,j}A^2_{i,j}},Tr(A)=\sum_{i}A_{i,i},\|A\|_F=\sqrt{Tr(AA^T)}\end{aligned}AF=i,jAi,j2Tr(A)=iAi,i,AF=Tr(AAT)
∴d∗=arg⁡min⁡d∥X−XddT∥F2=arg⁡min⁡dTr((X−XddT)T(X−XddT))=arg⁡min⁡dTr(XTX−XTXddT−ddTXTX+ddTXTXddT)=arg⁡min⁡dTr(XTX⎵与d无关)−Tr(XTXddT)−Tr(ddTXTX)+Tr(ddTXTXddT)⇒arg⁡min⁡d−Tr(XTXddT)−Tr(ddTXTX)+Tr(ddTXTXddT)=arg⁡min⁡d−2Tr(XTXddT)++Tr(XTXddTd⎵dTd=1dT)=arg⁡min⁡d−Tr(XTXddT)=arg⁡max⁡dTr(XTXddT)=arg⁡max⁡dTr(dTXTXd)\therefore\begin{aligned}\boldsymbol d^*&=\arg\min\limits_{d}\|\boldsymbol{X}-\boldsymbol{Xdd}^T\|_F^2=\arg\min\limits_{d}Tr\bigg(\Big(\boldsymbol{X}-\boldsymbol{Xdd}^T\Big)^T\Big(\boldsymbol{X}-\boldsymbol{Xdd}^T\Big)\bigg)\\&=\arg\min\limits_{d}Tr\Big(\boldsymbol{X^TX-X^TXdd^T-dd^TX^TX+dd^TX^TXdd^T}\Big)\\&=\arg\min\limits_{d}\underbrace{Tr\Big(\boldsymbol{X^TX}}_{与d无关}\Big)-Tr\Big(\boldsymbol{X^TXdd^T}\Big)-Tr\Big(\boldsymbol{dd^TX^TX}\Big)+Tr\Big(\boldsymbol{dd^TX^TXdd^T}\Big)\\&\Rightarrow\arg\min\limits_{d}-Tr\Big(\boldsymbol{X^TXdd^T}\Big)-Tr\Big(\boldsymbol{dd^TX^TX}\Big)+Tr\Big(\boldsymbol{dd^TX^TXdd^T}\Big)\\&=\arg\min\limits_{d}-2Tr\Big(\boldsymbol{X^TXdd^T}\Big)++Tr\Big(\boldsymbol{X^TXd\underbrace{d^Td}_{d^Td=1}d^T}\Big)\\&=\arg\min\limits_{d}-Tr(\boldsymbol{X^TXdd^T})=\arg\max\limits_{d}Tr(\boldsymbol{X^TXdd^T})\\&=\arg\max\limits_{d}Tr(\boldsymbol{d^TX^TXd})\end{aligned}d=argdminXXddTF2=argdminTr((XXddT)T(XXddT))=argdminTr(XTXXTXddTddTXTX+ddTXTXddT)=argdmindTr(XTX)Tr(XTXddT)Tr(ddTXTX)+Tr(ddTXTXddT)argdminTr(XTXddT)Tr(ddTXTX)+Tr(ddTXTXddT)=argdmin2Tr(XTXddT)++Tr(XTXddTd=1dTddT)=argdminTr(XTXddT)=argdmaxTr(XTXddT)=argdmaxTr(dTXTXd)
∴\therefore矩阵XTXX^TXXTX的最大特征值所对应的特征向量就是d\boldsymbol{d}d,同理可得矩阵D就是由前lll个最大的特征值所对应的特征向量构成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值