跳转至

11.1   主成分分析

小率把一份班级生活调查带来找均哥。每个同学都有十几列指标:睡眠时长、运动分钟、阅读时间、手机使用时长、零花钱、通勤时间……小率想画图,却发现纸面上根本放不下这么多轴。

图 11.1.1 小率把很多指标的数据表拿来找均哥

同学 睡眠 运动 阅读 手机 零花钱 ...
A 7.5 35 40 120 30 ...
B 6.0 10 15 210 50 ...
C 8.0 55 60 80 25 ...
... ... ... ... ... ... ...
这么多指标,我连散点图都画不出来。
那就先问:有没有几条“主线”,能概括大部分差异?这就是 PCA。

11.1.1   多列指标压成几条主线

主成分分析(Principal Component Analysis, PCA)做的事很朴素:把许多相关变量,重新组合成几条彼此垂直的新轴。第一条新轴叫 PC1,它让数据投影后的方差最大;第二条新轴叫 PC2,它和 PC1 垂直,并解释剩下方差中最多的一部分。

图 11.1.2 PCA 把很多指标旋转成几条主线

所以 PCA 不是删列,而是换一个角度看同一批数据?
对。它先旋转坐标轴,再只保留最能解释差异的前几根轴。

11.1.2   方差最大的方向最先留下

设数据矩阵 \(X\) 已经中心化,\(n\) 行是观察对象,\(p\) 列是变量。协方差矩阵为:

\[ S=\frac{1}{n-1}X^\top X \]

PCA 要找单位向量 \(w\),让投影 \(Xw\) 的方差最大:

\[ \operatorname{Var}(Xw)=w^\top S w \]

结果是:\(w\) 就是协方差矩阵 \(S\) 最大特征值对应的特征向量。特征向量给方向,特征值给这条方向上的方差。

一句话

PCA 的数学核心是:对协方差矩阵做特征分解,按特征值从大到小选前几条轴。

11.1.3   选几个主成分

每个主成分解释的方差比例是:

\[ \text{解释比例}_j=\frac{\lambda_j}{\lambda_1+\lambda_2+\cdots+\lambda_p} \]

累计解释比例则是:

\[ \text{累计比例}_k=\frac{\lambda_1+\cdots+\lambda_k}{\lambda_1+\cdots+\lambda_p} \]

常用判断:

  • 累计解释比例达到 80%、90% 或 95%。
  • 碎石图出现明显“肘部”。
  • 保留下来的主成分还能讲出清楚含义。

需要注意

PCA 默认“方差大就是信息多”。这在图像压缩、综合指标里常常有效,但在分类任务里不一定成立,因为区分类别的方向可能方差并不大。

11.1.4   标准化不是可选项

如果变量量纲不同,必须先标准化。否则“月消费金额”这种数值范围很大的变量,会压过“运动分钟”“阅读时间”等变量。

如果我忘了标准化,PC1 可能只是“谁花钱多”?
很可能。PCA 前先看量纲,这是救命动作。

11.1.5   用 Python 做 PCA

完整脚本放在:

docs/assets/scripts/ch11_multivariate/01_pca/main.py
from sklearn.datasets import load_iris
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler

iris = load_iris()
X = StandardScaler().fit_transform(iris.data)

pca = PCA(n_components=2, random_state=0)
Z = pca.fit_transform(X)

print("二维坐标形状:", Z.shape)
print("方差解释比例:", pca.explained_variance_ratio_.round(3))
print("累计解释比例:", pca.explained_variance_ratio_.sum().round(3))
print("载荷矩阵:", pca.components_.round(3))

读输出

explained_variance_ratio_ 告诉你每条主成分解释了多少差异;components_ 是载荷,可以用来判断 PC1、PC2 主要由哪些原变量组成。

11.1.6   PCA 适合和不适合什么

适合:

  • 高维数据可视化。
  • 去掉冗余变量。
  • 图像压缩、指标合成。
  • 作为聚类或回归前的降维步骤。

不适合:

  • 强非线性结构。
  • 离群点很多的数据。
  • 需要直接解释原变量含义的报告。
  • 直接做因果解释。

小率的笔记本

PCA 把很多变量旋转成几条主成分。PC1 是方差最大的方向,PC2 与 PC1 垂直并解释剩余方差。做 PCA 前通常要标准化;选几个主成分要看累计解释比例、碎石图和可解释性。