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把共线性的问题,转化成了“哪些方向上的变化不重要”的问题。去掉那些方差小的方向,剩下的就是干净、正交的新特征。

我习惯在建模流程中这样用:

  1. 先做标准化
  2. 跑PCA,看累计方差解释率
  3. 选择主成分个数(比如保留90%方差)
  4. 用这些主成分替代原始特征,训练模型

下面我用一个SVG图来展示PCA的核心逻辑:

PCA核心逻辑流程图 原始特征矩阵 n × p,存在共线性 步骤1:中心化/标准化 均值为0,方差为1 步骤2:计算 协方差矩阵 步骤3:特征值分解 得到特征向量与特征值 步骤4:选择主成分 根据方差解释率决定个数 输出:主成分矩阵 n × m,正交,无共线性 PCA通过特征值分解,将共线性的原始特征转化为正交的主成分

嗯,到这里PCA的核心内容就差不多了。记住一句话:PCA不是魔法,它只是找到了数据中“最值得保留”的变化方向。下次你遇到特征多、共线性严重的数据集,不妨试试它。

一句话总结:PCA通过对协方差矩阵做特征值分解,找到方差最大的投影方向,用少数几个正交的主成分替代原始特征,从根本上解决共线性问题。


公众号:蓝海资料掘金营,微信deep3321