📑 查看全课大纲(第 10 / 20 节)

主成分分析推导、几何意义与统计性质

约 62 分钟

📺 正在播放小象官方高清录播(支持倍速与清晰度调节)

主成分分析:几何意义、数学推导与统计性质

小象实战讲义 · 多元统计分析

面对高维数据变量相关性强、信息重叠的挑战,主成分分析(PCA)通过线性组合生成互不相关的新变量(主成分),在保留核心信息的同时简化数据结构。本节将从几何直观出发,讲解其数学逻辑与核心统计性质。

💡 核心导读

  1. 降维动机:应对高维灾难,用少数综合变量替代相关变量,消除冗余。
  2. 几何直观:本质是坐标轴旋转,寻找方差最大的新方向。
  3. 数学本质:主成分是协方差矩阵的特征向量,方差为对应特征值。
  4. 统计性质:方差贡献率、累计贡献率与因子载荷是核心评估指标。
  5. 实践标准:结合累计贡献率与信息提取率确定保留的主成分个数。

一、几何意义与问题背景

1.1 为何需要降维?

实际分析中常遇到变量维度 pp 远大于样本量 nn 的“高维灾难”,导致传统方法失效;且变量间存在相关性,信息大量重叠。

经典案例:制衣的十几项指标可综合为“长度”“胖瘦”“体型”3个主成分,互不相关且保留核心信息。

pp 维随机向量 X=(X1,,Xp)X = (X_1, \ldots, X_p)^\top,均值 μ\mu、协方差矩阵 Σ\Sigma 存在。目标是找到 mpm \ll p 个新综合变量 Y1,,YmY_1,\dots,Y_m,满足:

  1. 每个 YiY_iXX 的线性组合;
  2. YiY_i 互不相关;
  3. 方差依次递减;
  4. mm 个保留尽可能多的原始信息。

1.2 几何直观:坐标轴的旋转

PCA可理解为对原始坐标系的正交旋转。以二维数据为例,若 X1,X2X_1,X_2 相关性强,样本分布呈扁椭圆状。

将坐标轴旋转 θ\theta,使新轴 Y1Y_1 沿椭圆长轴(方差最大),Y2Y_2 沿短轴(方差最小),旋转公式为: Y1=X1cosθ+X2sinθY2=X1sinθ+X2cosθ\begin{aligned} Y_1 &= X_1 \cos\theta + X_2 \sin\theta \\ Y_2 &= -X_1 \sin\theta + X_2 \cos\theta \end{aligned} 矩阵形式为 Y=TXY = T^\top X,其中 TT 为正交矩阵(TT=IT^\top T = I)。

此时仅用 Y1Y_1 即可近似描述原始二维数据,实现降维。Y1Y_1 为第一主成分,Y2Y_2 为第二主成分。若变量不相关(分布为圆形),降维损失大;若完全相关(分布为直线),降维效果极佳。

二、主成分的数学推导

2.1 问题形式化

pp 维随机向量 XX 的协方差矩阵为 Σ\Sigma,第 kk 个主成分是 Yk=TkXY_k = T_k^\top X,其中 TkT_k 为系数向量。

主成分需满足两个约束:

  1. 系数标准化:TkTk=1T_k^\top T_k = 1(避免系数任意放大);
  2. 主成分间正交:iki \ne kTiTk=0T_i^\top T_k = 0,即 Cov(Yi,Yk)=0Cov(Y_i,Y_k)=0

目标是在约束下依次最大化每个主成分的方差:Var(Yk)=TkΣTkVar(Y_k) = T_k^\top \Sigma T_k

2.2 第一主成分的求解

第一主成分仅需满足 T1T1=1T_1^\top T_1 = 1,用拉格朗日乘子法求解: L(T1,λ1)=T1ΣT1λ1(T1T11)\mathcal{L}(T_1, \lambda_1) = T_1^\top \Sigma T_1 - \lambda_1(T_1^\top T_1 - 1)T1T_1 求导并令其为0,得 (Σλ1I)T1=0(\Sigma - \lambda_1 I) T_1 = 0,即 T1T_1Σ\Sigma 的特征向量,对应特征值 λ1\lambda_1,且 Var(Y1)=λ1Var(Y_1) = \lambda_1。 为最大化方差,λ1\lambda_1Σ\Sigma 的最大特征值,T1T_1 为对应的单位特征向量。

