系列:《从小白到 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。特征值告诉我们矩阵在某方向上的伸缩,是否“重要”还需要下游任务和可解释性证据共同决定。