MATH ML Learning Lab
03 / 09
第 3 步 · 不转向的那几根轴

特征值、特征向量与谱分解Eigenvalues & Spectral Decomposition

矩阵把空间揉搓变形,绝大多数方向都被既拉又扭;只有极少数方向只被拉伸、不被偏转 —— 它们是这个变换的灵魂主轴。找到它们,就找到了协方差矩阵的主成分、图拉普拉斯的连通性,以及深层网络梯度爆炸与消失的谱半径。

20 分钟
阅读 + 实操
3 个
交互演示
进阶
难度

特征值与主轴 · 交互演示

第一特征值 λ₁3.00
第二特征值 λ₂1.00
二次型定性正定
① 特征向量寻宝探针:旋转青色探针 v,当紫色 Av 与 v 落在同一条直线上时,这个方向就是特征方向
探针角 θ 30° v 与 Av 夹角 0.0° |Av| 拉伸倍数 1.00
探针角度 30°
慢慢把探针转满一圈:多数角度下紫色 Av 都偏在探针的一侧,只有经过少数几个方向时两者严格共线,此时 |Av| 就是该方向的拉伸倍数(特征值)。把矩阵换成「旋转 90°」,你会发现整圈都找不到 —— 纯旋转没有实特征方向。
② 单位圆变椭圆:调节对称矩阵的三个元素,椭圆的两条主轴恰好是两组互相垂直的特征向量
a(左上) 2.0
b(对称项) 1.0
d(右下) 2.0
对称矩阵一定能把单位圆变成正椭圆:两条半轴长为 |λ₁|、|λ₂|,方向就是特征向量,而且互相垂直。椭圆面积等于 π·|det A| = π·|λ₁λ₂|。把 b 拖到 0,椭圆回正;把 a 拖成负数,第一主轴会翻到对面,二次型随之从正定变成不定。
③ 点云协方差与实时 PCA:在画布上点击加点、拖动改点,系统实时算出协方差矩阵与两条主成分轴
点数 n 0 第一主轴方差 λ₁ 0.00 解释方差比 0%
短轴方向的点几乎不影响第一主轴:把长条两端各加一个点,看 λ₁ 与解释方差比如何跃升。协方差用 1/n(总体形式)计算 —— numpy.cov 默认是 1/(n−1),两者只差一个 n/(n−1) 的系数,主轴方向完全相同。

为什么学这步?

机器学习里的高维数据几乎从不均匀地铺满整个空间:它们挤在少数方向上。协方差矩阵的特征向量告诉我们「数据往哪儿散得最开」,特征值告诉我们「散得有多开」—— 这就是降维、去噪、白化的全部依据。而在深度网络里,一层层雅可比矩阵相乘的放大倍数由谱半径决定:大于 1 就爆炸,小于 1 就消失。

📌 发生了什么

  • 特征方向只被拉伸不被偏转,拉伸倍数就是特征值
  • 对称矩阵的特征向量互相垂直,可以拼成一组正交坐标轴
  • 协方差矩阵的特征值 = 该方向的方差,特征向量 = 主成分方向

⚠️ 常见陷阱

  • 特征值只对方阵有定义,而且并非所有方阵都有实的特征方向(纯旋转就没有)
  • 把「特征值」和「特征向量」记混:前者是放大倍数(一个数),后者是方向(一个向量)
  • 只有对称矩阵才保证特征向量两两正交;一般方阵的特征向量可能并不垂直

本章小结

  • Av = λv:方向不变、长度乘以 λ,解 det(A − λI) = 0 得到 λ
  • 对称矩阵可正交对角化 A = QΛQᵀ,二次型 xᵀAx 的正负由 λ 的符号决定
  • 幂迭代反复施加 A 就能逼近最大特征值方向,收敛速度由 |λ₂/λ₁| 决定

📐 为什么对称矩阵的特征向量一定互相垂直?

设 u 与 w 是对称矩阵 A 的两个特征向量,分别属于不同的特征值 λ₁ 与 λ₂。分别用对方做内积,并利用 A 的对称性 u·(Aw) = (Au)·w:

移项得到 (λ₁ − λ₂)(u·w) = 0。既然 λ₁ ≠ λ₂,就只能有 u·w = 0,也就是两个特征向量严格垂直。把这两条互相垂直的单位向量摆成矩阵 Q 的两列,就得到正交谱分解 A = QΛQᵀ —— 几何上等于「转到一个不相关的坐标系 → 沿各轴独立缩放 → 转回来」,这正是 PCA 白化与图像压缩的做法。

📊 特征值就是方差:协方差矩阵的几何

把一列数据点先减去均值(中心化),再算协方差矩阵 C = (1/n)Σ(xᵢ−μ)(xᵢ−μ)ᵀ。它是对称半正定的,所以特征值恒为非负数,可以读成「方差」:

单位向量 u 上的投影方差等于二次型 uᵀCu,而它的最大值正好落在最大特征值的特征向量上 —— 这就是「第一主成分」的定义。把特征值按从大到小排列,λ₁/(λ₁+λ₂) 就是第一主轴的解释方差比:它接近 1 说明数据其实是一维的,压到一条线上也不损失多少信息。

💻 对称特征分解与幂迭代核心

// 对称 2x2 的闭式特征分解:先对称化,再用旋转角公式
function eigenSymmetric2(M) {
  var a = M.a, b = (M.b + M.c) / 2, d = M.d;
  var tr = a + d, diff = a - d;
  var rad = Math.sqrt(diff * diff + 4 * b * b);
  var l1 = (tr + rad) / 2, l2 = (tr - rad) / 2;   // l1 >= l2
  var v1 = normalize([b, l1 - a]);                // 属于 l1 的单位特征向量
  return { values: [l1, l2], vectors: [v1, [-v1[1], v1[0]]] };
}
// 幂迭代:反复施加 A 并归一化,逼近最大特征值方向
function powerIter(A, steps) {
  var v = [1, 0.37];                              // 随便挑一个非零起点
  for (var k = 0; k < steps; k++) {
    var w = [A.a * v[0] + A.b * v[1], A.c * v[0] + A.d * v[1]];
    var n = Math.hypot(w[0], w[1]);
    if (n < 1e-14) break;                         // 零矩阵:任何方向都是特征方向
    v = [w[0] / n, w[1] / n];
  }
  var Av = [A.a * v[0] + A.b * v[1], A.c * v[0] + A.d * v[1]];
  return { vector: v, value: v[0] * Av[0] + v[1] * Av[1] };  // 瑞利商
}

📚 参考文献与延伸阅读

  • Strang, Introduction to Linear Algebra, Ch. 6 「Eigenvalues and Eigenvectors」 — 特征值、对角化与对称矩阵谱定理的经典讲法
  • Hastie, Tibshirani & Friedman (2009), The Elements of Statistical Learning, §14.5 「Principal Components Analysis」 — 从协方差矩阵特征分解到解释方差比的完整推导
  • Golub & Van Loan, Matrix Computations, Ch. 7-8 — 幂迭代、QR 迭代与对称特征问题的数值算法
  • 对照阅读 → ML 第 11 步 · PCA 降维:本章主轴的实际应用;数学第 14 步 · 散度与源汇:图拉普拉斯的特征值为什么能决定图的连通性

📝 课后练习

检验你的理解——答对为止