M2-058M2: Classical Machine LearningDimensionality ReductionEasy
Mastery:
Dimensionality Reduction: PCA 与 SVD 的关系是什么?
📐 Mathematical Definition
⚡ 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.