在面对高维图像、海量特征或大模型嵌入向量(Embeddings)时,我们如何将庞大的高维数据压缩降维,同时尽可能保留最关键的信息?
答案就是奇异值分解(SVD)与主成分分析(PCA)。
PCA 降维就像用相机把三维世界的物体拍成二维照片:
点击放大查看图:SVD 几何三步曲:旋转、沿坐标轴拉伸与二次旋转分解图任何矩阵 都可以唯一分解为:
其中:
SVD 的奇异值衰减非常迅速。按大小保留前 个最大的奇异值,构造截断矩阵:
根据 Eckart-Young-Mirsky 定理, 是在 Frobenius 范数(以及 2 范数)意义下最优的 阶低秩逼近矩阵。
重建误差与剩余奇异值直接关联:
在下方的实验室中,您可以调整保留的奇异值阶数 ,观察数据的解释方差与重构误差:
💡 作用说明:调整截断阶数 $k$。$k=1$ 压缩率最高(只保留第1个主特征成分);$k=4$ 无损全量保留。
PCA 的目标是将零均值化数据 投影到低维正交方向 上,使得投影后数据的方差最大化:
构造拉格朗日函数,求导后得到:
因此,PCA 的主成分方向恰好就是协方差矩阵 的特征向量,也就是数据矩阵 的右奇异向量 ! 每个奇异值与解释方差的关系为:。
假设我们有 3 个二维样本点:,将其降到 1 维:
减去均值后的中心化数据矩阵 :
代入 求解特征向量 :
成功将三组二维特征点精准无损地压缩为 1 维标量坐标!
在工程实践中,绝不能在全量数据(包含训练集与测试集)上统一做 fit_transform!否则会将测试集的分布信息泄露到训练集中,造成数据泄露(Data Leakage)。
正确的做法是:只在训练集上 fit(计算均值与主成分方向),然后将学习到的变换应用(transform)到训练集和测试集中。
| 现象 | 先问什么 | 处理方式 |
|---|---|---|
| PCA 效果差或方向偏斜 | 降维前是否完成了特征中心化(减去均值) | 必须在 PCA 降维前执行 X - mean;若特征量纲差异极大,还需进行标准化(StandardScaler) |
| 数据泄露(Data Leakage) | 是否在全量数据上执行了 fit_transform | 切勿对包含 Test 的全量数据统一 fit!必须只在 Train 集 fit 提取 mean 与主方向 |
| 认为“PCA 能说明因果” | 降维主方向是否等于因果特征 | 否!PCA 方差最大的方向仅代表数据在空间里的分布离散度,并不保证与监督学习的目标标签 强相关 |
fit 和 transform 的 PCA 类。fit PCA。shape 是什么?SVD 分解中 与 的阶数分别是多少?X_test_pca = pca.transform(X_test) 使用的是 pca.mean_(即训练集的均值)而不是 np.mean(X_test)?🎉 恭喜你成功完成线性代数的全部课程!
你已经完整掌握了向量、矩阵、几何变换、Gram-Schmidt、正规方程最小二乘、特征值分解、SVD 与 PCA 降维。请准备迈入下一个专项 06. 微积分与自动求导原理,学习偏导数、梯度向量与深度学习自动求导(Autograd)机制。