卷 III · 备料CH 12工位 12/24

Step 4(5%):降维与投影,PCA 到底在做什么

工位 STEP 4.1 / 4.2 归约数据 · 投影数据 5% 评分员在找:你做了归约(哪三条路选了哪条)、给了一个解释方差的数字、以及一张投影图。5% 意味着这一节值一页,不值一周。

Step 4 是九步里权重最小的一步(5%),而它经常被写成最长的一节——因为 PCA 听起来高级、画出来好看。这一章的目标有两个:给你一页纸的标准答案,以及让你看清 PCA 的一个反直觉性质。那个性质是:它会给一列纯噪声单独开一个主成分,并声称它解释了 14.2% 的方差。

Step 4.1Step 4.2PCA解释方差什么时候不要降维

归约有三条路,PCA 只是其中一条

KDD 对这一步的定义是「data reduction and projection:finding useful features to represent the data depending on the goal of the task」。注意「有用的特征」这个说法——它没规定必须用 PCA。三条路都算归约,选一条并说明理由就够:

做什么优点代价
① 减列:特征选择删掉与目标无关或彼此高度冗余的列(相关系数筛选、方差筛选、树模型的特征重要度、逐步回归)列名还在,Step 8 可以解释可能丢掉「弱但有用」的列
② 换列:降维PCA、因子分析、SVD——把 N 列线性组合成 K 个新轴保留大部分方差,解决共线性新列没有业务含义,解释性大幅下降
③ 减行:抽样随机/分层抽样,或按时间窗截取算得快损失样本量;BDAS 那次不该用(大数据的卖点就是不抽样)

对这门课的建议:以 ① 为主,用 ② 做一个补充分析。理由是 Step 8 占 20%,而 Step 8 要的是解释——用了 PCA 之后你只能说「第一主成分升高时风险下降」,而说不出「疫苗覆盖率提高 10 个百分点时风险下降多少」。用 5% 的分换掉 20% 的解释力,不划算。

但你还是要会 PCA,因为它是这一步的标准答案

下面这台真的做了 PCA:把 7 个数值列标准化,算协方差矩阵,用 Jacobi 旋转求特征分解,然后投影。三个标签页分别是碎石图、载荷、二维投影:

读数:

主成分特征值 λ解释方差累计它其实是什么
PC14.89770.0%70.0%所有载荷同号且接近——这是一个「综合发展水平」轴
PC20.99614.2%84.2%载荷 0.999 全压在 spend——那是一列纯噪声
PC30.3154.5%88.7%识字率与疫苗覆盖的对比(载荷一正一负)

PC1 吃掉 70%:这是好消息

7 列里第一个主成分就解释 70% 的方差,说明这些列本来就在讲同一件事:人均 GDP 高的地方,医生多、水干净、识字率高、城镇化率高。这就是共线性的另一种说法——第 20 章会展示它如何让回归系数的符号翻转。

报告里的 4.1 就写这个数:「7 个数值特征经标准化后做主成分分析,前 2 个主成分累计解释 84.2% 的方差(PC1 70.0%,PC2 14.2%),说明原始特征存在显著共线性。」一句话,带三个数字,这一节的分就到手了。

PC2 是一个陷阱:解释方差高 ≠ 有用

spend(卫生支出占 GDP 比)与目标的相关系数只有 −0.096,是我故意放进示例数据的无关列。而 PCA 给了它一个专属主成分,还标注「解释 14.2% 的方差」。

原因不难理解,但很容易忘:PCA 是无监督的,它从来没看过目标列。它找的是「数据在哪个方向上变化最大」,而一列谁也不相关的噪声,必然自成一个方向。

切到「二维投影」那个标签页,这件事变得一目了然:红点(未达标)和绿点(达标)在横轴(PC1)上几乎完全分开,在纵轴(PC2)上完全混在一起。PC2 解释了 14.2% 的方差,对预测的贡献接近零。

