【第60期】特征值不是重要性:Python 特征分解与 PCA 的前置判断

2 阅读3分钟

系列:《从小白到 AI 大模型开发工程师的进阶之路》 技术点:AI-0214 特征值与特征向量 主人公:小蓝伞|环境:Python 3.13.9、NumPy 2.3.5

小蓝伞把最大特征值直接当成“最重要特征”,却没有先标准化数据;收入列用元,年龄列用年,第一主成分几乎被收入的量纲占据。特征值描述某个方向的伸缩因子,特征向量描述方向,只有在明确矩阵、中心化和尺度后才有统计解释。

结论与方案

对称协方差矩阵优先使用 np.linalg.eigh;PCA 前至少中心化,量纲差异明显时标准化。不要从任意矩阵的特征值大小直接推出业务重要性,也不要把特征向量的符号当成固定含义。

做法适用风险
对角矩阵演示建立方向直觉不能代表真实数据
eigh 协方差矩阵PCA 前置、对称矩阵需先处理尺度
未标准化直接 PCA同量纲数据大单位列支配方差

最小复现

import numpy as np
​
A = np.diag([2., 3.])
values, vectors = np.linalg.eigh(A)
assert np.allclose(values, [2., 3.])
for i in range(2):
    assert np.allclose(A @ vectors[:, i], values[i] * vectors[:, i])

正常判据是残差接近 0;失败输入是把原始量纲差异很大的两列直接做协方差分解,再与 StandardScaler 后的结果比较,若主方向剧烈变化,必须在报告中解释原因。

误判、实验与边界

误判是“最大特征值等于最重要业务字段”;定位证据是标准化前后方差贡献率和主方向变化;根因是把几何方向解释成字段排名。实验固定随机种子,生成两列不同尺度的数据,分别中心化、标准化后计算特征值,重复 5 次取平均。该实验证明尺度敏感性,不证明 PCA 一定提升下游模型效果。非对称矩阵、复数特征值和大规模稀疏数据要使用对应算法。

验证清单与下一期

  • 记录中心化、标准化、协方差或相关系数矩阵的选择。
  • 检查 A @ v 与 lambda*v 的残差,并按特征值降序排列组件。
  • 报告解释方差比,同时保留原始特征尺度说明。
  • 不把符号方向、单次样本结果解释成因果关系。

第 60 期完成从数据结构到线性代数前置的衔接;后续进入 SVD、PCA 与机器学习流程时,仍要沿用“先写约束,再看分解”的方法。

官方资料

实验记录与工程追问

做 PCA 前要先回答三个问题:数据是否已中心化,特征是否同量纲,协方差矩阵是否应改用相关系数矩阵。只报告“保留两个主成分”是不够的,还要报告解释方差比、标准化方式和训练数据范围。线上推理必须复用训练阶段的均值和尺度,不能每个请求单独标准化,否则坐标系会漂移。

特征向量乘以 -1 仍是同一个方向,因此不同库或不同运行次序出现符号相反不代表结果错误。排序也可能因接近的特征值而不稳定,不能把微小差异解释成业务排名。验证时用重构误差、子空间夹角和残差,而不是逐元素比较向量。

当特征数远大于样本数、数据稀疏或需要在线增量更新时,普通特征分解未必合适,应评估 SVD、随机 PCA 或增量 PCA。特征值告诉我们矩阵在某方向上的伸缩,是否“重要”还需要下游任务和可解释性证据共同决定。