7 · 矩阵分解总览
把 LU、QR、Cholesky、特征分解、SVD 放在一起对比,遇到问题时能选对工具。
前面各节出现了多种分解(LU、QR、特征、SVD)。本节把它们放在一起对比,让你遇到问题时能「选对工具」。一句话:分解就是把一个复杂矩阵拆成几个结构简单、易于计算的矩阵乘积。
一、五大分解速查表
| 分解 | 形式 | 适用矩阵 | 主要用途 |
|---|---|---|---|
| LU | $\mathbf{A}=\mathbf{L}\mathbf{U}$ | 方阵 | 解线性方程组、求行列式 |
| QR | $\mathbf{A}=\mathbf{Q}\mathbf{R}$ | 任意(列无关) | 最小二乘、正交化 |
| Cholesky | $\mathbf{A}=\mathbf{L}\mathbf{L}^\top$ | 对称正定 | 协方差、最优化(比 LU 快一倍) |
| 特征分解 | $\mathbf{A}=\mathbf{P}\mathbf{\Lambda}\mathbf{P}^{-1}$ | 可对角化方阵 | PCA、动力系统、幂运算 |
| SVD | $\mathbf{A}=\mathbf{U}\mathbf{\Sigma}\mathbf{V}^\top$ | 任意矩阵 | 降维、压缩、伪逆、推荐 |
二、怎么选
- 解方程 ,方阵 → LU;如果 对称正定(如最小二乘的正规方程)→ Cholesky。
- 超定系统 / 最小二乘 → QR(比正规方程稳)。
- 要特征值 / 主方向 / 稳态,且矩阵是方的对称的 → 特征分解。
- 非方阵、降维、压缩、最通用、最稳 → SVD(万能但最贵)。
三、一个统一视角
这些分解都在回答同一个问题的不同侧面:怎么把一个变换拆成「旋转·缩放·旋转」或「简单×简单」这种易算的组合。 SVD 是最普适的那个,其他可看作特殊情形下的高效版本。
四、NumPy / SciPy 代码
import numpy as np
from scipy.linalg import lu, cholesky, qr
A = np.array([[4.0, 2.0], [2.0, 3.0]]) # 对称正定
P, L, U = lu(A) # LU
Q, R = qr(A) # QR
Lc = cholesky(A, lower=True) # Cholesky
vals, vecs = np.linalg.eig(A) # 特征分解
Uu, S, Vt = np.linalg.svd(A) # SVD
print("Cholesky 还原:\n", Lc @ Lc.T) # ≈ A
print("奇异值:", S, " 特征值:", vals)
五、动手想一想
- 你要做一个推荐系统,评分矩阵是 10万×2万且极稀疏,选哪种分解?
- 协方差矩阵总是对称半正定,这提示你用哪两种分解都合适?
答案:(1) 截断 SVD / 矩阵分解(隐因子模型),只保留少数奇异值即可补全稀疏评分。(2) Cholesky(解线性系统更快)与特征分解(PCA),二者都利用了对称正定结构。