3、主成分分析(PCA)原理:PCA的数学推导、协方差矩阵与特征向量、方差解释率与主成分选择
好,咱们来聊聊主成分分析。说实话,这是处理多重共线性时我最喜欢用的工具之一。它不像岭回归那样只是“压一下”系数,而是从根本上重新构造了一组互不相关的变量。
你想想看,当你的特征之间高度相关时,数据其实存在冗余。PCA做的就是找到数据中“真正的”变化方向。我习惯把它理解成:在原始特征空间里,找到一组新的坐标轴,让数据投影到这些轴上时,方差最大。
3.1 PCA的数学推导:从投影到最大化方差
咱们一步步来。假设你有一个中心化后的数据矩阵 X,维度是 n × p(n个样本,p个特征)。
PCA要做的第一件事,就是找到第一个主成分方向 w₁(单位向量)。数据在这个方向上的投影是 Xw₁,投影的方差是:
Var(Xw₁) = w₁ᵀ (XᵀX / (n-1)) w₁ = w₁ᵀ Σ w₁
这里的 Σ 就是协方差矩阵。我们要最大化这个方差,同时约束 w₁ᵀw₁ = 1。
嗯,这里要用到拉格朗日乘子法。构造目标函数:
L = w₁ᵀ Σ w₁ - λ(w₁ᵀw₁ - 1)
对 w₁ 求导并令其为零,得到:
Σ w₁ = λ w₁
看到了吗?这个 w₁ 就是协方差矩阵的特征向量,λ 就是对应的特征值。而且投影方差正好等于 λ。
核心结论:PCA本质上是在对协方差矩阵做特征值分解。特征向量给出了新的坐标轴方向,特征值给出了该方向上的数据方差。
3.2 协方差矩阵与特征向量:几何直觉
我在项目中遇到过不少同学,觉得特征向量很抽象。其实说白了,协方差矩阵描述了数据在各个方向上的“伸展程度”。
举个例子。假设你有两个特征,高度相关。协方差矩阵可能是这样的:
Σ = [[1.0, 0.9],
[0.9, 1.0]]
这个矩阵的特征值和特征向量是:
| 特征值 | 特征向量 | 含义 |
|---|---|---|
| 1.9 | [0.707, 0.707] | 沿45度方向,方差最大 |
| 0.1 | [-0.707, 0.707] | 垂直方向,方差很小 |
为什么会这样?因为两个特征高度正相关,数据点基本分布在一条斜线上。第一个特征向量指向这条斜线的方向,第二个指向垂直于它的方向。
我曾经处理过一个电商数据集,里面有“浏览时长”和“加购次数”两个特征,相关系数高达0.85。PCA跑完后,第一个主成分基本就是“购买意向强度”,第二个主成分则是“行为模式差异”——这比原始特征好解释多了。
小技巧:在实际项目中,我习惯先对数据做标准化(均值为0,方差为1),再跑PCA。因为PCA对量纲敏感,如果不标准化,量级大的特征会主导主成分方向。
3.3 方差解释率与主成分选择
好,现在你有了p个主成分,每个对应一个特征值λᵢ。第k个主成分的方差解释率是:
方差解释率 = λₖ / Σᵢ₌₁ᵖ λᵢ
累计方差解释率就是前m个主成分的方差解释率之和。我一般用这个指标来决定保留多少个主成分。
常见的做法有几种:
- 累计方差阈值法:保留累计方差解释率达到80%-90%的主成分。我个人习惯用85%作为基准线。
- 特征值大于1法(Kaiser准则):只保留特征值大于1的主成分。这个方法在标准化数据上比较常用。
- 碎石图法:画出特征值从大到小的折线图,找到“拐点”位置。
我曾经在一个金融风控项目里,原始特征有50多个,共线性严重。用PCA降到8个主成分,累计方差解释率就到了92%。模型效果不仅没下降,反而因为去掉了噪声,AUC提升了3个百分点。
注意:PCA后的主成分是原始特征的线性组合,可解释性会下降。如果你的目标是做因果推断或特征解释,要慎重使用PCA。我一般只在预测任务或降维可视化时用它。
3.4 PCA与共线性处理的关系
你可能会问:PCA怎么解决共线性?
其实很简单。原始特征之间有共线性,意味着协方差矩阵是奇异的(或接近奇异),有些特征值接近0。PCA把这些“几乎没变化”的方向对应的主成分去掉,剩下的主成分之间是正交的(协方差为0)。
换句话说,PCA把共线性的问题,转化成了“哪些方向上的变化不重要”的问题。去掉那些方差小的方向,剩下的就是干净、正交的新特征。
我习惯在建模流程中这样用:
- 先做标准化
- 跑PCA,看累计方差解释率
- 选择主成分个数(比如保留90%方差)
- 用这些主成分替代原始特征,训练模型
下面我用一个SVG图来展示PCA的核心逻辑:
嗯,到这里PCA的核心内容就差不多了。记住一句话:PCA不是魔法,它只是找到了数据中“最值得保留”的变化方向。下次你遇到特征多、共线性严重的数据集,不妨试试它。
一句话总结:PCA通过对协方差矩阵做特征值分解,找到方差最大的投影方向,用少数几个正交的主成分替代原始特征,从根本上解决共线性问题。
公众号:蓝海资料掘金营,微信deep3321