
机器学习数学推导(十七):降维与主成分分析
高维空间对基于距离的算法极其不友好。本文从最大方差与最小重构误差两个等价视角推导 PCA,并依次扩展到核 PCA、LDA、t-SNE 与 ICA——配套图示直接展示同一份数据上各方法到底干了什么。
你将学到什么#
给聚类算法输入 10,000 维的数据,它大概率会失败——问题不在于算法本身,而在于高维空间对基于距离的学习方法天然不友好。体积几乎都集中在球壳上,最近邻和最远邻的距离比值趋近于 $1$ ,“近”这个概念变得毫无意义。降维的目的正是将数据投影到低维空间,同时保留其关键结构。

你将学到的内容:
- 高维空间为何反直觉(维度灾难)
- PCA 的两种等价推导:最大方差与最小重构误差
- 实际操作中如何选择 $k$ (碎石图、累计方差、重构质量)
- 核 PCA:在隐式特征空间中实现 PCA,用于处理非线性流形
- LDA:通过 Fisher 准则实现有监督降维
- t-SNE:一种基于概率分布的邻域保持嵌入方法,适合可视化
- ICA 和 PCA 的区别:去相关并不等于独立
前置知识:线性代数(特征值/特征向量、对称矩阵的谱定理)、基本概率(方差、协方差),以及对 核方法 有一定了解。
维度灾难#
两个颠覆直觉的现象#
$$V_d = \frac{\pi^{d/2}}{\Gamma(d/2 + 1)}.$$ $$(0.99)^d \xrightarrow{d \to \infty} 0.$$当 $d=100$ 时,这个比例只有约 $36.6\%$ ;到 $d=1000$ 时,基本趋近于零。高维球体的绝大部分其实是“皮”。
$$\frac{\max_{i \ne j}\|\mathbf{x}_i - \mathbf{x}_j\|}{\min_{i \ne j}\|\mathbf{x}_i - \mathbf{x}_j\|} \xrightarrow{d \to \infty} 1.$$当所有点之间的距离差不多时,$k$ -NN、核密度估计和聚类算法就很难发挥作用了。因此,将高维数据映射到低维表示空间通常是整个流程中最关键的一步。
降维的目标是什么#
- 特征提取:去掉冗余方向,既能去噪,又能加速后续计算,还能减少存储开销。
- 可视化:将数据投影到 2D 或 3D 空间,方便人眼观察簇结构。
- 正则化:强制模型在低维子空间中工作,本身就是一种很强的归纳偏置。
接下来介绍的方法可以按以下维度分类:
| 类型 | 方法 | 是否有监督 | 是否线性 |
|---|---|---|---|
| 方差 | PCA | 否 | 是 |
| 类间分离 | LDA | 是 | 是 |
| 独立性 | ICA | 否 | 是 |
| 隐式特征空间 | 核 PCA | 否 | 否 |
| 邻域保持 | t-SNE / UMAP | 否 | 否 |
PCA:从最大方差角度理解#
基本设定#
$$ \mathbf{S} = \frac{1}{N} \mathbf{X}^\top \mathbf{X} \in \mathbb{R}^{d \times d}. $$$\mathbf{S}$ 是一个对称半正定矩阵,根据谱定理,它有一组单位正交的特征向量,且特征值非负。
第一主成分#
$$ \mathrm{Var}(z) = \frac{1}{N}\sum_{i=1}^{N} (\mathbf{w}_1^\top \mathbf{x}_i)^2 = \mathbf{w}_1^\top \mathbf{S}\, \mathbf{w}_1. $$ $$ \mathcal{L}(\mathbf{w}_1, \lambda_1) = \mathbf{w}_1^\top \mathbf{S}\, \mathbf{w}_1 - \lambda_1 (\mathbf{w}_1^\top \mathbf{w}_1 - 1). $$ $$ \frac{\partial \mathcal{L}}{\partial \mathbf{w}_1} = 2\mathbf{S}\mathbf{w}_1 - 2\lambda_1 \mathbf{w}_1 = 0, $$ $$ \mathbf{S}\, \mathbf{w}_1 = \lambda_1\, \mathbf{w}_1, \tag{1} $$并且投影方差正好等于 $\mathbf{w}_1^\top \mathbf{S}\, \mathbf{w}_1 = \lambda_1$ 。因此,要最大化方差,只需要取 $\mathbf{S}$ 的最大特征值对应的特征向量。