⚠ 用 PCA 的四条纪律
  1. 必须先标准化。PCA 基于协方差,量级大的列会独吞第一主成分。(如果不标准化,gdp_pc 的方差是几百万,PC1 会 100% 是它。)
  2. 只在训练集上 fit。和填补、缩放一样——在全量上做 PCA 再划分,是标准的预处理泄漏。
  3. 不要在树模型前用。树本来就不受量级和共线性影响,PCA 只会让它失去可解释的分裂条件。「PCA + 随机森林」几乎总是比「原始特征 + 随机森林」更差且更难解释。
  4. 保留几个主成分要有判据。三种常见判据:累计解释方差 ≥ 80%(本例取 2 个)、特征值 > 1(Kaiser 准则,本例 PC1 的 4.897 和 PC2 的 0.996——PC2 差一点点,这个边界情况值得在报告里提一句)、碎石图的拐点。写出你用了哪条。

4.2「投影」最省事的交付物

Step 4.2 要求 project the data。它最省事也最有效的交付物就是那张二维投影散点图,按目标类别上色——因为它同时完成三件事:

  • 证明你做了投影(4.2 的要求);
  • 直观展示「这个问题可不可分」:如果两类在 PC1–PC2 平面上明显分开,你的分类任务大概不难;如果完全混在一起,那 Step 6 要准备接受较低的指标,并在 Step 8 解释为什么;
  • 它可以直接复用到 Step 8.2 的可视化里。

本例的图告诉你:这个任务在 PC1 上就基本可分了——这与后面第 15 章那棵深度 1 的决策树(单靠人均 GDP 一刀切就有 0.861 的测试准确率)完全一致。两处独立的证据互相印证,这种呼应写进报告非常有说服力。

⇄ Step 4 在三条产线上怎么做
ISASOSASBDAS
PCAPCA/Factor 节点(自带碎石图与载荷表,输出可直接截图)PCA(n_components=2)explained_variance_ratio_pyspark.ml.feature.PCA(k=2, inputCol='features')
特征选择Feature Selection 节点、CHAID 的重要度SelectKBestfeature_importances_树模型的 featureImportances
标准化Transform 节点 / Auto Data PrepStandardScalerStandardScaler(withMean=True, withStd=True)
投影图Plot 节点(PC1 vs PC2,按目标着色)matplotlib / Tableau抽样 toPandas() 后画

ISAS 的便宜分:SPSS Modeler 的 PCA/Factor 节点会直接给出碎石图、载荷矩阵和累计解释方差表——三张图一次到手,是 Step 4 在三条线里最省事的一次。Auto Data Prep 节点也会自动做一堆变换,但慎用:它会帮你做很多事却不告诉你做了什么,而 Step 3–4 的分正是「你做了什么」。

▣ 本章交付物 —— 报告里放什么(目标:一页)

1. Step 4.1(半页):① 说明选了三条路里的哪条,为什么;② 若做特征选择:筛选判据 + 被删列清单 + 删前删后列数;③ 若做 PCA:碎石图 + 一句「前 K 个主成分累计解释 X% 方差」+ 保留几个的判据。

2. Step 4.2(半页):二维投影散点图(按目标着色)+ 两句解读(可分性如何、哪个轴是主要方向)。

3. 一句纪律声明:「PCA 在训练集上拟合后应用于测试集;因后续同时评估决策树模型,树模型使用未降维的原始特征。」这一句同时展示了你知道纪律 ② 和纪律 ③。

4. 一个警告(如果你的数据也有噪声列):「注意 PC2 的载荷几乎全部来自 spend,而该列与目标相关系数仅 −0.096;这说明解释方差比例不等于预测价值,PCA 为无监督方法。」这句话能拿到 Step 4 的满分,因为它证明你理解了方法的局限。

这一章的一句话

Step 4 只值 5%,写一页就够:报出累计解释方差、画一张按目标着色的投影图、说明保留几个主成分的判据。但要记住 PCA 是无监督的——它给一列纯噪声开了一个解释 14.2% 方差的主成分,所以「解释方差高」和「对预测有用」是两件事。

下一章是这本书最重要的一章。它讲一件会让你的准确率变成 98.6%、AUC 变成 0.999、误报变成 0 的事——而这全都是坏消息。