本文参考主成分分析降维原理——PCA数学推导及深度学习(2.12)。
应用层面的推导参考【机器学习】降维——PCA(非常详细)及PCA的数学原理
主成分分析是一个简单的机器学习算法,可以通过基础的线性代数知识推导。
假设在 R n \mathbb{R}^{n} Rn空间中我们有 m m m个点 { x ( 1 ) , . . . , x ( m ) } \{\mathbf{x}^{(1)},...,\mathbf{x}^{(m)}\} { x(1),...,x(m)},我们希望对这些点进行有损压缩。有损压缩表示我们使用更少的内存,但损失一些精度去存储这些点。我们希望损失的精度尽可能少。
一种编码这些点的方式是用低维表示。对于每个点 x ( i ) ∈ R n \mathbf{x}^{(i)}\in\mathbb{R}^{n} x(i)∈Rn,会有一个对应的编码向量 c i ∈ R l \mathbf{c}^{i}\in\mathbb{R}^{l} ci∈Rl。如果 l l l比 n n n小,那么我们便使用了更少的内存来存储原来的数据。我们希望找到一个编码函数,根据输入返回编码, f ( x ) = c f(\mathbf{x})=\mathbf{c} f(x)=c;我们也希望找到一个解码函数,给定编码重构输入, x ≈ g ( f ( x ) ) x\approx g(f(\mathbf{x})) x≈g(f(x))。
PCA 由我们选择的解码函数而定。具体地,为了简化解码器,我们使用矩阵乘法将编码映射回 R n \mathbb{R}^{n} Rn,即 g ( c ) = D c g(\mathbf{c}) = D\mathbf{c} g(c)=Dc,其 D ∈ R n × l D\in\mathbb{R}^{n\times l} D∈Rn×l是定义解码的矩阵。
目前为止所描述的问题,可能会有多个解。因为如果我们按比例地缩小所有点对应的编码向量 c i c_{i} ci,那么我们只需按比例放大 D : , i D_{:,i} D:,i,即可保持结果不变。为了使问题有唯一解,我们限制 D D D 中所有列向量都有单位范数。
计算这个解码器的最优编码可能是一个困难的问题。为了使编码问题简单一些,PCA限制 D D D的列向量彼此正交(注意,除非 l = n l=n l=n,否则严格意义上 D D D不是一个正交矩阵)。
为了将这个基本想法变为我们能够实现的算法,首先我们需要明确如何根据每一个输入 x \mathbf{x} x得到一个最优编码 c ∗ c^{*} c∗。一种方法是最小化原始输入向量 x \mathbf{x} x和重构向量 g ( c ∗ ) g(\mathbf{c}^{*}) g(c∗)之间的距离。我们使用范数来衡量它们之间的距离。在PCA算法中,我们使用 L 2 L^{2} L2 范数:
c ∗ = a g r min ∥ x − g ( c ) ∥ 2 . \mathbf{c^{*}}=agr\min\|\mathbf{x}-g(\mathbf{c})\|_{2}. c∗=agrmin∥x−g(c)∥2.
我们可以用平方 L 2 L^{2} L2 范数替代 L 2 L^{2} L2 范数,因为两者在相同的值 c \mathbf{c} c上取得最小值。这是因为 L 2 L^{2} L2 范数是非负的,并且平方运算在非负值上是单调递增的。
c ∗ = a g r min c ∥ x − g ( c ) ∥ 2 2 . \mathbf{c^{*}}=agr\min\limits_{\mathbf{c}}\|\mathbf{x}-g(\mathbf{c})\|_{2}^{2}. c∗=agrcmin∥x−g(c)∥22.
该最小化函数可以简化成:
( x − g ( c ) ) T ( x − g ( c ) ) = x T x − x T g ( c ) − g ( c ) T x + g ( c ) T g ( c ) = x T x − 2 x T g ( c ) + g ( c ) T g ( c ) (\mathbf{x}-g(\mathbf{c}))^{T}(\mathbf{x}-g(\mathbf{c}))=\mathbf{x}^{T}\mathbf{x}-\mathbf{x}^{T}g(\mathbf{c})-g(\mathbf{c})^{T}\mathbf{x}+g(\mathbf{c})^{T}g(\mathbf{c})=\mathbf{x}^{T}\mathbf{x}-2\mathbf{x}^{T}g(\mathbf{c})+g(\mathbf{c})^{T}g(\mathbf{c}) (x−g(c))T(x−g(c))=xTx−xTg(c)−g(c)Tx+g(c)Tg(c)=xTx−2xTg(c)+g(c)Tg(c)
因为第一项x⊤x 不依赖于c,所以我们可以忽略它,得到如下的优化目标:
c ∗ = a g r min c − 2 x T g ( c ) + g ( c ) T g ( c ) . \mathbf{c}^{*}=agr\min\limits_{\mathbf{c}}-2\mathbf{x}^{T}g(\mathbf{c})+g(\mathbf{c})^{T}g(\mathbf{c}). c∗=agrcmin−2xTg(c)+g(c)Tg(c).
更进一步,我们代入 g ( c ) g(\mathbf{c}) g(c)的定义:
c ∗ = a g r min c − 2 x T D c + c T D T D c = a g r min c − 2 x T D c + c T c \mathbf{c}^{*}=agr\min\limits_{\mathbf{c}}-2\mathbf{x}^{T}D\mathbf{c}+\mathbf{c}^{T}D^{T}D\mathbf{c}=agr\min\limits_{\mathbf{c}}-2\mathbf{x}^{T}D\mathbf{c}+\mathbf{c}^{T}\mathbf{c} c∗=agrcmin−2xTDc+cTDTDc=agrcmin−2x