主成分分析(principle components analysis ,PCA)是比较基础的机器学习算法,主要是通过保留数据的特征来进行编码与解码。 假设在 R n \R^n Rn空间中有 m m m个点 { x ( 1 ) , x ( 2 ) , ⋯   , x ( m ) } \{x^{(1)},x^{(2)},\cdots,x^{(m)}\} {x(1),x(2),⋯,x(m)},我们希望对这些点进行压缩。压缩的目的是我们可以使用更少的内存来储存这些数据,但是同时又希望压缩损失的信息(精度)尽可能少。 编码这些点的一种方式就是使用低维表示。对于每个 x ( i ) ∈ R n x^{(i)}\in\R^n x(i)∈Rn,会有一个对应的编码向量 c ( i ) ∈ R l c^{(i)}\in\R^l c(i)∈Rl。如果 l l l比 n n n小,那么我们就可以使用更少的内存来储存数据。我们希望找到一个编码函数,根据输入返回编码, f ( x ) = c f(x)=c f(x)=c,同时我们也希望找到一个解码函数,给定编码能够重构输入, x ≈ ( f ( x ) ) x\approx(f(x)) x≈(f(x))。 具体来说,我们可以使用一个矩阵乘法将编码器映射回 R n \R^n Rn,即 g ( c ) = D c g(c)=Dc g(c)=Dc,其中 D ∈ R n × l D\in\R^{n\times l} D∈Rn×l是定义解码的矩阵。但是这存在一个小问题,有可能存在多个解。因为如果我们按比例地缩小所有点对应的编码向量 c ( i ) c^{(i)} c(i),那么只需要按比例放大 D : i D_{:i} D:i,即可以保持结果不变。为了使问题有唯一解,我们限制 D D D中所有列向量都有单位范数。为了简化问题,PCA 限制 D D D的列向量彼此正交。 那么我们如何选择一个根据每一个输入 x \boldsymbol x x得到最优编码 c ∗ \boldsymbol c^* c∗?一种最常见的方法就是最小化原始输入向量 x \boldsymbol x x和重构向量 g ( c ∗ ) g(\boldsymbol c^*) g(c∗)之间的距离,使用范数来衡量它们之间的距离。常用 L 2 L^2 L2范数,即 c ∗ = arg min c ∥ x − g ( c ∗ ) ∥ 2 \boldsymbol c^*=\arg \min\limits_c\|\boldsymbol x-g(\boldsymbol c^*)\|_2 c∗=argcmin∥x−g(c∗)∥2我们可以使用平方 L 2 L^2 L2范数替代 L 2 L^2 L2范数。因为二者在相同的值c上取得最小值。 c ∗ = arg min c ∥ x − g ( c ∗ ) ∥ 2 2 = arg min c ( x − g ( c ∗ ) T ( x − g ( c ∗ ) ) = arg min c x T x − x T g ( c ) − g ( c ) T x ⎵ 标量 + g ( c ) T g ( c ) = arg min c x T x ⎵ 与c无关 − 2 x T g ( c ) + g ( c ) T g ( c ) ⇒ arg min c − 2 x T g ( c ) + g ( c ) T g ( c ) = arg min c − 2 x T D c + c T D T D c = arg min c − 2 x T D c + c T I l c = − 2 x T D c + c T c \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∗=argcmin∥x−g(c∗)∥22=argcmin(x−g(c∗)T(x−g(c∗))=argcminxTx−xTg(c)−标量 g(c)Tx+g(c)Tg(c)=argcmin与c无关 xTx−2xTg(c)+g(c)Tg(c)⇒argcmin−2xTg(c)+g(c)Tg(c)=argcmin−2xTDc+cTDTDc=argcmin−2xTDc+cTIlc=−2xTDc+cTc对 c c c求导, ∇ ( − 2 x T D c + c T c ) = 0 ⇒ − 2 D T x + 2 c = 0 ⇒ c = D T x ∴ f ( x ) = D T x \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)=0⇒−2DTx+2c=0⇒c=DTx∴f(x)=DTx 进一步使用矩阵乘法,我们可以定义重构操作: r ( x ) = g ( f ( x ) ) = D D T x r(x)=g(f(x))=\boldsymbol{DD}^Tx r(x)=g(f(x))=DDTx,因为重构要求最小化所有维数和所有点上的误差矩阵的Frobenius范数: D ∗ = arg min D ∑ i , j ( x j ( i ) − r ( x ( i ) ) j ) 2 s u b j e c t t o D T D = I l \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)2 subjecttoDTD=Il 为了简化推导,首先考虑 l = 1 l=1 l=1的情况。此时 D D D简化为一个单一向量 d d d,即 d ∗ = arg min d ∑ i ∥ x ( i ) − d d T x ( i ) ⎵ 标量 ∥ 2 2 = arg min d ∑ i ∥ x ( i ) − d T x ( i ) d ∥ 2 2 = a r g min d ∑ i ∥ x ( i ) − x ( i ) T d d ∥ 2 2 s u b j e c t t o ∥ 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∗=argdmini∑∥x(i)−d标量 dTx(i)∥22=argdmini∑∥x(i)−dTx(i)d∥22=argdmini∑∥x(i)−x(i)Tdd∥22subjectto∥d∥2=1将各点的向量写成矩阵形式,记为 X ∈ R m × n X\in\R^{m\times n} X∈Rm×n,其中 X I , : = x ( i ) T X_{I,:}=\boldsymbol x^{(i)T} XI,:=x(i)T ∴ d ∗ = arg min d ∥ X − X d d T ∥ F 2 , s u b j e c t t o d d T = 1 \therefore\boldsymbol d^*=\arg\min\limits_{d}\|\boldsymbol{X}-\boldsymbol{Xdd}^T\|_F^2,\quad subject\quad to\quad \boldsymbol{dd}^T=1 ∴d∗=argdmin∥X−XddT∥F2,subjecttoddT=1 又 ∵ ∥ A ∥ F = ∑ i , j A i , j 2 , T r ( A ) = ∑ i A i , i , ∥ A ∥ F = T r ( A A T ) 又\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} 又∵∥A∥F=i,j∑Ai,j2 ,Tr(A)=i∑Ai,i,∥A∥F=Tr(AAT) ∴ d ∗ = arg min d ∥ X − X d d T ∥ F 2 = arg min d T r ( ( X − X d d T ) T ( X − X d d T ) ) = arg min d T r ( X T X − X T X d d T − d d T X T X + d d T X T X d d T ) = arg min d T r ( X T X ⎵ 与 d 无 关 ) − T r ( X T X d d T ) − T r ( d d T X T X ) + T r ( d d T X T X d d T ) ⇒ arg min d − T r ( X T X d d T ) − T r ( d d T X T X ) + T r ( d d T X T X d d T ) = arg min d − 2 T r ( X T X d d T ) + + T r ( X T X d d T d ⎵ d T d = 1 d T ) = arg min d − T r ( X T X d d T ) = arg max d T r ( X T X d d T ) = arg max d T r ( d T X T X d ) \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∗=argdmin∥X−XddT∥F2=argdminTr((X−XddT)T(X−XddT))=argdminTr(XTX−XTXddT−ddTXTX+ddTXTXddT)=argdmin与d无关 Tr(XTX)−Tr(XTXddT)−Tr(ddTXTX)+Tr(ddTXTXddT)⇒argdmin−Tr(XTXddT)−Tr(ddTXTX)+Tr(ddTXTXddT)=argdmin−2Tr(XTXddT)++Tr(XTXddTd=1 dTddT)=argdmin−Tr(XTXddT)=argdmaxTr(XTXddT)=argdmaxTr(dTXTXd) ∴ \therefore ∴矩阵 X T X X^TX XTX的最大特征值所对应的特征向量就是 d \boldsymbol{d} d,同理可得矩阵D就是由前 l l l个最大的特征值所对应的特征向量构成。