好的,我已经记住了你之前听过的所有题目。我将为你讲解一个尚未出现在列表中的经典算法。
核主成分分析(Kernel Principal Component Analysis, Kernel PCA)的数学推导与特征空间降维过程
题目描述
核主成分分析是主成分分析(PCA)的非线性扩展。标准的PCA只能对数据进行线性降维,即寻找数据在原始特征空间中的线性子空间(主成分)。然而,当数据的内部结构是非线性时(例如一个“瑞士卷”形状),线性PCA将无法发现其低维流形结构。核PCA通过“核技巧”,将数据隐式地映射到一个高维的(甚至可能是无限维的)特征空间,然后在这个特征空间中进行标准的线性PCA。这使得我们能够在原始输入空间中实现对数据的非线性降维。题目要求详细解释其核心思想、数学推导过程以及具体的计算步骤。
解题过程(循序渐进讲解)
第一步:回顾标准PCA并引出问题
标准PCA的目标是找到一组正交基(主成分方向),使得数据投影到这些方向上的方差最大化。数学上,这等价于求解数据协方差矩阵的特征值和特征向量。
给定中心化后的数据点 \(\mathbf{x}_1, \mathbf{x}_2, ..., \mathbf{x}_m \in \mathbb{R}^d\)(即 \(\sum_i \mathbf{x}_i = 0\)),协方差矩阵为:
\[\mathbf{C} = \frac{1}{m} \sum_{i=1}^m \mathbf{x}_i \mathbf{x}_i^T \]
然后求解特征值问题:
\[\mathbf{C} \mathbf{v} = \lambda \mathbf{v} \]
其中,\(\mathbf{v}\) 是特征向量(主成分方向),\(\lambda\) 是对应的特征值(方差)。
问题: 这个公式完全基于数据点之间的内积 \(\mathbf{x}_i^T \mathbf{x}_j\)。如果数据是非线性的,我们在原始空间中找不到好的线性投影方向。核心想法是:将数据映射到一个高维特征空间 \(\mathcal{F}\),然后再进行PCA。
第二步:引入特征映射与核函数
- 特征映射: 我们定义一个非线性映射函数 \(\phi\),将原始数据从输入空间 \(\mathbb{R}^d\) 映射到高维特征空间 \(\mathcal{F}\):
\[ \phi: \mathbb{R}^d \rightarrow \mathcal{F}, \quad \mathbf{x} \mapsto \phi(\mathbf{x}) \]
假设映射后的数据也是中心化的,即 $\sum_i \phi(\mathbf{x}_i) = 0$(稍后处理这个假设)。
- 特征空间中的PCA: 在特征空间 \(\mathcal{F}\) 中,协方差矩阵变为:
\[ \mathbf{C}^\phi = \frac{1}{m} \sum_{i=1}^m \phi(\mathbf{x}_i) \phi(\mathbf{x}_i)^T \]
我们需要求解:
\[ \mathbf{C}^\phi \mathbf{v}^\phi = \lambda \mathbf{v}^\phi \]
其中,$\mathbf{v}^\phi$ 是特征空间 $\mathcal{F}$ 中的特征向量。
- 核技巧的洞察:
- 特征向量 \(\mathbf{v}^\phi\) 一定位于所有样本映射 \(\phi(\mathbf{x}_i)\) 张成的空间里。这是一个关键结论(由表示定理支撑)。因此,\(\mathbf{v}^\phi\) 可以表示为所有 \(\phi(\mathbf{x}_i)\) 的线性组合:
\[ \mathbf{v}^\phi = \sum_{i=1}^m \alpha_i \phi(\mathbf{x}_i) \]
其中 $\alpha_i$ 是组合系数。
* 将 $\mathbf{v}^\phi$ 的表达式和 $\mathbf{C}^\phi$ 的公式代入特征方程 $\mathbf{C}^\phi \mathbf{v}^\phi = \lambda \mathbf{v}^\phi$:
\[ \left( \frac{1}{m} \sum_{j=1}^m \phi(\mathbf{x}_j) \phi(\mathbf{x}_j)^T \right) \left( \sum_{i=1}^m \alpha_i \phi(\mathbf{x}_i) \right) = \lambda \sum_{i=1}^m \alpha_i \phi(\mathbf{x}_i) \]
* 两边同时左乘 $\phi(\mathbf{x}_k)^T$(对于任意 $k = 1, ..., m$):
\[ \frac{1}{m} \sum_{j=1}^m \sum_{i=1}^m \alpha_i \phi(\mathbf{x}_k)^T \phi(\mathbf{x}_j) \phi(\mathbf{x}_j)^T \phi(\mathbf{x}_i) = \lambda \sum_{i=1}^m \alpha_i \phi(\mathbf{x}_k)^T \phi(\mathbf{x}_i) \]
-
定义核矩阵: 这里出现了内积 \(\phi(\mathbf{x}_k)^T \phi(\mathbf{x}_i)\)。我们定义核函数 \(k(\mathbf{x}_k, \mathbf{x}_i) = \phi(\mathbf{x}_k)^T \phi(\mathbf{x}_i)\)。核函数允许我们直接计算特征空间中的内积,而无需显式地知道映射 \(\phi\) 是什么!常用的核函数包括:
- 多项式核: \(k(\mathbf{x}, \mathbf{y}) = (\mathbf{x}^T \mathbf{y} + c)^d\)
- 高斯径向基函数(RBF)核: \(k(\mathbf{x}, \mathbf{y}) = \exp(-\gamma \|\mathbf{x} - \mathbf{y}\|^2)\)
- Sigmoid核: \(k(\mathbf{x}, \mathbf{y}) = \tanh(\kappa \mathbf{x}^T \mathbf{y} + \theta)\)
我们定义核矩阵 \(\mathbf{K} \in \mathbb{R}^{m \times m}\),其元素为 \(K_{ij} = k(\mathbf{x}_i, \mathbf{x}_j)\)。
代入核函数后,方程变为:
\[ \frac{1}{m} \sum_{j=1}^m \sum_{i=1}^m \alpha_i K_{kj} K_{ji} = \lambda \sum_{i=1}^m \alpha_i K_{ki}, \quad \forall k \]
用矩阵形式表示就是:
\[ \frac{1}{m} \mathbf{K}^2 \boldsymbol{\alpha} = \lambda \mathbf{K} \boldsymbol{\alpha} \]
其中 $\boldsymbol{\alpha} = (\alpha_1, ..., \alpha_m)^T$。
- 简化特征方程: 两边同时左乘 \(\mathbf{K}^{-1}\)(假设 \(\mathbf{K}\) 可逆),我们得到标准特征值问题:
\[ \mathbf{K} \boldsymbol{\alpha} = m \lambda \boldsymbol{\alpha} \]
为了与文献常见形式一致,令 $\tilde{\lambda} = m \lambda$,则有:
\[ \mathbf{K} \boldsymbol{\alpha} = \tilde{\lambda} \boldsymbol{\alpha} \]
**这就是核PCA的核心方程**。我们只需要求解核矩阵 $\mathbf{K}$ 的特征值和特征向量 $\boldsymbol{\alpha}$。
第三步:处理中心化假设
我们之前假设了 \(\sum_i \phi(\mathbf{x}_i) = 0\),但这在现实中不成立,因为我们甚至不知道 \(\phi\)。我们需要从数据中“中心化”核矩阵,使其对应于中心化后的特征映射。
中心化后的特征映射为 \(\tilde{\phi}(\mathbf{x}_i) = \phi(\mathbf{x}_i) - \frac{1}{m} \sum_{j=1}^m \phi(\mathbf{x}_j)\)。对应的中心化核矩阵 \(\tilde{K}_{ij} = \tilde{\phi}(\mathbf{x}_i)^T \tilde{\phi}(\mathbf{x}_j)\) 可以通过原始核矩阵 \(\mathbf{K}\) 计算得到:
\[\tilde{\mathbf{K}} = \mathbf{K} - \mathbf{1}_m \mathbf{K} - \mathbf{K} \mathbf{1}_m + \mathbf{1}_m \mathbf{K} \mathbf{1}_m \]
其中,\(\mathbf{1}_m\) 是一个 \(m \times m\) 的矩阵,所有元素都是 \(1/m\)。
在实际计算中,我们用 \(\tilde{\mathbf{K}}\) 替换上一步方程中的 \(\mathbf{K}\),然后求解:
\[\tilde{\mathbf{K}} \boldsymbol{\alpha} = \tilde{\lambda} \boldsymbol{\alpha} \]
第四步:求解与投影(降维)
- 特征分解: 对中心化核矩阵 \(\tilde{\mathbf{K}}\) 进行特征分解,得到特征值 \(\tilde{\lambda}_1 \geq \tilde{\lambda}_2 \geq ... \geq \tilde{\lambda}_m\) 和对应的特征向量 \(\boldsymbol{\alpha}^{(1)}, \boldsymbol{\alpha}^{(2)}, ..., \boldsymbol{\alpha}^{(m)}\)。
- 特征向量归一化: 为了确保特征空间中的特征向量 \(\mathbf{v}^\phi\) 是单位向量(\(\|\mathbf{v}^\phi\| = 1\)),我们需要对系数向量 \(\boldsymbol{\alpha}^{(k)}\) 进行归一化。根据 \(\mathbf{v}^{\phi (k)} = \sum_i \alpha_i^{(k)} \phi(\mathbf{x}_i)\),其模长为:
\[ \|\mathbf{v}^{\phi (k)}\|^2 = (\boldsymbol{\alpha}^{(k)})^T \tilde{\mathbf{K}} \boldsymbol{\alpha}^{(k)} = \tilde{\lambda}_k (\boldsymbol{\alpha}^{(k)})^T \boldsymbol{\alpha}^{(k)} \]
令其等于1,得到归一化条件:$\|\boldsymbol{\alpha}^{(k)}\| = 1 / \sqrt{\tilde{\lambda}_k}$。因此,我们将求解得到的每个特征向量 $\boldsymbol{\alpha}^{(k)}$ 除以其模长 $\sqrt{\tilde{\lambda}_k}$。
- 投影(降维): 对于一个(可能新的)数据点 \(\mathbf{x}\),我们想将其投影到第 \(k\) 个核主成分 \(\mathbf{v}^{\phi (k)}\) 上,得到降维后的坐标 \(t_k\)。投影计算为:
\[ t_k = (\mathbf{v}^{\phi (k)})^T \phi(\mathbf{x}) = \sum_{i=1}^m \alpha_i^{(k)} \phi(\mathbf{x}_i)^T \phi(\mathbf{x}) = \sum_{i=1}^m \alpha_i^{(k)} k(\mathbf{x}_i, \mathbf{x}) \]
**注意**: 这里 $\phi(\mathbf{x})$ 也需要中心化处理。在实践中,我们使用中心化后的核函数来计算新点与训练集点的“内积”。对于新点 $\mathbf{x}$,其中心化核向量 $\tilde{\mathbf{k}}_\mathbf{x}$ 的元素为:
\[ \tilde{k}(\mathbf{x}_i, \mathbf{x}) = k(\mathbf{x}_i, \mathbf{x}) - \frac{1}{m} \sum_{j=1}^m k(\mathbf{x}_j, \mathbf{x}) - \frac{1}{m} \sum_{j=1}^m k(\mathbf{x}_i, \mathbf{x}_j) + \frac{1}{m^2} \sum_{j, l=1}^m k(\mathbf{x}_j, \mathbf{x}_l) \]
然后,投影坐标 $t_k = (\boldsymbol{\alpha}^{(k)})^T \tilde{\mathbf{k}}_\mathbf{x}$。
如果我们想降到 $p$ 维,就取前 $p$ 个最大的特征值对应的归一化特征向量 $\boldsymbol{\alpha}^{(1)}, ..., \boldsymbol{\alpha}^{(p)}$,然后计算 $\mathbf{t} = (t_1, ..., t_p)^T$ 作为 $\mathbf{x}$ 在新的非线性主成分空间中的坐标。
总结
核PCA的巧妙之处在于,它完全避免了复杂的高维特征空间 \(\mathcal{F}\) 的显式计算。整个过程只依赖于核函数 \(k(\cdot, \cdot)\) 和核矩阵 \(\mathbf{K}\)。通过求解核矩阵的特征问题,我们得到了在特征空间中方差最大的方向(非线性主成分)。最终,任何数据点(包括新点)的降维坐标,都可以通过它与训练样本的核函数值的线性组合来计算。这使得我们能够用线性代数的工具,优雅地解决非线性降维问题。