跳到内容

7.2 PCA、SVD 与可视化:解释方差不等于保留任务信息

任务档案已经有数百列传感器统计。情报官想把它们投影到二维地图上,阿花却追问:“地图上挨得近,是否真的表示两次任务相似?”

降维可以压缩和可视化,但每种方法保留的结构不同。PCA 保留线性投影中的方差;t-SNE 主要保留局部相似概率。二维图不是原空间的无损缩影。

本课目标

  • 从中心化矩阵的 SVD 推导 PCA scores 与 components;
  • 解释最大方差与最小平方重构误差的等价性;
  • 区分中心化、标准化与 whitening;
  • 处理训练/测试、稀疏输入和大数据情形;
  • 正确阅读 PCA/t-SNE 图,不把可视化当聚类证据。

1. PCA 从中心化开始

设 $X\in\mathbb R^{n\times p}$,每列减去训练均值后得到 $X_c$。其奇异值分解:

$$ X_c=U\Sigma V^T. $$

  • $V$ 的列是 principal directions/loadings;
  • 前 $q$ 维 scores 为 $Z=X_cV_q=U_q\Sigma_q$;
  • 第 $j$ 个 component 的样本方差与 $\sigma_j^2/(n-1)$ 对应(采用常见无偏协方差约定)。

在正交线性投影中,前 $q$ 个方向同时:

  1. 最大化投影数据的总方差;
  2. 最小化 rank-$q$ 平方重构误差。

这两个性质来自 Euclidean squared-error 几何,不代表保留了任意下游任务的全部信息。

2. Explained variance ratio 回答什么

$$ \text{EVR}_j=\frac{\sigma_j^2}{\sum_r\sigma_r^2}. $$

前 $q$ 个 EVR 之和描述训练 snapshot 中,所选线性子空间保留了多少总方差。它不告诉你:

  • 小方差方向是否包含稀有故障信号;
  • 类别是否可分;
  • 因果变量是否保留;
  • 新时间窗口的方差结构是否相同;
  • 重构误差在各业务字段上是否可接受。

“保留 95% 方差”只是一个压缩规则候选,不是通用质量门槛。

3. 中心化不等于标准化

PCA 必须明确数据基准。常见 PCA 会中心化每列,但不会自动把各列缩放到单位方差。

  • covariance PCA:保留原单位的方差权重;
  • correlation PCA:先标准化,相当于让各列初始方差相同;
  • robust scaling:降低极端值对中心/尺度的影响,但目标也随之改变;
  • whitening:在投影后进一步把保留 component 缩放到单位方差,丢掉相对尺度信息。

若“载荷 1 千克”和“延迟 1 毫秒”的业务意义不同,标准化不是自动正确。应记录 scaler 参数和单位,并用下游目标验证。

4. 一个不泄漏的 PCA pipeline

python
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 需要回到原单位检查

保留 $q$ 个 components 后:

$$ \hat X_c=ZV_q^T. $$

若前面标准化过,应 inverse transform 后在原始单位评估。全局平均 MSE 可能掩盖:

  • 某个关键传感器误差过大;
  • 小群体/稀有状态被平滑掉;
  • 极值与边界条件重构失败;
  • 缺失填补模式被 component 捕获。

压缩应用还应测量存储、编码/解码延迟和下游性能,不只看 EVR。

6. Components 的符号与稳定性

若 $v$ 是 principal direction,$-v$ 也是同一个方向。因此两次运行中 PC1 全部符号相反不表示模型改变。

当相邻 singular values 很接近时,单个 component 可能在该子空间内旋转,loadings 排名不稳定;整体子空间却可能稳定。比较时可用 principal angles、subspace overlap 或 reconstruction,而不是逐列硬对齐符号。

极端值也会强烈影响均值与协方差。应先检查异常值究竟是错误、真实稀有状态还是目标信号。

7. 稀疏和大数据情形

文本词频矩阵中心化后通常变稠密。TruncatedSVD 不中心化,常用于稀疏矩阵;它与中心化 PCA 的统计含义不同,不能只因 API 相似就互换。

大数据可考虑:

  • randomized SVD:近似前几个 components;
  • IncrementalPCA:按 mini-batch 更新,降低一次性内存;
  • 分布式/流式矩阵分解;
  • 先做 feature hashing/selection,再评估近似误差。

求解器选择取决于 $n,p,q$、稀疏性、内存和所需精度。固定依赖版本并验证同一数据上的子空间与重构差异。

8. PCA 不是 feature selection

每个 component 通常混合多个原始列。它能减少共线方向、压缩噪声,但会降低字段级可解释性,并可能让数据治理更复杂。

如果要求“保留哪几列”或需要低延迟读取少量原字段,应比较 feature selection、稀疏 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 才是标准流程:直接对中心化 $X$ 做 SVD 通常更稳定。
  • 前两主成分就是最重要的两个原特征:component 是线性组合。
  • 95% EVR 等于保留 95% 业务信息:EVR 只度量训练方差。
  • 二维岛就是天然簇:t-SNE 布局受目标和参数影响。
  • PCA 没标签所以可在全数据 fit:进入评估 pipeline 时同样会泄漏。

练习

  1. 用 SVD 手算 scores、loadings、EVR 和 rank-$q$ reconstruction。
  2. 比较 covariance PCA 与先标准化后的 correlation PCA。
  3. 改变一个极端值,观察 components 和 reconstruction 怎样变化。
  4. 对同一数据运行多个 t-SNE 种子/perplexity,比较局部邻域而非岛的位置。

小结

PCA 在中心化数据上寻找最大方差的正交线性子空间,也给出最小平方重构。这个目标适合许多压缩与去噪任务,却不保证保留标签、因果或稀有事件信息。t-SNE 更适合探索局部邻域,二维布局不能直接当作聚类结论。

下一课处理“少数不同样本”:先区分训练数据中的 outlier 与部署时的新 novelty,再决定模型分数如何变成可运营的告警。

Built with VitePress | Software Systems Atlas