机器学习数学推导(十七):降维与主成分分析
高维空间对基于距离的算法极其不友好。本文从最大方差与最小重构误差两个等价视角推导 PCA,并依次扩展到核 PCA、LDA、t-SNE 与 ICA——配套图示直接展示同一份数据上各方法到底干了什么。
这篇文章讲什么
把一万维的数据扔给聚类算法,多半会失败——不是算法不好,而是 高维空间本身对距离类方法极其不友好:体积都集中在球壳上,最近邻和最远邻的距离比趋近于 1,“近"这个概念失去了信息。降维的目的就是回应这件事:把数据投到一个低维空间里,同时尽可能保留真正重要的结构。
你将学到:
- 高维空间为什么反直觉(维度灾难)
- PCA 的两种等价推导:最大方差视角与最小重构误差视角
- 实践中怎么选 $k$(碎石图、累计方差曲线、重构质量)
- 核 PCA:在隐式特征空间里做 PCA,用来处理非线性流形
- LDA:用 Fisher 准则做有监督降维
- t-SNE:基于概率分布、保留邻域结构的可视化方法
- ICA vs PCA:去相关 ≠ 独立
前置知识:线性代数(特征值/特征向量、对称矩阵的谱定理)、基本概率(方差、协方差),以及对 核方法 有些印象。
1. 维度灾难
1.1 两个会颠覆直觉的现象
体积集中在球壳上。 $d$ 维单位超球的体积是
$$V_d = \frac{\pi^{d/2}}{\Gamma(d/2 + 1)}.$$比常数本身更重要的是它的形状变化:随着 $d$ 增大,几乎所有体积都集中在一层薄薄的球壳里。半径 $0.99$ 以内的体积占比是
$$(0.99)^d \xrightarrow{d \to \infty} 0.$$$d = 100$ 时这个比例约为 $36.6\%$,$d = 1000$ 时基本归零。高维球的绝大部分都是"皮”。
距离也会集中。 对很多分布而言,独立同分布样本之间最大距离与最小距离的比值会趋近于 1:
$$\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、核密度、聚类这些算法就失去判别能力了。这也是为什么先把高维数据压到一个学到的低维表示里,往往是整个流水线中性价比最高的一步。
1.2 降维到底为了什么
- 特征提取:去掉冗余方向,达到去噪、加速下游计算、节省存储的效果。
- 可视化:投到 2D/3D,让人能直接看到簇结构。
- 正则化:把模型限制在低维子空间本身就是一种很强的归纳偏置。
后面要讨论的方法可以这样归类:
| 类型 | 方法 | 是否有监督 | 是否线性 |
|---|---|---|---|
| 方差 | PCA | 否 | 是 |
| 类间分离 | LDA | 是 | 是 |
| 独立性 | ICA | 否 | 是 |
| 隐式特征空间 | 核 PCA | 否 | 否 |
| 邻域保持 | t-SNE / UMAP | 否 | 否 |
2. PCA:最大方差视角
2.1 设定
数据 $\{\mathbf{x}_1, \dots, \mathbf{x}_N\}$,每个 $\mathbf{x}_i \in \mathbb{R}^d$。先 中心化:减去均值 $\bar{\mathbf{x}} = \tfrac{1}{N}\sum_i \mathbf{x}_i$,下面假设 $\bar{\mathbf{x}} = \mathbf{0}$。把样本按行堆成 $\mathbf{X} \in \mathbb{R}^{N \times d}$,样本协方差矩阵 就是
$$\mathbf{S} = \frac{1}{N} \mathbf{X}^\top \mathbf{X} \in \mathbb{R}^{d \times d}.$$$\mathbf{S}$ 是对称半正定阵,由谱定理可知存在一组单位正交特征向量,且特征值非负。
2.2 第一主成分
我们要找一个单位方向 $\mathbf{w}_1 \in \mathbb{R}^d$,使数据投影后的方差最大。投影值是标量 $z_i = \mathbf{w}_1^\top \mathbf{x}_i$,因为数据已经中心化了,方差就是
$$\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.$$约束 $\mathbf{w}_1^\top \mathbf{w}_1 = 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),$$令 $\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 就是 把坐标轴对齐到数据主轴上的那个旋转。
2.3 多个主成分
把上面的论证加上"与已选方向正交"的约束反复做下去,就得到完整结论:前 $k$ 个主成分是 $\mathbf{S}$ 的特征向量 $\mathbf{w}_1, \dots, \mathbf{w}_k$,按 $\lambda_1 \ge \lambda_2 \ge \dots \ge \lambda_k$ 排序。把它们拼成投影矩阵
$$\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$。
2.4 怎么选 $k$
两张图基本就够用了。

