M2-058M2: Classical Machine LearningDimensionality ReductionEasy
Mastery:

Dimensionality Reduction: PCA 与 SVD 的关系是什么?

📐 Mathematical Definition
X=UΣV⊤⇒PCs=V, λi=σi2/nX=U\Sigma V^\top\Rightarrow \text{PCs}=V,\ \lambda_i=\sigma_i^2/n
⚡ Executive Summary
Core Concept: 对中心化矩阵 X 做 SVD,右奇异向量即主成分方向,奇异值平方/n 即方差。

📌 Key Takeaways

  • •
    SVD 数值更稳,避免显式构造协方差矩阵
  • •
    也可用随机化 SVD 加速

📐 Mathematical Derivations

两者的数学等价性:对中心化矩阵 X(n×p)做 SVD:X=UΣVᵀ,其中 U(n×r)是左奇异向量、V(p×r)是右奇异向量、Σ 是对角奇异值矩阵。则协方差矩阵 Σ_cov=XᵀX/n=V(Σ²/n)Vᵀ——即 <strong>V 的列就是协方差矩阵的特征向量(主成分方向),特征值为 σᵢ²/n</strong>。因此对 X 做 SVD 与对 XᵀX 做特征分解给出相同的主成分,但<strong>数值稳定性不同</strong>:① 直接构造 XᵀX 会把条件数<strong>平方</strong>(κ(XᵀX)=κ(X)²),放大舍入误差;② SVD 算法(Golub-Kahan 双对角化)直接作用于 X,条件数不平方,故更稳;③ 当 p>n(宽数据)时,XᵀX(p×p)很大且奇异,而 SVD 可只计算前 k 个奇异值(经济型 SVD),复杂度 O(npk) 远低于 O(p³)。

🏭 Production Trade-offs

实践要点:① <strong>实现建议</strong>——用 <code>np.linalg.svd(X, full_matrices=False)</code> 或 sklearn 的 PCA(内部用 SVD),<strong>不要</strong>手写 XᵀX 的特征分解。② <strong>符号不确定性</strong>——SVD 与特征分解的特征向量符号是任意的(±),故不同实现的 PCA 结果可能符号相反但等价;比较时需对齐符号。③ <strong>随机化 SVD</strong>——当 n 和 p 都很大但只需前 k 个成分时,随机化算法(Halko et al. 2011)用随机投影 + 幂迭代近似前 k 个奇异向量,复杂度 O(np log k),比精确 SVD 快得多;sklearn 的 <code>PCA(svd_solver='randomized')</code> 即此。④ <strong>增量 PCA</strong>——<code>IncrementalPCA</code> 支持小批量处理超出内存的数据。⑤ <strong>稀疏 PCA</strong>——加 L1 约束使主成分稀疏(可解释),但需迭代求解(非凸)。⑥ <strong>Truncated SVD vs PCA</strong>——sklearn 的 <code>TruncatedSVD</code> 不中心化(适合稀疏矩阵/TF-IDF),而 <code>PCA</code> 会中心化;用稀疏数据时注意区分。
⚠️ Common Interview Pitfalls
  • ✕
    手写 XᵀX 特征分解(条件数平方)
  • ✕
    在大数据上用精确 SVD 而非随机化 SVD
🎯 Interviewer Follow-ups
  • ?
    为什么直接对 X 做 SVD 比求协方差特征分解更稳?
  • ?
    随机化 SVD 的适用场景?
📚

Associated Knowledge Base Guides & Mindmaps

Explore the comprehensive technical article, exam cards, and global architecture tree.

← PreviousM2-057: Dimensionality Reduction: 解释 PCA 的目标与实现步骤。📋Back to BankNext →M2-059: Dimensionality Reduction: PCA 有哪些局限?什么时候不该用 PCA。