上图展示了一个二维高斯分布的例子。左图中,橙色箭头(PC1)指向数据散布最大的方向;绿色箭头(PC2)与之正交,吸收剩余的方差;两条椭圆分别是经验高斯分布的 $1\sigma$ 和 $2\sigma$ 等高线。右图展示了经过刚体旋转 $\mathbf{z}_i = \mathbf{W}^\top \mathbf{x}_i$ 后的结果:PC1 成为水平轴,PC2 成为垂直轴,数据此时已经去相关——经验协方差矩阵变成了对角阵 $\mathrm{diag}(\lambda_1, \lambda_2)$ 。从几何上看,PCA 就是将坐标轴对齐到数据主轴的旋转操作。
所有主成分#
$$ \mathbf{W}_k = [\mathbf{w}_1, \dots, \mathbf{w}_k] \in \mathbb{R}^{d \times k}, $$样本 $\mathbf{x}_i$ 的低维表示就是 $\mathbf{z}_i = \mathbf{W}_k^\top \mathbf{x}_i \in \mathbb{R}^k$ 。
如何选择 $k$ #
实际应用中,两张图基本够用。

碎石图(scree plot) 直接展示了特征值的变化趋势。在一个由秩为 $5$ 的潜信号加各向同性噪声生成的数据中,特征值在 $k = 5$ 处出现明显的“肘点”:之上是信号,之下是噪声。真实数据中的肘点往往不如理想情况明显,但碎石图仍是分析的首要步骤。

这张图更适合做决策:取使 $R(k)$ 达到保留率阈值的最小 $k$ 。以 UCI 手写数字数据集为例,原始特征维度 $D = 64$ ,保留 $90\%$ 方差只需要 $k = 21$ ,保留 $95\%$ 需要 $k = 29$ ,即使保留 $99\%$ 也只需 $k = 41$ 。超过三分之二的原始特征对表示手写数字图像而言是冗余的。
| |
PCA:从最小重构误差的角度看#
PCA 还有另一种推导方式,同样很自然。先别管方差了,换个问题:在所有秩为 $k$ 的投影中,哪个投影对原始数据的逼近效果最好?
$$\hat{\mathbf{x}}_i = \mathbf{W}_k\, \mathbf{W}_k^\top \mathbf{x}_i,$$ $$J_{\mathrm{recon}}(\mathbf{W}_k) = \frac{1}{N} \sum_{i=1}^{N} \big\| \mathbf{x}_i - \mathbf{W}_k \mathbf{W}_k^\top \mathbf{x}_i \big\|^2.$$ $$\underbrace{\mathrm{tr}(\mathbf{S})}_{\text{总方差}} \;=\; \underbrace{\mathrm{tr}(\mathbf{W}_k^\top \mathbf{S}\, \mathbf{W}_k)}_{\text{捕获方差}} \;+\; \underbrace{J_{\mathrm{recon}}(\mathbf{W}_k)}_{\text{丢失 = 重构误差}}. \tag{3}$$总方差是固定的,所以 最大化捕获方差和最小化重构误差其实是同一个问题。两种推导最终都会归结到同一个特征值方程 (1),最优的 $\mathbf{W}_k$ 在两种情况下也完全一致。