2.3 第二及第k主成分的求解

第二主成分需满足 T2T2=1T_2^\top T_2 = 1 且与第一主成分正交。同理可证,T2T_2Σ\Sigma 第二大特征值 λ2\lambda_2 对应的单位特征向量,Var(Y2)=λ2Var(Y_2)=\lambda_2。 依此类推,第 kk 个主成分的系数向量是 Σ\Sigmakk 大特征值对应的单位特征向量,方差为该特征值。

2.4 基本结论

Σ\Sigma 的特征值降序排列为 λ1λp0\lambda_1 \ge \dots \ge \lambda_p \ge 0,对应单位正交特征向量为 T1,,TpT_1,\dots,T_p,令 T=(T1,,Tp)T=(T_1,\dots,T_p),则主成分向量 Y=TXY = T^\top X,其协方差矩阵为对角阵: D(Y)=diag(λ1,,λp)D(Y) = \operatorname{diag}(\lambda_1, \dots, \lambda_p) 验证了主成分间互不相关。

三、主成分的统计性质

3.1 性质1:协方差矩阵为对角阵

如上所述,主成分的协方差矩阵是由特征值构成的对角阵,各主成分互不相关。

3.2 性质2:总方差不变性

原始变量总方差为协方差矩阵的迹 tr(Σ)\operatorname{tr}(\Sigma),所有主成分总方差为 i=1pλi=tr(Λ)\sum_{i=1}^p \lambda_i = \operatorname{tr}(\Lambda)。由迹的性质可证: i=1pλi=i=1pVar(Xi)\sum_{i=1}^p \lambda_i = \sum_{i=1}^p Var(X_i) PCA仅重新分配总方差,总变异程度不变。

3.3 性质3:因子载荷量

kk 个主成分 YkY_k 与第 ii 个原始变量 XiX_i 的相关系数称为因子载荷量,衡量二者关联强度: ρ(Yk,Xi)=tkiλkσii\rho(Y_k, X_i) = \frac{t_{ki} \sqrt{\lambda_k}}{\sqrt{\sigma_{ii}}} 其中 tkit_{ki} 是特征向量 TkT_k 的第 ii 个分量,σii\sigma_{ii}XiX_i 的方差。

3.4 方差贡献率与累计贡献率

这是选择主成分个数的核心指标:

  • 方差贡献率:第 kk 个主成分方差占总方差的比重 φk=λki=1pλi\varphi_k = \frac{\lambda_k}{\sum_{i=1}^p \lambda_i},反映其提取信息的能力。
  • 累计贡献率:前 mm 个主成分方差和占总方差的比重 ψm=k=1mλki=1pλi\psi_m = \frac{\sum_{k=1}^m \lambda_k}{\sum_{i=1}^p \lambda_i},反映总信息保留比例。实践中常选 mm 使 ψm\psi_m 达80%以上。

3.5 信息提取率

累计贡献率衡量整体信息保留情况,信息提取率 Ωi\Omega_i 衡量前 mm 个主成分从第 ii 个原始变量中提取的信息比例: Ωi=k=1mtki2λkσii\Omega_i = \frac{\sum_{k=1}^m t_{ki}^2 \lambda_k}{\sigma_{ii}} 好的PCA结果需兼顾累计贡献率与各变量的信息提取率。

四、Python实战:主成分性质验证

下面通过Python代码模拟多元数据集,验证PCA的核心统计性质:

import numpy as np

np.random.seed(42)
n, p = 100, 4
Sigma_true = np.array([
    [4.0, 2.5, 1.2, 0.5],
    [2.5, 3.0, 1.0, 0.8],
    [1.2, 1.0, 2.0, 0.3],
    [0.5, 0.8, 0.3, 1.0]
])
X = np.random.multivariate_normal(np.zeros(p), Sigma_true, size=n)

