机器学习基础

PCA 降维:把高维压扁

14 分钟

本章最后一节讲降维。它解决的是前面反复出现的问题——维度太高时,距离失效、计算变慢、还容易过拟合。


核心思想:找最重要的几个方向

数据在高维空间里,往往并不「填满」整个空间,而是集中在一个低维的子空间附近。

PCA 做的事:找出数据变化最大的几个方向,把数据投影上去。

为什么是「变化最大」:方差大的方向包含更多信息。如果某个方向上所有点都挤在一起(方差接近 0),那这个维度几乎没提供区分度,扔掉损失很小。


四个步骤

① 数据中心化(每个特征减去自己的均值)
② 计算协方差矩阵
③ 对协方差矩阵做特征值分解
④ 取前 k 大特征值对应的特征向量,作为新的坐标轴

特征值的含义:第 个特征值 就是数据在第 个主成分方向上的方差。

解释方差比

这直接告诉你:留下 维,保住了原始信息的百分之多少。


k 怎么选

from sklearn.decomposition import PCA
pca = PCA(n_components=0.95)     # 直接指定「保留 95% 的方差」
X_new = pca.fit_transform(X)
print(pca.n_components_)          # 看看实际用了多少维
print(pca.explained_variance_ratio_.cumsum())

n_components=0.95 这个写法很好用——不用自己试,让它算出保住 95% 信息需要几维。

实践中的经验:很多高维数据,前 10% 的主成分就能保住 90% 以上的方差。


两个必须注意的点

① 必须先标准化

PCA 找的是方差最大的方向,量纲大的特征方差天然大,会直接主导主成分。所以除非所有特征本来就同量纲,否则一律先 StandardScaler

② 主成分不可解释

降维后的新特征是原始特征的线性组合(比如 身高 体重 年龄),没有业务含义

这是 PCA 最大的代价:换来了紧凑,失去了可解释性。在需要向别人解释模型的场景里,要慎用。


PCA 的四个典型用途

用途 说明
可视化 降到 2 或 3 维,把高维数据画出来看
加速训练 特征从 1000 降到 50,模型训练快一个数量级
去噪 小特征值方向常对应噪声,丢掉反而更干净
解决共线性 主成分之间天然正交,互不相关

降维不止 PCA

方法 特点
PCA 线性、快、可逆、可用于新数据
t-SNE 非线性,可视化效果极好,但只能用于可视化,不能变换新样本
UMAP 类似 t-SNE 但更快,能保留更多全局结构
自编码器 用神经网络学非线性降维,可处理极复杂结构

一条实践建议:可视化用 t-SNE 或 UMAP,做预处理用 PCA。 两者目的不同,不要混用。


本章小结

这一章补上了深度学习之外的另一半机器学习:

类别 模型 一句话
树模型 决策树 会问问题,可解释
随机森林 很多树投票,降方差
梯度提升 树接力修错,降偏差,表格数据之王
距离模型 KNN 近朱者赤,要缩放
概率模型 朴素贝叶斯 独立假设,文本首选
间隔模型 SVM 最宽的街道,核技巧
无监督 k-means 找球形簇
PCA 找方差最大的方向

一条选型经验:拿到表格数据,先跑梯度提升(LightGBM)和随机森林当基线;图像语音文本走深度学习;小样本且维度不高可以试 SVM。

练习:为什么 PCA 之前必须标准化?如果不做,一个以「元」为单位的收入特征会对主成分产生什么影响?

小纸条

PCA 找的是什么方向,为什么是这个方向?它最大的代价是什么?可视化该用 PCA 还是 t-SNE?

登录 后可看答案