上图展示了公式 (3) 在手写数字数据集上的直观意义。MSE 曲线一开始快速下降,随后趋于平稳——大部分误差都被前几个主成分消除了。右边的图像网格展示了两个具体数字的重构结果(最左列是原图)。当 $k=2$ 时,重构结果只是模糊的轮廓;到 $k=8$ 时,数字已经可以辨认;到 $k=16$ 时,笔画变得清晰;到 $k=32$ 时,重构结果和原图几乎看不出区别。这就是公式 (3) 的实际含义:需要保留多少个主成分,取决于下游任务对保真度的要求。
为什么这很重要? PCA 是唯一一种既能实现数据去相关,又能在 Frobenius 范数意义下提供最佳秩-$k$ 逼近的线性方法。任何其他线性特征提取器至少会牺牲这两个性质中的一个。
核 PCA:用核技巧处理非线性结构#
线性 PCA 的局限#
线性 PCA 只能旋转和投影,无法弯曲。如果数据分布在曲面上(如同心圆、瑞士卷或球面),任何线性投影都无法保留其原始结构。
在特征空间中做 PCA#
$$k(\mathbf{x}_i, \mathbf{x}_j) = \phi(\mathbf{x}_i)^\top \phi(\mathbf{x}_j).$$常用的核函数包括:
- 多项式核:$k(\mathbf{x}, \mathbf{y}) = (\mathbf{x}^\top \mathbf{y} + c)^p$
- RBF(高斯)核:$k(\mathbf{x}, \mathbf{y}) = \exp(-\gamma \|\mathbf{x} - \mathbf{y}\|^2)$

瑞士卷是经典的例子。原始的 3D 流形实际上是一张 2D 的“纸”卷起来的,颜色表示点在这张纸上的位置。线性 PCA(中间图)将瑞士卷压成平面,结果把流形上相距很远的部分叠在一起——黄色和红色挤到了一块。而使用 RBF 核的核 PCA(右图)相当于在高维特征空间中做 PCA,那里这张纸基本是平的,于是 2D 投影成功将其展开:颜色平滑过渡,正好对应原始流形上的位置。
复杂度:线性 PCA 的复杂度是 $O(d^3 + Nd^2)$ ,核 PCA 是 $O(N^3 + N^2 d)$ 。当 $N \ll d$ 时(例如基因组学数据,几千个特征但只有几百个样本),核 PCA 实际上更高效。
LDA:有监督降维#
PCA 完全忽略标签。如果下游任务是分类,这就很浪费:某个方向可能方差很大,但对区分类别毫无用处;反过来,一个方差很小的方向却可能是完美的分类依据。线性判别分析(LDA) 利用标签找到能让 类间 散度相对于 类内 散度最大的方向。
二分类推导#
$$\mathbf{S}_B = (\boldsymbol{\mu}_1 - \boldsymbol{\mu}_2)(\boldsymbol{\mu}_1 - \boldsymbol{\mu}_2)^\top \quad \text{(类间散度)}$$ $$\mathbf{S}_W = \sum_{c=1}^{2} \sum_{i \in C_c}(\mathbf{x}_i - \boldsymbol{\mu}_c)(\mathbf{x}_i - \boldsymbol{\mu}_c)^\top \quad \text{(类内散度)}$$ $$J(\mathbf{w}) = \frac{\mathbf{w}^\top \mathbf{S}_B\, \mathbf{w}}{\mathbf{w}^\top \mathbf{S}_W\, \mathbf{w}}. \tag{4}$$ $$\mathbf{w}^* \propto \mathbf{S}_W^{-1}(\boldsymbol{\mu}_1 - \boldsymbol{\mu}_2). \tag{5}$$多分类#
$$\mathbf{S}_B = \sum_{c=1}^{C} N_c\, (\boldsymbol{\mu}_c - \boldsymbol{\mu})(\boldsymbol{\mu}_c - \boldsymbol{\mu})^\top.$$求解 $\mathbf{S}_B \mathbf{w} = \lambda\, \mathbf{S}_W \mathbf{w}$ ,取前几个特征向量即可。注意,$\mathbf{S}_B$ 是 $C$ 个秩一矩阵的和,且满足约束 $\sum_c N_c (\boldsymbol{\mu}_c - \boldsymbol{\mu}) = 0$ ,因此 $\mathrm{rank}(\mathbf{S}_B) \le C - 1$ 。这意味着 LDA 最多只能输出 $C - 1$ 个判别方向。这个硬上限很容易在实际工程中被忽略。
PCA vs LDA 对比#
| 方面 | PCA | LDA |
|---|---|---|
| 是否使用标签 | 否 | 是 |
| 目标 | 最大方差 | 最大类间分离 |
| 输出维数 | 至多 $d$ | 至多 $C - 1$ |
| 主要用途 | 可视化、去噪 | 分类预处理 |
t-SNE:保留邻域结构的可视化利器#

