一张客户特征表有两百多列,从年龄、消费频次到各类行为的占比。喂给 AI 模型之前,得先解决维度问题:直接拿去做可视化或聚类,维度高得没法看,而且很多列彼此高度相关,同一条信息被数了很多遍。PCA 要做的事,是把这些列重新组合成少数几个新方向,让新方向尽量保留原始数据里的差异。这篇讲清它凭什么认定方差大就是信息多、主成分之间为什么必须垂直、保留几个才算够,以及它在哪些情况下会给出误导性的降维结果。
它造的是新坐标,不是删掉几列
降维这个词容易让人以为是从两百列里挑二十列留下,PCA 走的是另一条路。它把原始特征按不同权重加权求和,造出一组全新的坐标轴,再把每个样本投影到新坐标上。新轴有两个硬性要求:彼此垂直,也就是线性无关、不重复承载同一份信息;按承载的差异从大到小排序。于是第一主成分是数据铺得最开的那个方向,第二主成分在与它垂直的前提下尽量铺开,依次往后。原始两百列一列都没少,只是被重新表达成了二十个综合指标。
方差为什么被当成信息的代理
一个方向上如果所有样本的取值都差不多,那这个方向对区分样本没有贡献,丢掉它损失很小;反过来,取值铺得很开的方向,样本之间的差异主要体现在这里。PCA 用方差大小排序,逻辑就这么朴素。这个代理在无监督场景下通常成立,但它有个前提容易被忘掉:方差大不等于对你要做的事有用。做分类时,一个方差很小、却和标签高度相关的方向,会被 PCA 直接扔掉,因为 PCA 看不见标签。这也是为什么有人用 PCA 降维后再建模,效果反而变差。
保留几个,四种常见依据
主成分的个数是个需要判断的参数,没有唯一正解:
| 依据 | 怎么定 | 适合的场景 | 容易出的问题 |
|---|---|---|---|
| 累计解释方差 | 取到累计比例达到阈值,常见八成五到九成五 | 通用压缩,没有下游任务约束 | 阈值是拍的,高方差维度未必有用 |
| 碎石图拐点 | 画各主成分方差曲线,取开始变平的位置 | 想快速看数据结构 | 拐点不明显时判断很主观 |
| 下游任务效果 | 按不同维数分别训练,看验证集表现 | 后面接分类或回归 | 要多跑几轮,成本高但最靠谱 |
| 固定低维 | 直接压到二维或三维 | 可视化、给人看的图 | 损失可能很大,图好看不代表结构真实 |
四种依据里,只有下游任务效果直接对应你真正关心的事,其余都是代理指标。代理指标的价值在于快,用来缩小搜索范围,最终决定还是该回到任务表现上。
三个前提,缺一个结果就失真
PCA 的成立依赖几条不太显眼的假设。线性:它只找直线方向,数据如果铺在一个弯曲的曲面上,直线投影会把远处的点压到一起,结构被抹平。方差可比:各列的量纲必须统一,否则数值大的列会独占方差,主成分几乎等于那一列本身,这也是用之前要先标准化的原因。对极端值的敏感性:它优化的是平方和,少数离群点可以把整个方向拽偏。三条里最常被忽略的是标准化,很多人跑完发现第一主成分和某个金额字段几乎一样,原因就在这里。
它只看得见线性结构
PCA 的输出有两个天生的短板。主成分是人造的综合量,通常没法用业务语言解释——你能说第一主成分解释了四成方差,却很难说清它代表高价值年轻客户还是别的什么,需要可解释性时这就是硬伤。其次,它对非线性结构无能为力,瑞士卷那样的流形数据,PCA 展开后各层仍然叠在一起,这类场景通常换成 t-SNE 之类的非线性方法做可视化。还有一个常见误解要纠正:PCA 不能当特征选择用,每个主成分都是所有原始特征的线性组合,系数几乎不为零,想挑出几列应该用别的方法。它的数学来源是协方差矩阵的特征分解,想深究可以看 特征值与特征向量,工程实现上则常借助 奇异值分解,数值上更稳。
什么时候该用它
数据维度高、特征之间相关性明显、下游模型对维度敏感时,PCA 是个便宜有效的前置步骤。图像压缩是它的经典应用:把图像块投影到少数主成分再还原,丢掉的是高频细节,人眼往往察觉不到,压缩比也因此可以做得比较高。反过来,如果每一列都有明确业务含义、需要向人解释权重,或者数据结构明显是非线性的,就该慎重。判断标准可以简化成一句:你要的是压缩,还是解释?要压缩,PCA 合适;要解释,它给不了。
速查:PCA
- 在做什么:找方差最大的正交方向,把样本投影过去
- 三个必做:中心化、标准化、按方差排序取前几个
- 三个边界:只抓线性结构、主成分难解释、方差大不等于任务相关
- 常见误用:拿 PCA 当特征选择,或在测试集上重新拟合


