7.2 PCA、SVD 与可视化:解释方差不等于保留任务信息
降维可以压缩和可视化,但每种方法保留的结构不同。PCA 保留线性投影中的方差;t-SNE 主要保留局部相似概率。二维图不是原空间的无损缩影。
本课目标
- 从中心化矩阵的 SVD 推导 PCA scores 与 components;
- 解释最大方差与最小平方重构误差的等价性;
- 区分中心化、标准化与 whitening;
- 处理训练/测试、稀疏输入和大数据情形;
- 正确阅读 PCA/t-SNE 图,不把可视化当聚类证据。
1. PCA 从中心化开始
设
的列是 principal directions/loadings; - 前
维 scores 为 ; - 第
个 component 的样本方差与 对应(采用常见无偏协方差约定)。
在正交线性投影中,前
- 最大化投影数据的总方差;
- 最小化 rank-
平方重构误差。
这两个性质来自 Euclidean squared-error 几何,不代表保留了任意下游任务的全部信息。
2. Explained variance ratio 回答什么
这个比例要求总方差非零;
前
- 小方差方向是否包含稀有故障信号;
- 类别是否可分;
- 因果变量是否保留;
- 新时间窗口的方差结构是否相同;
- 重构误差在各业务字段上是否可接受。
“保留 95% 方差”只是一个压缩规则候选,不是通用质量门槛。
下面是可直接运行的 Python 3 / NumPy 例子,未做标准化,只保留最大方差方向:
import numpy as np
X = np.array([[-10., -1.], [-10., 1.], [10., -1.], [10., 1.]])
y = (X[:, 1] > 0).astype(int)
Xc = X - X.mean(axis=0)
_, singular, Vt = np.linalg.svd(Xc, full_matrices=False)
Z = Xc @ Vt[:1].T
print("retained variance:", round(singular[0] ** 2 / np.sum(singular ** 2), 4))
print("projected points:", Z.ravel())
print("labels:", y)保留方差约为 0.9901,但投影后每个位置都同时对应两类;被丢掉的第二维却能完美区分标签。SVD 的投影符号可能反转,不影响这个结论。
3. 中心化不等于标准化
PCA 必须明确数据基准。常见 PCA 会中心化每列,但不会自动把各列缩放到单位方差。
- covariance PCA:保留原单位的方差权重;
- correlation PCA:先标准化,相当于让各列初始方差相同;
- robust scaling:使用稳健的中心/尺度估计,但后续普通 PCA 仍优化平方误差,不能因此称为稳健 PCA;
- whitening:在投影后进一步把保留 component 缩放到单位方差,丢掉相对尺度信息。
若“载荷 1 千克”和“延迟 1 毫秒”的业务意义不同,标准化不是自动正确。应记录 scaler 参数和单位,并用下游目标验证。
4. 一个不泄漏的 PCA pipeline
下面是 Python 3 / scikit-learn 1.9.0 片段,需提供列一致的有限值数值矩阵 X_train、X_valid;训练行至少两行,总方差非零:
from sklearn.decomposition import PCA
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
reducer = Pipeline([
("scale", StandardScaler()),
("pca", PCA(n_components=0.95, svd_solver="full")),
])
Z_train = reducer.fit_transform(X_train)
Z_valid = reducer.transform(X_valid)
pca = reducer.named_steps["pca"]
print("components:", pca.n_components_)
print("training EVR:", pca.explained_variance_ratio_.sum())训练均值、尺度和 components 只能在 train 上拟合。先在全数据做 PCA 再交叉验证,会把 validation/test 的协方差结构带入 feature representation。
若用 PCA 为监督模型降维,把整个 pipeline 放入每个 CV fold;component 数也在内层 validation 选择。
5. Reconstruction 需要回到原单位检查
保留
若前面标准化过,应 inverse transform 后在原始单位评估。全局平均 MSE 可能掩盖:
- 某个关键传感器误差过大;
- 小群体/稀有状态被平滑掉;
- 极值与边界条件重构失败;
- 缺失填补模式被 component 捕获。
压缩应用还应测量存储、编码/解码延迟和下游性能,不只看 EVR。
6. Components 的符号与稳定性
若
当相邻 singular values 很接近时,单个 component 可能在该子空间内旋转,loadings 排名不稳定;整体子空间却可能稳定。比较时可用 principal angles、subspace overlap 或 reconstruction,而不是逐列硬对齐符号。
极端值也会强烈影响均值与协方差。应先检查异常值究竟是错误、真实稀有状态还是目标信号。
7. 稀疏和大数据情形
显式中心化稀疏词频矩阵通常会使它变稠密。TruncatedSVD 不中心化,适合稀疏输入,但统计含义不同于中心化 PCA。部分 PCA 求解器可隐式处理中心化,应核对具体 solver,而不是认定所有稀疏输入都必须先转稠密。
大数据可考虑:
- randomized SVD:近似前几个 components;
- IncrementalPCA:按 mini-batch 更新,降低一次性内存;
- 分布式/流式矩阵分解;
- 先做 feature hashing/selection,再评估近似误差。
求解器选择取决于
8. PCA 不是 feature selection
每个 component 通常混合多个原始列。它能减少共线方向、压缩噪声,但会降低字段级可解释性,并可能让数据治理更复杂。
若部署要求只读取少量原字段,应使用 feature selection,或明确约束参与计算的字段组。Sparse PCA 和 autoencoder 学的是表示,本身不保证减少需要读取的输入列。
9. t-SNE 保留的是局部相似概率
t-SNE 把高维邻域相似度与低维邻域相似度转成概率分布,并优化两者之间的 KL divergence。目标非凸,初始化、perplexity、learning rate 和随机种子都会影响图形。
阅读 t-SNE 图时要克制:
- 近邻结构通常比全局距离更可信;
- 两个“岛”之间很远不等于原空间中同样远;
- 岛的面积/密度不等于原簇规模或方差;
- 颜色分离可能受参数、标签选择和前处理影响;
- 多次运行出现不同布局很常见。
scikit-learn 的 TSNE 主要提供 fit_transform,不是像 PCA 那样学习一个标准线性 transform 给任意新样本。若需要稳定部署 embedding,应选择支持 out-of-sample mapping 的方法并单独验证。
高维输入常先用 PCA(dense)或 TruncatedSVD(sparse)降到较合理维度,再运行 t-SNE,以降低噪声与计算成本。具体维数不是固定真理。
10. 怎样验证降维
按目的选择证据:
- 压缩:held-out reconstruction、字段级误差、存储与延迟;
- 去噪:下游模型在严格 split 上的性能与稳定性;
- 可视化:多种参数/种子、邻域保真度、代表性抽样;
- 检索:held-out neighbor recall 与业务相关性;
- 聚类前处理:聚类稳定性与下游行动,而非图好不好看。
若标签只用于最终评价,可以检验降维是否保留任务信息;若用标签挑 representation,它已成为 supervised model selection,应在嵌套 validation 中承认这一点。
常见误区
- PCA 对协方差矩阵做 SVD 才是标准流程:直接对中心化
做 SVD 通常更稳定。 - 前两主成分就是最重要的两个原特征:component 是线性组合。
- 95% EVR 等于保留 95% 业务信息:EVR 只度量训练方差。
- 二维岛就是天然簇:t-SNE 布局受目标和参数影响。
- PCA 没标签所以可在全数据 fit:进入评估 pipeline 时同样会泄漏。
练习
- 用 SVD 手算 scores、loadings、EVR 和 rank-
reconstruction。 - 比较 covariance PCA 与先标准化后的 correlation PCA。
- 改变一个极端值,观察 components 和 reconstruction 怎样变化。
- 对同一数据运行多个 t-SNE 种子/perplexity,比较局部邻域而非岛的位置。
小结
PCA 在中心化数据上寻找最大方差的正交线性子空间,也给出最小平方重构。这个目标适合许多压缩与去噪任务,却不保证保留标签、因果或稀有事件信息。t-SNE 更适合探索局部邻域,二维布局不能直接当作聚类结论。
下一课处理“少数不同样本”:先区分训练数据中的 outlier 与部署时的新 novelty,再决定模型分数如何变成可运营的告警。