上一篇我们建立了矩阵微积分——梯度、Jacobian、Hessian——工具链的第三件利器。至此,Part 1 “拆”的四件核心工具(分解、度量、微分、迭代)的前三件已经齐备。现在是时候把它们用起来了。
真实世界的数据往往是高维的——一张 112×92 的灰度人脸有 10304 个像素,一段基因组测序有上百万维。在这样的高维空间中,存储、计算和可视化都变得不可行,而且大量维度之间高度相关,携带的独立信息远少于维度数暗示的那么多。如何找到数据中真正重要的少数几个方向,用它们忠实地表示整个数据集?
PCA(Principal Component Analysis,主成分分析) 给出了一个优雅的答案:找到方差最大的方向作为新坐标轴。核心洞察是——数据沿哪个方向”散得最开”,哪个方向就携带最多信息。如果数据点沿某个方向几乎不变,那个方向就是冗余的,可以丢弃。
为什么选择方差最大的方向?
同一组数据投影到不同方向,保留的信息量截然不同
数学上,PCA 完美地将前面学到的三件工具编织在一起:对数据的协方差矩阵做特征分解(Art. 2 特征分解),等价地对中心化数据矩阵做 SVD(Art. 3 SVD),而优化目标的推导用到了 Lagrange 乘子法(Art. 5 矩阵微积分 中矩阵微积分的直接应用)。
本文将从三个等价视角推导 PCA,然后展示它最著名的应用——Eigenfaces(特征脸)人脸识别,最后讨论 PCA 的局限。
三种等价视角
PCA 可以从三个不同的角度理解,它们在数学上严格等价。
视角一:最大方差
给定 n 个 d 维数据点 x1,…,xn∈Rd。中心化后的数据点为 x~i=xi−xˉ,其中 xˉ=n1∑i=1nxi 是均值。
问题:找一个单位方向 w∈Rd(∥w∥=1),使数据在该方向上的投影方差最大。
数据点 x~i 在方向 w 上的投影是标量 x~iTw。投影的方差为:
Var=n−11∑i=1n(x~iTw)2=wTC(n−11i=1∑nx~ix~iT)w=wTCw
其中 C∈Rd×d 是协方差矩阵(covariance matrix):
C=n−11X~TX~
这里 X~∈Rn×d 是中心化数据矩阵(每行是一个 x~iT)。C 是对称半正定矩阵。
于是 PCA 的优化问题是:
maxwwTCws.t.wTw=1
用 Lagrange 乘子法:构造 L(w,λ)=wTCw−λ(wTw−1),对 w 求导令其为零:
∇wL=2Cw−2λw=0
Cw=λw
这正是 C 的特征值问题。最优的 w 是 C 的特征向量,而投影方差 wTCw=λwTw=λ。要最大化方差,取最大特征值对应的特征向量——这就是第一主成分(1st principal component)。
类推:第 k 主成分是在与前 k−1 个主成分正交的约束下,方差最大的方向。由于 C 对称,它的特征向量自然正交(谱定理),所以 d 个主成分就是 C 的 d 个特征向量,按特征值从大到小排列:
λ1≥λ2≥⋯≥λd≥0
视角二:最小重建误差
换一个角度:我们想用 k 维子空间近似原始 d 维数据,使重建误差最小。
设 Wk=[w1,…,wk]∈Rd×k 是 k 个正交基向量构成的矩阵。数据点 x~i 投影到这个子空间后的重建为 x^i=WkWkTx~i。重建误差是:
E=∑i=1n∥x~i−WkWkTx~i∥2=∥X~−X~WkWkT∥F2
由于 WkWkT 是投影矩阵,可以证明(利用 X~ 的 SVD):
E=∑i=k+1dλi
即重建误差等于被丢弃的特征值之和。最小化重建误差 ⟺ 最大化保留的特征值之和 ⟺ 选择前 k 个最大的特征值对应的特征向量——与视角一的结论完全一致。
视角三:SVD
对中心化数据矩阵 X~∈Rn×d 做 SVD:
X~=UΣVT
其中 U∈Rn×n, Σ∈Rn×d, V∈Rd×d。
协方差矩阵变为:
C=n−11X~TX~=n−11VΣTUTUΣVT=n−11VΣTΣVT=VΛn−1ΣTΣVT
这正是 C=VΛVT 的特征分解。因此:
- V 的列(SVD 的右奇异向量)= C 的特征向量 = 主成分方向
- 特征值 λi=σi2/(n−1),其中 σi 是 X~ 的奇异值
- 数据在主成分上的坐标(即”得分”scores)为 X~Vk=UkΣk
SVD 视角的实践优势:直接对 X~ 做 SVD,不需要显式计算 d×d 的协方差矩阵——当 n≪d 时(如人脸图像,像素维度远大于样本数)这尤为重要。
信息保留率
保留前 k 个主成分的信息保留率(也叫方差解释率,explained variance ratio):
ρk=∑i=1dλi∑i=1kλi=∑i=1dσi2∑i=1kσi2
实践中常选 k 使 ρk≥0.95(保留 95% 以上的方差)。如果前几个特征值远大于其余,说明数据有很强的低维结构。
可视化:2D 数据的 PCA
下面的交互组件展示 PCA 在 2D 点云上的效果。数据呈椭圆分布——PC1(红色)沿方差最大的方向,PC2(紫色)沿正交方向。滑动 k 从 2 到 1,观察投影到 PC1 后数据如何压缩到一维,以及方差解释率如何变化。
PCA 可视化:主成分与投影
数据点 → 主成分方向 → 投影降维
2
方差解释率
PC1: λ₁ = 4.564PC2: λ₂ = 0.505
保留: 100.0%
当 k=1 时,绿色点是原始数据(浅蓝)投影到 PC1(红线)上的结果。虚线表示重建误差——每个点到其投影的距离。注意 PC1 方向的方差解释率已经很高,因为椭圆的长轴方向集中了大部分方差。
数值例子:手算 2D PCA
为了将上述理论落地,我们对一个具体的 2D 数据集手算完整的 PCA 流程。
数据(6 个二维点):
x1=(2,3),x2=(3,5),x3=(5,7),x4=(4,5),x5=(6,8),x6=(4,6)
第一步:中心化
均值:
xˉ=61(2+3+5+4+6+4,3+5+7+5+8+6)=(4,5.667)
中心化数据 x~i=xi−xˉ:
| 点 | x~1 | x~2 |
|---|
| 1 | −2 | −2.667 |
| 2 | −1 | −0.667 |
| 3 | 1 | 1.333 |
| 4 | 0 | −0.667 |
| 5 | 2 | 2.333 |
| 6 | 0 | 0.333 |
第二步:协方差矩阵
C=n−11X~TX~=51[∑x~i12∑x~i1x~i2∑x~i1x~i2∑x~i22]
计算各项:
- ∑x~i12=4+1+1+0+4+0=10
- ∑x~i1x~i2=5.333+0.667+1.333+0+4.667+0=12
- ∑x~i22=7.111+0.444+1.778+0.444+5.444+0.111=15.333
C=51[10121215.333]=[22.42.43.067]
第三步:特征分解
特征方程 det(C−λI)=0:
(2−λ)(3.067−λ)−2.42=0
λ2−5.067λ+(6.133−5.76)=0
λ2−5.067λ+0.373=0
λ=25.067±25.67−1.493=25.067±24.18=25.067±4.917
λ1=4.992,λ2=0.075
第四步:信息保留率
ρ1=λ1+λ2λ1=5.0674.992=98.5%
仅保留第一主成分就解释了 98.5% 的方差——这组数据几乎在一条直线上。
第五步:主成分方向
对 λ1=4.992,解 (C−λ1I)w=0:
[2−4.9922.42.43.067−4.992]w=[−2.9922.42.4−1.925]w=0
从第一行:−2.992w1+2.4w2=0,得 w2/w1=2.992/2.4=1.247。归一化后:
w1=1+1.24721(1,1.247)T≈(0.625,0.780)T
验证:Cw1=(2×0.625+2.4×0.780,2.4×0.625+3.067×0.780)=(3.122,3.892),而 λ1w1=4.992×(0.625,0.780)=(3.120,3.894)。微小差异来自四舍五入。 ✓
第一主成分方向约为 (0.625,0.780)——接近 45° 但稍偏向 x2 轴,与数据的线性趋势一致。
Eigenfaces:PCA 的经典应用
1991 年,Turk 和 Pentland 在 Eigenfaces for Recognition 中将 PCA 应用于人脸识别,这是 PCA 作为降维工具最著名的成功案例。
核心思想
一张灰度人脸图像可以看作一个高维向量。假设图像大小为 h×w 像素,将每张图展平(flatten)为一个 d=h×w 维的向量 xi∈Rd。例如,112×92 的图像对应 d=10304 维向量。
给定 n 张训练图像 x1,…,xn,Eigenfaces 方法的步骤是:
1. 计算均值脸
xˉ=n1∑i=1nxi
均值脸是所有训练图像的”平均长相”。如果将 xˉ 重新 reshape 为 h×w 图像,它看起来像一张模糊的、特征平均的脸。
2. 中心化
x~i=xi−xˉ
每张脸减去均值脸——剩下的是”与平均脸的偏差”。
3. 对中心化数据做 PCA
理论上应该计算 d×d 协方差矩阵 C=n−11X~TX~ 并求其特征向量。但 d 通常远大于 n(例如 d=10304, n=400),计算 10304×10304 矩阵的特征分解代价巨大。
Turk-Pentland 技巧:改为计算 n×n 的小矩阵 L=X~X~T。如果 Lvi=μivi,那么 ui=X~Tvi 是 C 的特征向量(可验证 Cui=n−1μiui)。这将计算量从 O(d3) 降到 O(n3)——当 n≪d 时大幅加速。
等价地,这就是对 X~ 做 SVD 的 SVD 视角。
4. 选取前 k 个主成分——“Eigenfaces”
前 k 个特征向量 w1,…,wk∈Rd,每个都是与原始图像同维度的向量。将它们 reshape 回 h×w 图像,就得到了 eigenfaces——它们看起来像幽灵般的人脸,每个捕获了面部变化的一个”模式”(如光照方向、五官轮廓、面部对称性等)。
5. 人脸表示与识别
任何人脸图像(中心化后)可以近似表示为 eigenfaces 的线性组合:
x~≈∑j=1kcjwj,cj=wjTx~
系数向量 c=(c1,…,ck)T∈Rk 是这张脸在”脸空间”(face space)中的 k 维坐标。原始的 d=10304 维空间被压缩到了 k(通常 k≈100-200)维。
识别时,计算查询图像的系数 cquery,与数据库中每张脸的系数比较欧氏距离,最近的就是识别结果。
为什么有效
Eigenfaces 之所以有效,本质上是因为人脸图像的协方差矩阵具有快速衰减的特征值谱。虽然图像名义上是万维向量,但人脸的结构约束(两只眼睛、一个鼻子、对称性等)使得有效维度远低于像素维度。前 100-200 个 eigenfaces 就能保留 95% 以上的方差——这与 Art. 5 矩阵微积分 中讨论的 intrinsic dimensionality 现象一脉相承。
PCA 的局限
PCA 强大但并非万能。了解其局限有助于在适当场景选择替代方法。
1. 只能捕获线性关系
PCA 找到的是方差最大的线性子空间。如果数据的内在结构是非线性的(如流形),PCA 可能表现不佳。
例如,一个弯曲的”瑞士卷”(Swiss Roll)数据集,PCA 投影会将本该分开的点混在一起,因为它只能找到全局的线性方向,无法跟踪局部的弯曲结构。
替代方法:Kernel PCA(将数据映射到高维特征空间再做 PCA)、t-SNE、UMAP 等非线性降维方法。Kernel 方法将在 Art. 20 Kernel 中深入讨论。
2. 对离群值敏感
协方差矩阵 C 中每个元素都涉及平方项(x~ix~j),因此离群值对 C 的影响被放大。少量离群点可能严重扭曲主成分方向。
替代方法:Robust PCA(Art. 12 Robust PCA)将数据矩阵分解为 X=L+S,其中 L 是低秩的”正常”部分,S 是稀疏的离群部分。
3. 正交约束导致缺乏可解释性
PCA 的主成分是正交的——这在数学上优雅,但在某些场景下导致主成分难以解释。例如,在文本挖掘中,主成分的元素有正有负,无法直接对应”主题”。
替代方法:NMF(非负矩阵分解)(Art. 9 NMF)要求因子矩阵的元素非负,产生的基向量更容易解释为”部分的叠加”(parts-based representation)。
4. 假设方差 = 信息
PCA 将”方差最大的方向”等同于”最重要的方向”。但在分类任务中,方差最大的方向可能是噪声方向,而区分类别的方向可能方差很小。
替代方法:LDA(Linear Discriminant Analysis)最大化类间方差与类内方差之比,而非总方差。
总结与展望
PCA 是分解工具的第一个经典应用——三件工具在这里完美交汇:
- 特征分解(Art. 2 特征分解):Cw=λw 是 PCA 的核心方程
- SVD(Art. 3 SVD):X~=UΣVT 提供了数值稳定的计算路径和 n≪d 时的加速
- 矩阵微积分(Art. 5 矩阵微积分):Lagrange 乘子法推导出 PCA = 协方差矩阵的特征值问题
关键公式回顾:
- 协方差矩阵:C=n−11X~TX~
- PCA = 特征值问题:Cw=λw,最大方差方向 = 最大特征值的特征向量
- SVD 与 PCA 的关系:λi=σi2/(n−1),主成分方向 = 右奇异向量 V,坐标 = UkΣk
- 信息保留率:ρk=∑i=1kλi/∑i=1dλi
- Eigenfaces:人脸 ≈ 均值脸 + eigenfaces 的线性组合
至此,我们完成了 Part 1 “拆”的核心弧线:从特征分解(结构)到 SVD(推广)到范数(度量)到微积分(优化)到 PCA(应用)。下一篇开始 Phase 3——随机化 SVD,当矩阵大到精确 SVD 不可行时,如何用随机采样以概率保证逼近前 k 个奇异向量。