前言
花书第一章的实例内容
主成分分析 (principal components analysis,PCA
)是一个简单的机器学习算法,可以通过简单的线性代数知识推导。
问题说明
假设在 Rn\Bbb{R}^nRn 空间中有m个点 {x(1),⋯ ,x(m)}\{\boldsymbol{x}^{(1)},\cdots,\boldsymbol{x}^{(m)}\}{x(1),⋯,x(m)} ,现希望对这些点进行有损压缩(使用更少的内存,但损失一些精度去存储这些点)。损失的精度尽可能的少。
编码这些点的一种方式是用低维表示。对每个点 x(i)∈Rn\boldsymbol{x}^{(i)}\in\Bbb{R}^nx(i)∈Rn ,会有一个对应的编码向量 c(i)∈Rl\boldsymbol{c}^{(i)}\in\Bbb{R}^lc(i)∈Rl。如果 l<nl \lt nl<n ,那么我们便使用了更少的内存来存储原来的数据。
我们希望找到一个编码函数
,根据输入返回编码,f(x)=cf(\boldsymbol{x})=\boldsymbol{c}f(x)=c ;
我们也希望找到一个解码函数
,给定编码重构输入, x≈g(f(x))\boldsymbol{x} \approx g(f(\boldsymbol{x}))x≈g(f(x))
PCA由我们选择的解码函数而定,具体来讲,为了简化解码器,我们使用矩阵乘法将编码映射回 Rn\Bbb{R}^nRn ,即
(0)g(c)=Dcg(\boldsymbol{c})=\mathbf{D}\boldsymbol{c}\tag{0}g(c)=Dc(0)
其中 D∈Rn×l\mathbf{D}\in\Bbb{R}^{n \times l}D∈Rn×l 是定义解码的矩阵
到目前为止,所描述的问题可能有很多个解。因为如果按比例地缩小所有点对应的编码向量 cic_ici ,那么只需要按比例放大
D:,i\mathbf{D}_{:,i}D:,i ,即可保持结果不变,为了使问题有唯一解,限制 D\mathbf{D}D 中所有列向量都有单位范数
计算这个解码器的最优解码器可能是一个困难的问题。为了使编码问题简单一些,PCA 限制 D\mathbf{D}D 中所有的列向量彼此正交(除非 l=nl=nl=n ,否则严格意义上 D\mathbf{D}D 不是一个正交矩阵)
公式推导
首先,确定如何根据每一个输入 x\boldsymbol{x}x 得到一个最优编码 c∗\boldsymbol{c}^*c∗。
这里通过最小化原始输入向量 x\boldsymbol{x}x 和 重构向量g(c∗)g(\boldsymbol{c}^*)g(c∗) 之间的距离。
在PCA算法中,使用 L2L^2L2 范数
(1)c∗=argminc∥x−g(c)∥2\boldsymbol{c}^* = \begin{matrix} \quad \\ argmin \\ c \end{matrix} \| \boldsymbol{x}-g(\boldsymbol{c}) \|_2 \tag{1}c∗=argminc∥x−g(c)∥2(1)
用平方 L2L^2L2 范数替代 L2L^2L2 范数
因为 L2L^2L2 范数是非负的,并且平方运算在 [0,∞)[0,\infty)[0,∞) 上单调递增,所以两者在相同的值 c\boldsymbol{c}c 上取得最小值
得到
(2)c∗=argminc∥x−g(c)∥22=argminc(x−g(c))T(x−g(c))=argminc(xTx−xTg(c)−g(c)Tx+g(c)Tg(c))=argminc(xTx−2xTg(c)+g(c)Tg(c))\begin{array}{ll} \boldsymbol{c}^* &= \begin{matrix}\quad\\argmin\\c\end{matrix} \|\boldsymbol{x}-g(\boldsymbol{c})\|_2^2\\ &=\begin{matrix}\quad\\argmin\\c\end{matrix} (\boldsymbol{x}-g(\boldsymbol{c}))^T(\boldsymbol{x}-g(\boldsymbol{c})) \\ &=\begin{matrix}\quad\\argmin\\c\end{matrix} (\boldsymbol{x}^T\boldsymbol{x} -\boldsymbol{x}^Tg(\boldsymbol{c}) -g(\boldsymbol{c})^T\boldsymbol{x} +g(\boldsymbol{c})^{T}g(\boldsymbol{c})) \\ &=\begin{matrix}\quad\\argmin\\c\end{matrix} (\boldsymbol{x}^T\boldsymbol{x} -2\boldsymbol{x}^Tg(\boldsymbol{c}) +g(\boldsymbol{c})^{T}g(\boldsymbol{c})) \\ \end{array}\tag{2}c∗=argminc∥x−g(c)∥22=argminc(x−g(c))T(x−g(c))=argminc(xTx−xTg(c)−g(c)Tx+g(c)Tg(c))=argminc(xTx−2xTg(c)+g(c)Tg(c))(2)
公式2运算中使用的知识点:\color{Blue}{\text{公式2运算中使用的知识点:}}公式2运算中使用的知识点:
1.两个向量的点积可以用范数来表示,有:{\color{Blue}1.}两个向量的点积可以用范数来表示,有:1.两个向量的点积可以用范数来表示,有:
xTy=∥x∥2∥y∥2cosθ\boldsymbol{x}^T\boldsymbol{y}=\|\boldsymbol{x}\|_2\|\boldsymbol{y}\|_2\cos\thetaxTy=∥x∥2∥y∥2cosθ
其中θ表示x和y的夹角其中 \theta 表示 \boldsymbol{x} \text{和} \boldsymbol{y} 的夹角其中θ表示x和y的夹角
此时有此时有此时有
xTx=∥x∥2∥x∥2cos90∘=∥x∥22\boldsymbol{x}^T\boldsymbol{x}=\|\boldsymbol{x}\|_2\|\boldsymbol{x}\|_2\cos90^{\circ}=\|\boldsymbol{x}\|_2^2xTx=∥x∥2∥x∥2cos90∘=∥x∥22
2.矩阵加法乘法运算的性质:{\color{Blue}2.}矩阵加法乘法运算的性质:2.矩阵加法乘法运算的性质:
(A+B)T=AT+BT(\mathbf{A}+\mathbf{B})^T=\mathbf{A}^T+\mathbf{B}^T(A+B)T=AT+BT
A(B+C)=AB+AC\mathbf{A}(\mathbf{B}+\mathbf{C})=\mathbf{AB}+\mathbf{AC}A(B+C)=AB+AC
3.两个向量的点积满足交换律:{\color{Blue}3.}两个{\color{Orange}{向量}}的点积满足交换律:3.两个向量的点积满足交换律:
xTy=yTx\boldsymbol{x}^T\boldsymbol{y}=\boldsymbol{y}^T\boldsymbol{x}xTy=yTx
由于求最优参数c∗\boldsymbol{c}^*c∗ 使得 ∥x−g(c)∣∣22\|\boldsymbol{x} - g(\boldsymbol{c})||^2_2∥x−g(c)∣∣22 最小 所以 与xTx\boldsymbol{x}^T\boldsymbol{x}xTx 无关。并且把 g(c)=Dcg(\boldsymbol{c}) = \mathbf{D}\boldsymbol{c}g(c)=Dc 进行带入公式(2)得到
(3)c∗=argminc−2xTg(c)+g(c)Tg(c))=argminc−2xTDc+cTDTDc=argminc−2xTDc+cTIlc=argminc−2xTDc+cTc\begin{array}{ll} \boldsymbol{c}^* &=\begin{matrix}\quad\\argmin\\c\end{matrix} -2\boldsymbol{x}^Tg(\boldsymbol{c}) +g(\boldsymbol{c})^{T}g(\boldsymbol{c})) \\ &=\begin{matrix}\quad\\argmin\\c\end{matrix} -2\boldsymbol{x}^T\mathbf{D}\boldsymbol{c} +\boldsymbol{c}^T\mathbf{D}^T\mathbf{D}\boldsymbol{c} \\ &=\begin{matrix}\quad\\argmin\\c\end{matrix} -2\boldsymbol{x}^T\mathbf{D}\boldsymbol{c} +\boldsymbol{c}^T\mathbf{I}_l\boldsymbol{c} \\ &=\begin{matrix}\quad\\argmin\\c\end{matrix} -2\boldsymbol{x}^T\mathbf{D}\boldsymbol{c} +\boldsymbol{c}^T\boldsymbol{c} \end{array}\tag{3}c∗=argminc−2xTg(c)+g(c)Tg(c))=argminc−2xTDc+cTDTDc=argminc−2xTDc+cTIlc=argminc−2xTDc+cTc(3)
由矩阵D的正交性和单位范数约束,有DTD=Il由矩阵\mathbf{D}的正交性和单位范数约束,有 \mathbf{D}^T\mathbf{D}=\mathbf{I}_l由矩阵D的正交性和单位范数约束,有DTD=Il
由于凸函数在一阶导数为0的点处取得极小值,由式(3)有:
(4)∇c(−2xTDc+cTc)=0−2DTx+2c=0c=DTx\begin{array}{rll} \nabla_{\boldsymbol{c}}( -2\boldsymbol{x}^T\mathbf{D}\boldsymbol{c}+\boldsymbol{c}^T\boldsymbol{c} ) &=0\\ -2\mathbf{D}^T\boldsymbol{x}+2\boldsymbol{c} &=0\\ \boldsymbol{c} &=\mathbf{D}^T\boldsymbol{x}\\ \end{array}\tag{4}∇c(−2xTDc+cTc)−2DTx+2cc=0=0=DTx(4)
此时,由公式(0) 、公式(4)及编码函数和解码函数的定义有:
(5)编码函数:f(x)=c=DTx{\color{OrangeRed}{\qquad\qquad\qquad\qquad\quad编码函数:}}
f(\boldsymbol{x}) = \boldsymbol{c} = \mathbf{D}^T \boldsymbol{x} \tag{5}编码函数:f(x)=c=DTx(5)
(6)定义PCA重构操作,解码函数:r(x)=g(f(x))=g(c)=Dc=DDTx{\color{OrangeRed}{定义PCA重构操作,解码函数:}} \begin{array}{rll} r(\boldsymbol{x}) &= g(f(\boldsymbol{x})) \\ &= g(\boldsymbol{c}) \\ &= \mathbf{D}\boldsymbol{c} \\ &= \mathbf{D} \mathbf{D}^T \boldsymbol{x} \end{array}\tag{6}定义PCA重构操作,解码函数:r(x)=g(f(x))=g(c)=Dc=DDTx(6)
下面需要挑选编码矩阵 D\mathbf{D}D 。回顾最小化输入和重构之间 L2L^2L2 距离。 因为是使用相同矩阵 D\mathbf{D}D 对所有点进行解码,不能再孤立地看待每个点。相反,必须最小化所有维数和所有点上的误差矩阵的 Frobenius 范数:
(7)D∗=argminD∑i,j(xj(i)−r(x(i))j)2subject toDTD=Il\mathbf{D^*} = \begin{matrix}\quad\\argmin\\_\mathbf{D}\end{matrix}
\sqrt{\sum_{i,j}(\boldsymbol{x}_{j}^{(i)} -r(\boldsymbol{x}^{(i)})_{j})^2}
\quad subject\,to\quad \mathbf{D}^T\mathbf{D} = \mathbf{I}_{l}
\tag{7}D∗=argminDi,j∑(xj(i)−r(x(i))j)2subjecttoDTD=Il(7)
考虑 l=1l =1l=1 ,此时 D\mathbf{D}D 是一个单一向量 d\boldsymbol{d}d。记 X∈Rm×n\mathbf{X} \in \Bbb{R}^{m \times n}X∈Rm×n, 其中 Xi,:=x(i)T\mathbf{X}_{i,:} = \boldsymbol{x}^{(i)^{T}}Xi,:=x(i)T, 我们将式(7)写成矩阵形式:
(8)d∗=argmind∥X−XddT∥F2subject  to dTd=1=argmind Tr((X−XddT)T(X−XddT))subject  to dTd=1=argmind Tr(XTX−XTXddT−ddTXTX+ddTXTXddT)subject  to dTd=1=argmind Tr(XTX)−Tr(XTXddT)−Tr(ddTXTX)+Tr(ddTXTXddT)subject  to dTd=1=argmind Tr(XTX)−2Tr(XTXddT)+Tr(XTXddTddT)subject  to dTd=1\begin{array}{rll} \boldsymbol{d^*} &= \begin{matrix}\quad\\argmin\\_\boldsymbol{d}\end{matrix} \left \| \boldsymbol{X-Xdd}^{T} \right \|^{2}_{F} \quad subject \; to \ \ \boldsymbol{d}^T \boldsymbol{d} = 1\\ &= \begin{matrix}\quad\\argmin\\_\boldsymbol{d}\end{matrix} \, Tr \left( \left(\boldsymbol{X- Xdd}^T\right)^T \left(\boldsymbol{X -X dd}^T\right) \right) \quad subject \; to \ \ \boldsymbol{d}^T \boldsymbol{d} = 1\\ &= \begin{matrix}\quad\\argmin\\_\boldsymbol{d}\end{matrix} \, Tr \left( \boldsymbol{X}^T\boldsymbol{X} - \boldsymbol{X}^T\boldsymbol{Xdd}^T - \boldsymbol{dd}^T\boldsymbol{X}^T\boldsymbol{X} + \boldsymbol{dd}^T\boldsymbol{X}^T\boldsymbol{Xdd}^T \right) \quad subject \; to \ \ \boldsymbol{d}^T \boldsymbol{d} = 1\\ &= \begin{matrix}\quad\\argmin\\_\boldsymbol{d}\end{matrix} \, Tr( \boldsymbol{X}^T\boldsymbol{X} ) - Tr(\boldsymbol{X}^T\boldsymbol{Xdd}^T ) - Tr(\boldsymbol{dd}^T\boldsymbol{X}^T\boldsymbol{X} ) + Tr(\boldsymbol{dd}^T\boldsymbol{X}^T\boldsymbol{Xdd}^T ) \quad subject \; to \ \ \boldsymbol{d}^T \boldsymbol{d} = 1\\ &= \begin{matrix}\quad\\argmin\\_\boldsymbol{d}\end{matrix} \, Tr( \boldsymbol{X}^T\boldsymbol{X} ) - 2Tr(\boldsymbol{X}^T\boldsymbol{Xdd}^T ) + Tr(\boldsymbol{X}^T\boldsymbol{Xdd}^T\boldsymbol{dd}^T ) \quad subject \; to \ \ \boldsymbol{d}^T \boldsymbol{d} = 1\\ \end{array}\tag{8}d∗=argmind∥∥∥X−XddT∥∥∥F2subjectto dTd=1=argmindTr((X−XddT)T(X−XddT))subjectto dTd=1=argmindTr(XTX−XTXddT−ddTXTX+ddTXTXddT)subjectto dTd=1=argmindTr(XTX)−Tr(XTXddT)−Tr(ddTXTX)+Tr(ddTXTXddT)subjectto dTd=1=argmindTr(XTX)−2Tr(XTXddT)+Tr(XTXddTddT)subjectto dTd=1(8)
公式8运算中使用的知识点:\color{Blue}{\text{公式8运算中使用的知识点:}}公式8运算中使用的知识点:
1.标量与向量乘积运算中,标量放在向量的左边或右边都可以,结合标量的转置等于它本身,{\color{Blue}1.}标量与向量乘积运算中,标量放在向量的左边或右边都可以,结合标量的转置等于它本身,1.标量与向量乘积运算中,标量放在向量的左边或右边都可以,结合标量的转置等于它本身,
可以根据美观的需要对公式进行重排可以根据美观的需要对公式进行重排可以根据美观的需要对公式进行重排
2.通过矩阵的迹运算描述矩阵Frobenius范数:{\color{Blue}2.}通过矩阵的迹运算描述矩阵Frobenius 范数:2.通过矩阵的迹运算描述矩阵Frobenius范数:
∥A∥F=Tr(AAT)=Tr(ATA)\|\mathbf{A}\|_F=\sqrt{Tr(\mathbf{AA}^T)}=\sqrt{Tr(\mathbf{A}^T\mathbf{A})}∥A∥F=Tr(AAT)=Tr(ATA)
3.矩阵迹的运算性质:{\color{Blue}3.}矩阵迹的运算性质:3.矩阵迹的运算性质:
Tr(A+B)=Tr(A)+Tr(B)Tr(\mathbf{A+B})=Tr(\mathbf{A})+Tr(\mathbf{B})Tr(A+B)=Tr(A)+Tr(B)Tr(∏i=1nF(i))=Tr(F(n)∏i=1n−1F(i))循环改变迹运算中相乘的顺序不影响结果\begin{matrix} \operatorname{Tr}(\prod\limits_{i=1}^n\mathbf{F}^{(i)}) =\operatorname{Tr}(\mathbf{F}^{(n)}\prod\limits_{i=1}^{n-1}\mathbf{F}^{(i)})\\ 循环改变迹运算中相乘的顺序不影响结果\end{matrix}Tr(i=1∏nF(i))=Tr(F(n)i=1∏n−1F(i))循环改变迹运算中相乘的顺序不影响结果
式(8)去除不相关的项(Tr(XTX)Tr( \mathbf{X}^T\mathbf{X} )Tr(XTX)与d\boldsymbol{d}d无关 ),并且结合约束条件 dTd=1\boldsymbol{d}^T \boldsymbol{d} = 1dTd=1 有:
(9)d∗=argmind  −2Tr(XTXddT)+Tr(XTXddTddT)subject  to dTd=1=argmind  −2Tr(XTXddT)+Tr(XTXddT)subject  to dTd=1=argmind  −Tr(XTXddT)subject  to dTd=1=argmaxd  Tr(XTXddT)subject  to dTd=1\begin{array}{rll} \boldsymbol{d^*} &= \begin{matrix}\quad\\argmin\\_\boldsymbol{d}\end{matrix} \; -2Tr(\boldsymbol{X}^T\boldsymbol{Xdd}^T ) + Tr(\boldsymbol{X}^T\boldsymbol{Xdd}^T\boldsymbol{dd}^T ) \quad subject \; to \ \ \boldsymbol{d}^T \boldsymbol{d} = 1\\ &= \begin{matrix}\quad\\argmin\\_\boldsymbol{d}\end{matrix} \; -2Tr(\boldsymbol{X}^T\boldsymbol{Xdd}^T ) + Tr(\boldsymbol{X}^T\boldsymbol{Xdd}^T ) \quad subject \; to \ \ \boldsymbol{d}^T \boldsymbol{d} = 1\\ &= \begin{matrix}\quad\\argmin\\_\boldsymbol{d}\end{matrix} \; -Tr(\boldsymbol{X}^T\boldsymbol{Xdd}^T ) \quad subject \; to \ \ \boldsymbol{d}^T \boldsymbol{d} = 1\\ &= \begin{matrix}\quad\\argmax\\_\boldsymbol{d}\end{matrix} \; Tr(\boldsymbol{X}^T\boldsymbol{Xdd}^T ) \quad subject \; to \ \ \boldsymbol{d}^T \boldsymbol{d} = 1 \end{array}\tag{9}d∗=argmind−2Tr(XTXddT)+Tr(XTXddTddT)subjectto dTd=1=argmind−2Tr(XTXddT)+Tr(XTXddT)subjectto dTd=1=argmind−Tr(XTXddT)subjectto dTd=1=argmaxdTr(XTXddT)subjectto dTd=1(9)
公式(9)的优化问题可以通过特征分解来求解可得,即最优的 d\boldsymbol{d}d 是 XTX\boldsymbol{X}^T\boldsymbol{X}XTX 最大特征值对应的特征向量。
上述推导特征与 l=1l=1l=1 的情况,仅得到了第一个主成分