PCA 关注的是全局结构,比如方差和距离。但对 2D 可视化来说,这往往不是我们想要的。看散点图时,我们更关心的是 簇,也就是局部邻域的分布。t-SNE 就是为此设计的,它用概率模型完美解决了这个问题。
高维相似度计算#
$$p_{j \mid i} = \frac{\exp(-\|\mathbf{x}_i - \mathbf{x}_j\|^2 / 2\sigma_i^2)}{\sum_{k \ne i} \exp(-\|\mathbf{x}_i - \mathbf{x}_k\|^2 / 2\sigma_i^2)}, \qquad p_{ij} = \frac{p_{j \mid i} + p_{i \mid j}}{2N}.$$每个点的带宽 $\sigma_i$ 通过二分搜索确定,目标是让困惑度 $2^{H(P_i)}$ 匹配用户设定的值。这个值可以理解为每个点的有效邻居数量。
低维相似度与重尾分布#
$$q_{ij} = \frac{(1 + \|\mathbf{y}_i - \mathbf{y}_j\|^2)^{-1}}{\sum_{k \ne l}(1 + \|\mathbf{y}_k - \mathbf{y}_l\|^2)^{-1}}. \tag{6}$$为什么选择重尾分布?因为 2D 空间比原始空间“拥挤”得多,中等距离的点容易挤在一起。柯西分布按 $\|y\|^{-2}$ 衰减,比高斯分布的 $\exp(-\|y\|^2)$ 慢得多,给远距离点留出了更多空间。这就是解决 拥挤问题 的关键。
优化过程#
$$\frac{\partial C}{\partial \mathbf{y}_i} = 4\sum_{j}(p_{ij} - q_{ij})(1 + \|\mathbf{y}_i - \mathbf{y}_j\|^2)^{-1}(\mathbf{y}_i - \mathbf{y}_j). \tag{7}$$如果 $p_{ij} > q_{ij}$ ,表示两点在原空间相似但在低维空间隔得太远,梯度会吸引它们靠近;如果 $p_{ij} < q_{ij}$ ,表示两点在原空间不相似但在低维空间靠得太近,梯度会排斥它们分开。

这张图对比了三种方法在手写数字数据集上的表现。PCA(左)把方差压缩到两个轴上,但大部分类别的点严重重叠——方差并不能反映类别信息。LDA(中)显式地最大化类间分离,生成了清晰的彩色条带,但它最多只能输出 $C - 1 = 9$ 维。t-SNE(右)完全忽略方差和全局几何,专注于让局部邻居保持在一起,生成了论文中常见的那种界限分明的簇团。
实践提醒
t-SNE 是可视化工具,不是聚类工具。t-SNE 图中的簇间距离和簇大小没有实际意义,结果还会受随机种子、困惑度和迭代次数的影响。聚类应该在原空间或 PCA 空间中完成,t-SNE 只用来展示结果。
ICA:当你需要独立,而不仅仅是去相关#
PCA 找的是最大方差的 正交 方向。两个 PCA 主成分之间不相关,但“不相关”远比“独立”弱得多。如果原始信号确实是独立且非高斯分布的,那么可以用 Independent Component Analysis (ICA) 把它们还原出来。
$$\mathbf{x} = A\, \mathbf{s},$$目标是从 $\mathbf{x}$ 和一个假设(即 $s_j$ 彼此独立,且最多只有一个服从高斯分布)出发,恢复出 $\mathbf{s}$ 。ICA 的做法是找到一个解混矩阵 $W$ ,使得恢复出的成分 $\mathbf{y} = W\mathbf{x}$ 尽可能 非高斯。常用的方法包括负熵或峰度作为对比函数。背后的直觉来自中心极限定理:独立变量的任何线性组合都会比变量本身“更接近高斯分布”,因此真正分离出来的源应该沿着 最不接近高斯 的方向。