S = np.cov(X, rowvar=False)

eigenvals, eigenvecs = np.linalg.eigh(S)
idx = np.argsort(eigenvals)[::-1]
eigenvals = eigenvals[idx]
eigenvecs = eigenvecs[:, idx]

total_var = np.sum(eigenvals)
var_ratio = eigenvals / total_var
cum_var_ratio = np.cumsum(var_ratio)

std_vars = np.sqrt(np.diag(S))
loadings = eigenvecs * np.sqrt(eigenvals) / std_vars[:, np.newaxis]

print("特征值序列 (降序):", np.round(eigenvals, 4).tolist())
print("各主成分方差贡献率:", np.round(var_ratio, 4).tolist())
print("累计方差贡献率:", np.round(cum_var_ratio, 4).tolist())
print("第一主成分因子载荷 (各变量相关系数):", np.round(loadings[:, 0], 4).tolist())
print("前 2 主成分累计贡献率是否超过 75%:", bool(cum_var_ratio[1] > 0.75))

结果解读: 运行代码可得(因随机性略有浮动):第一主成分解释约61%的总方差,前两个累计贡献率约78%,满足常用阈值;第一主成分与前两个原始变量相关性最强,可解释为“整体规模”综合指标。

📝 动手练一练

  1. 特征值计算:给定协方差矩阵 Σ=(521230102)\Sigma = \begin{pmatrix} 5 & 2 & 1 \\ 2 & 3 & 0 \\ 1 & 0 & 2 \end{pmatrix},请求解其特征多项式,并估算最大特征值。
  2. 主成分个数选择:某数据集PCA得到8个特征值:4.2, 2.1, 0.8, 0.5, 0.3, 0.2, 0.1, 0.05。若要求累计贡献率超过80%,应保留前几个主成分?

参考答案

  1. 特征多项式为 λ3+10λ226λ+19=0-\lambda^3 + 10\lambda^2 - 26\lambda + 19 = 0(首一形式:λ310λ2+26λ19=0\lambda^3 - 10\lambda^2 + 26\lambda - 19 = 0),最大特征值约为 λ16.4\lambda_1 \approx 6.4
  2. 总方差为8.25,前3个主成分累计贡献率约86.1% > 80%,应保留3个主成分。

本章小结

本节系统讲解了主成分分析的核心方法:

  1. 核心思想:通过线性变换降维,解决高维数据冗余与相关性问题。
  2. 几何视角:对原始坐标系正交旋转,寻找方差最大的新方向。
  3. 数学原理:主成分是协方差矩阵的特征向量,方差为对应特征值,是正交约束下最大化方差的优化问题。
  4. 核心性质:总方差不变性、因子载荷、方差/累计贡献率是应用PCA的基石。
  5. 评估标准:结合累计贡献率(通常>80%)与信息提取率确定主成分个数。

行动清单

  1. 对手头多元数据计算样本协方差与相关系数矩阵;
  2. 进行特征值分解,计算各主成分的方差/累计贡献率;
  3. 根据阈值确定保留主成分个数,尝试解释第一主成分的业务含义。

— 小象教研组

配套学习资源与课件
  • 第5章课件:主成分分析
    下载
  • 多元统计分析参考讲义与常用函数(多元分析与主成分常用函数速查)
    下载
  • 课程配套数据集(全课程实战数据包)
    下载
  • 课程全套源代码(课程相关代码汇总)
    下载
🎁 免费学习资源

领取《小象 11GB VIP 课件资料包与大厂真题手册》

包含全套实战 Jupyter 源码、清洗后数据集、大厂高频面试真题与专属学员答疑交流群。

  • 完整 Python / 数据分析 Jupyter 实战源码
  • 大厂真实业务数据集与练习题
  • 微信扫码添加顾问免费领取;想学什么,直接告诉顾问
微信二维码:扫码添加课程顾问微信扫码添加顾问