碎石图(scree plot) 直接画特征值。在一个由秩为 $5$ 的潜信号 + 各向同性噪声生成的合成数据上,谱在 $k = 5$ 处有一个清晰的"肘点":之上是信号,之下是噪声。真实数据上肘点通常没这么干净,但这张图永远是第一步要看的。

累计方差比例
$$R(k) \;=\; \frac{\sum_{i=1}^{k} \lambda_i}{\sum_{i=1}^{d} \lambda_i} \tag{2}$$更适合直接做决策:取使 $R(k)$ 跨过保留率阈值的最小 $k$。在 UCI 手写数字数据集上,$D = 64$ 个像素特征里,$90\%$ 保留率只需要 $k = 21$,$95\%$ 需要 $k = 29$,$99\%$ 也只要 $k = 41$——超过三分之一的特征对表示这些数字图像来说是冗余的。
| |
3. PCA:最小重构误差视角
PCA 还有一种同样自然的推导。先把"方差"忘掉,问一个不一样的问题:在所有秩为 $k$ 的投影里,哪一个对原始数据的 逼近 最好?
给定单位正交的 $\mathbf{W}_k$,$\mathbf{x}_i$ 的秩-$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.$$利用 $\mathrm{tr}(AB) = \mathrm{tr}(BA)$ 和 $\mathbf{W}_k^\top \mathbf{W}_k = I$,可以推出 方差分解:
$$\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$ 逼近"这两个性质的唯一线性方法。任何其他线性"特征提取器"至少要放弃其中之一。
4. 核 PCA:用核技巧处理非线性流形
4.1 线性 PCA 撞墙的地方
线性 PCA 只能旋转和投影,它不能"弯"。如果数据本身就在一个曲面上——同心圆、瑞士卷、球面——那么任何线性投影都不可能保留它的结构。
4.2 在特征空间里做 PCA
借助 核技巧 :把每个点通过特征映射 $\phi: \mathbb{R}^d \to \mathcal{H}$ 送进一个(可能是无限维的)特征空间,在那里做 PCA。我们从来不把 $\phi$ 显式写出来,只需要内积
$$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)$
构造 $N \times N$ 的核矩阵 $K_{ij} = k(\mathbf{x}_i, \mathbf{x}_j)$,按下式在特征空间中进行中心化:
$$\tilde{\mathbf{K}} = \mathbf{K} - \mathbf{1}_N \mathbf{K} - \mathbf{K}\,\mathbf{1}_N + \mathbf{1}_N \mathbf{K}\,\mathbf{1}_N, \qquad \mathbf{1}_N = \tfrac{1}{N}\mathbf{1}\mathbf{1}^\top,$$然后求解 $\tilde{\mathbf{K}}\, \boldsymbol{\alpha}_k = N \tilde{\lambda}_k\, \boldsymbol{\alpha}_k$。新样本 $\mathbf{x}$ 在第 $k$ 个特征空间主成分上的投影为
$$z_k(\mathbf{x}) = \sum_{i=1}^{N} \alpha_{k,i}\, k(\mathbf{x}_i, \mathbf{x}).$$
瑞士卷是经典示例。原始 3D 流形其实是一张 2D 卷起来的"纸",颜色编码了点在这张纸上的位置。线性 PCA(中)把它压成一个平面,把流形上相距很远的部分叠到一起——黄色和红色挤在一块。RBF 核 PCA(右)则相当于在一个高维特征空间里做 PCA,那里这张纸基本是平的,于是 2D 投影把它"展开"了:颜色平滑过渡,恰好对应原始流形上的位置。
复杂度:线性 PCA 是 $O(d^3 + Nd^2)$;核 PCA 是 $O(N^3 + N^2 d)$。当 $N \ll d$(如基因数据,几千特征几百样本)时,核 PCA 反而更便宜。
5. LDA:有监督降维
PCA 完全不看标签。对分类任务来说这很浪费:一个方向可能方差极大却对分类毫无帮助;反过来,一个方差很小的方向也可能是完美的判别方向。线性判别分析(LDA) 利用标签找出 类间 散度相对 类内 散度最大的方向。
5.1 二分类推导
两类 $C_1, C_2$,样本数 $N_1, N_2$,类均值 $\boldsymbol{\mu}_1, \boldsymbol{\mu}_2$。定义
$$\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{(类内散度)}$$最大化 Fisher 准则——投影后类间方差和类内方差之比:
$$J(\mathbf{w}) = \frac{\mathbf{w}^\top \mathbf{S}_B\, \mathbf{w}}{\mathbf{w}^\top \mathbf{S}_W\, \mathbf{w}}. \tag{4}$$令 $\nabla J = 0$ 得到广义特征值问题 $\mathbf{S}_B \mathbf{w} = \lambda\, \mathbf{S}_W \mathbf{w}$。利用 $\mathbf{S}_B$ 的秩一结构可以化成闭式解:
$$\mathbf{w}^* \propto \mathbf{S}_W^{-1}(\boldsymbol{\mu}_1 - \boldsymbol{\mu}_2). \tag{5}$$5.2 多分类
对 $C$ 类,设全局均值为 $\boldsymbol{\mu}$,把 $\mathbf{S}_B$ 推广为
$$\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$ 个判别方向。这是个硬上限,工程里很容易忘。
5.3 PCA vs LDA 一表对比
| 方面 | PCA | LDA |
|---|---|---|
| 是否使用标签 | 否 | 是 |
| 目标 | 最大方差 | 最大类间分离 |
| 输出维数 | 至多 $d$ | 至多 $C - 1$ |
| 主要用途 | 可视化、去噪 | 分类预处理 |
6. t-SNE:用概率分布保留邻域结构
PCA 保留的是 全局 结构(方差、距离);但对 2D 可视化来说这往往是错的目标。看散点图的人想看到的是 簇,这通常意味着保留 局部邻域。t-SNE 用一个概率公式精确地做到了这件事。
6.1 高维相似度
对每对 $(i, j)$,由各点自带的高斯定义对称相似度:
$$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)}$ 与用户给定值一致——大致可以理解为每个点的"有效邻居数"。
6.2 低维相似度与重尾
低维空间里改用 Student-$t$(柯西)核:
$$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)$ 慢得多,给远点留出更多空间——这正是著名的 拥挤问题(crowding problem) 的解法。
6.3 优化
最小化 $C = \mathrm{KL}(P \,\|\, Q) = \sum_{i \ne j} p_{ij} \log (p_{ij}/q_{ij})$。梯度有非常清晰的物理含义:
$$\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 只用来 展示 结果。
7. ICA:你要的不是去相关,而是独立
PCA 找的是 正交 的最大方差方向。两个 PCA 主成分之间是不相关的——但"不相关"比"独立"弱得多。如果原始信号本身是独立且非高斯的,可以用 独立成分分析(ICA) 把它们拆开。
经典场景是 鸡尾酒会问题:$K$ 个麦克风录到 $K$ 个独立源的线性混合
$$\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。
8. 一张总表
| 方法 | 优化目标 | 输出维数 | 是否线性 | 是否用标签 | 主要用途 |
|---|---|---|---|---|---|
| PCA | 方差 / 重构 MSE | 至多 $d$ | 是 | 否 | 去噪、压缩、预处理 |
| 核 PCA | 特征空间方差 | 至多 $N$ | 否 | 否 | 非线性流形 |
| LDA | 类间分离(Fisher) | 至多 $C - 1$ | 是 | 是 | 分类预处理 |
| ICA | 统计独立性 | $K$ 个源 | 是 | 否 | 源分离 |
| t-SNE | 局部邻域 KL | $2$ 或 $3$ | 否 | 否 | 仅可视化 |
| UMAP | 模糊拓扑结构 | 任意低维 | 否 | 可选 | 更快、更顾全局的可视化 |
碰到新表格数据时,一个相当稳妥的默认流程是:标准化 → PCA 看谱 → 砍掉噪声成分 → LDA 或 t-SNE 可视化。本文里其它工具,都是当这个流程的某个假设崩了的时候拿出来用的(非线性流形、独立源、只关心邻域结构……)。
9. 练习题
练习 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)。 为什么能 work?
解答。 RBF 特征映射会把原空间相距很近的点(小 $\|\mathbf{x}_i - \mathbf{x}_j\|$)送到很相似的特征向量,与它们在原空间里的全局位置无关。在那个特征空间里做 PCA,捕捉到的就是流形的内在坐标,而不是嵌入它的 3D 坐标。
练习 5(PCA 白化)。 是什么、用来干什么?
解答。 白化变换 $\mathbf{z} = \boldsymbol{\Lambda}^{-1/2} \mathbf{W}^\top \mathbf{x}$ 让输出的协方差是单位阵——既去相关又是单位方差。它常用作 ICA 的预处理(ICA 假设输入是白化过的),以及对特征尺度敏感的模型的归一化步骤。
参考文献
[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] Schölkopf, B., Smola, A., & Müller, K.-R. (1998). Nonlinear component analysis as a kernel eigenvalue problem. Neural Computation, 10(5), 1299-1319.
[5] Hyvärinen, 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.