上图清楚地展示了这一点。第一行是两个真实的独立源——一个是正弦波,另一个是方波。第二行是两路观测到的混合信号(每个麦克风都同时听到两个源)。第三行用 PCA 找出了最大方差的正交方向,但这些方向并不是原始源——可以看到正弦波和方波的形状在每个 PCA 成分里互相干扰。第四行用 ICA 几乎完美地还原了原始源(符号和尺度上的差异是 ICA 模型固有的模糊性)。
记住这两者的区别很简单:PCA 去相关,ICA 解独立。压缩和可视化时用 PCA;如果你认为数据是由若干独立源混合而成(比如音频分离、EEG 去噪、fMRI 成分分析),那就用 ICA。
总结一张表#
| 方法 | 优化目标 | 输出维度 | 是否线性 | 是否用标签 | 主要用途 |
|---|---|---|---|---|---|
| PCA | 方差 / 重构 MSE | 最多 $d$ | 是 | 否 | 去噪、压缩、预处理 |
| 核 PCA | 特征空间方差 | 最多 $N$ | 否 | 否 | 非线性流形 |
| LDA | 类间分离(Fisher) | 最多 $C - 1$ | 是 | 是 | 分类预处理 |
| ICA | 统计独立性 | $K$ 个源 | 是 | 否 | 源分离 |
| t-SNE | 局部邻域 KL | $2$ 或 $3$ | 否 | 否 | 仅用于可视化 |
| UMAP | 模糊拓扑结构 | 任意低维 | 否 | 可选 | 更快、兼顾全局的可视化 |
遇到新表格数据时,我的默认流程是:标准化 → 用 PCA 查看谱分布 → 去掉噪声成分 → 用 LDA 或 t-SNE 可视化。本文提到的其他工具,都是在上述流程的某些假设不成立时才会用到(比如非线性流形、独立源、只关注邻域结构等情况)。
练习题#
练习 1 (方差保留): $\mathbf{S}$ 的特征值是 $(5, 3, 1, 0.5, 0.5)$ 。前两个主成分能保留多少方差?
解答: 总和是 $10$ ,前两个加起来是 $8$ ,保留了 $80\%$ 。
练习 2 (中心化): 为什么在做 PCA 之前必须对数据进行中心化?
解答: 协方差矩阵 $\mathbf{S} = \tfrac{1}{N}\mathbf{X}^\top \mathbf{X}$ 只有在数据均值为零($\bar{\mathbf{x}} = \mathbf{0}$ )时才等于样本协方差。如果数据没有中心化,$\mathbf{X}^\top \mathbf{X}$ 的最大特征向量会指向数据的均值方向,而不是方差最大的方向。
练习 3 (PCA vs t-SNE,10 个分得很开的簇)。 我预期会看到什么结果?
解答: PCA:线性投影可能会把部分重叠的簇压在一起。t-SNE:会出现十个清晰分开的团块,但团块之间的距离和大小没有任何实际意义。
练习 4 (瑞士卷上的核 PCA)。 为什么它能起作用?
解答: RBF 特征映射会把原空间中距离很近的点(小 $\|\mathbf{x}_i - \mathbf{x}_j\|$ )映射到相似的特征向量,而不管它们在原空间中的全局位置。在那个特征空间里做 PCA,捕捉到的是流形的内在坐标,而不是嵌入它的 3D 坐标。
练习 5 (PCA 白化)。 它是什么?有什么用?
解答: 白化变换 $\mathbf{z} = \boldsymbol{\Lambda}^{-1/2} \mathbf{W}^\top \mathbf{x}$ 会让输出的协方差变成单位阵——既去相关又归一化到单位方差。它是 ICA 的常用预处理步骤(ICA 假设输入已经白化),也适合用来归一化那些对特征尺度敏感的模型。
下一步#
降维把数据压到了低维流形上,但还没回答一个关键问题:这些数据在低维空间里是否自然地分成了几堆? 这就是聚类要做的事。下一章我把视角从"投影"切到"分组"。
聚类没有标签,所以每个算法都对应一种"什么算同一类"的假设:K-means 假设球状簇 + 等方差,GMM 假设椭球簇 + 概率混合,DBSCAN 假设密度连通,谱聚类假设图上的低传导切分,层次聚类假设嵌套结构。我会沿着这五种假设把它们一个个推过去——不是为了背算法,而是为了让你在拿到一个新数据集时,能从"它的簇看起来像什么"反推到"该用哪种算法"。这是无监督学习里最常被忽略的元能力。
参考文献#
[1] Pearson, K. (1901). On lines and planes of closest fit to systems of points in space. Philosophical Magazine, 2(11), 559-572.
[2] Hotelling, H. (1933). Analysis of a complex of statistical variables into principal components. Journal of Educational Psychology, 24(6), 417-441.
[3] Fisher, R. A. (1936). The use of multiple measurements in taxonomic problems. Annals of Eugenics, 7(2), 179-188.
[4] Scholkopf, B., Smola, A., & Muller, K.-R. (1998). Nonlinear component analysis as a kernel eigenvalue problem. Neural Computation, 10(5), 1299-1319.
[5] Hyvarinen, A., & Oja, E. (2000). Independent component analysis: algorithms and applications. Neural Networks, 13(4-5), 411-430.
[6] Van der Maaten, L., & Hinton, G. (2008). Visualizing data using t-SNE. JMLR, 9(11), 2579-2605.
[7] McInnes, L., Healy, J., & Melville, J. (2018). UMAP: Uniform manifold approximation and projection for dimension reduction. arXiv:1802.03426 .
[8] Jolliffe, I. T. (2002). Principal Component Analysis (2nd ed.). Springer.
本文是 ML Mathematical Derivations 系列的第 17 章。下一章:第 18 章:聚类算法 。上一章:第 16 章:条件随机场 。
机器学习数学推导 20 篇
- 01 机器学习数学推导(一):绪论与数学基础
- 02 机器学习数学推导(二):线性代数与矩阵论
- 03 机器学习数学推导(三):概率论与统计推断
- 04 机器学习数学推导(四):凸优化理论
- 05 机器学习数学推导(五):线性回归
- 06 机器学习数学推导(六):逻辑回归与分类
- 07 机器学习数学推导(七):决策树
- 08 机器学习数学推导(八):支持向量机
- 09 机器学习数学推导(九):朴素贝叶斯
- 10 机器学习数学推导(十):半朴素贝叶斯与贝叶斯网络
- 11 机器学习数学推导(十一):集成学习
- 12 机器学习数学推导(十二):XGBoost 与 LightGBM
- 13 机器学习数学推导(十三):EM 算法与 GMM
- 14 机器学习数学推导(十四):变分推断与变分 EM
- 15 机器学习数学推导(十五):隐马尔可夫模型
- 16 机器学习数学推导(十六):条件随机场
- 17 机器学习数学推导(十七):降维与主成分分析 当前
- 18 机器学习数学推导(十八):聚类算法
- 19 机器学习数学推导(十九):神经网络与反向传播
- 20 机器学习数学推导(二十):正则化与模型选择