← 返回题目列表

PCA(主成分分析)的原理是什么?

高频 困难 第 15 / 25 题 更新于 2026/07/28
无监督学习PCA降维主成分

简化版

PCA(主成分分析) 是最常用的线性降维方法:它在高维数据里找到几个互相正交、方差最大的新方向(主成分),把数据投影到这些方向上,用少数几个主成分代替原来很多个特征,在尽量保留数据信息(方差)的前提下降低维度。为什么找「方差最大」的方向?因为方差大 = 数据在这个方向上区分度大 = 信息多;方差小的方向多是噪声或冗余,可以舍弃。数学上,主成分就是数据协方差矩阵的特征向量,对应的特征值就是该方向的方差——按特征值从大到小取前 k 个特征向量,就是前 k 个主成分。用途:降维去噪、可视化、去除特征相关性、加速训练。

详细版

目标: 找一组正交的新坐标轴(主成分),使数据投影后方差最大、且各主成分互不相关,用前 k 个代替原 d 维。

两个等价的视角:

  • 最大方差:找投影后方差最大的方向(保留最多信息)。
  • 最小重构误差:找一个低维子空间,使数据投影回来的重构误差最小。
  • 两者数学上等价,都指向同一组主成分。

求解步骤:

1. 数据中心化(每维减均值)—— 必需
2. 计算协方差矩阵 C = (1/n)XᵀX
3. 对 C 做特征值分解,得到特征值 λ₁≥λ₂≥... 和对应特征向量
4. 取前 k 个最大特征值对应的特征向量 = 前 k 个主成分
5. 把数据投影到这 k 个主成分上,得到降维结果
  • 特征值 λᵢ = 第 i 个主成分方向上的方差λᵢ/Σλ = 该主成分的方差解释比例
  • 实际常用 SVD 求解(更稳定,不用显式算协方差矩阵)。

完整版教学

一、PCA 要解决什么——降维但少丢信息

高维数据有很多问题:维度灾难、冗余特征、难可视化、训练慢。降维就是用更少的维度表示数据,但要求尽量少丢信息

PCA 的思路是:原始特征之间往往高度相关、有冗余(比如「身高(cm)」和「身高(inch)」几乎是重复信息)。PCA 把这些相关的原始特征重新组合成一组新的、互不相关的特征(主成分),并且让前几个主成分集中了绝大部分信息,这样只保留前几个就能代表整份数据——达到降维又少丢信息的目的。

二、核心直觉:为什么找「方差最大」的方向

PCA 的关键决策是「用哪些新方向」。答案是方差最大的方向。为什么方差大 = 信息多?

想象一片沿某个斜方向拉长的椭圆形点云:

  • 沿长轴方向看,点分得很开——方差大,这个方向最能区分不同样本,信息量大。
  • 沿短轴方向看,点挤成一条——方差小,样本在这个方向几乎没差别,信息少(多半是噪声/冗余)。

所以 PCA 优先保留方差大的方向(第一主成分是方差最大的方向,第二主成分是与第一正交、方差次大的方向,以此类推),舍弃方差小的方向。方差 = 区分度 = 信息,这是 PCA 全部逻辑的起点。

三、两个等价视角:最大方差 = 最小重构误差

PCA 可以从两个看似不同、实则等价的角度理解:

  • 最大方差视角:找让数据投影后方差最大的方向——尽量保留数据的「散布」。
  • 最小重构误差视角:找一个低维子空间,使数据投影到它上面、再重构回原空间时误差最小——尽量少失真。

这两个目标在数学上完全等价:投影方差最大的方向,恰好也是重构误差最小的方向(因为总方差固定,保留的方差越多、丢掉的(=重构误差)就越少)。两个视角都导向同一组主成分。

对中心化数据和线性正交投影,最大化保留方差与最小化平方重构误差是同一个优化问题。总平方能量可分解为投影内能量与正交残差:

||X||_F² = ||X W_k W_kᵀ||_F² + ||X - X W_k W_kᵀ||_F²

保留能量越多,重构残差越小。该等价性依赖平方损失、线性子空间与正交投影,不能直接推广到任意非线性自编码器。

四、数学求解:协方差矩阵的特征分解

PCA 的求解落到线性代数上:

1. 中心化:每个特征减去自己的均值(让数据以原点为中心)—— 必须做
2. 算协方差矩阵:C = (1/n) XᵀX(d×d,描述特征间的方差和相关)
3. 对 C 做特征值分解:C = QΛQᵀ
   - 特征向量 = 主成分方向
   - 特征值 λᵢ = 对应主成分方向上的方差
4. 按特征值从大到小排序,取前 k 个特征向量做投影矩阵
5. 投影:Z = X·W(W 是前 k 个特征向量),得到 n×k 的降维数据

关键对应关系

  • 主成分方向 = 协方差矩阵的特征向量(特征向量互相正交,保证主成分不相关)。
  • 每个主成分的方差 = 对应的特征值 λᵢ
  • 方差解释比例 = λᵢ / Σλ:告诉你这个主成分保留了百分之多少的信息。前 k 个的累计解释比例(如 ≥95%)常用来决定 k 取多少。

五、实际用 SVD 而非直接特征分解

工程上 PCA 通常用奇异值分解(SVD) 而非显式构造协方差矩阵:

  • 直接对中心化后的数据矩阵 X 做 SVD:X = UΣVᵀ,则 V 的列就是主成分方向,奇异值的平方正比于特征值(方差)。
  • 好处:数值更稳定(不用算 XᵀX,避免精度损失和大矩阵),且当特征数很大时更高效。sklearn 的 PCA 内部就用 SVD。

若中心化矩阵 X=UΣVᵀ,主方向是 V 的前 k 列,协方差特征值满足 λ_i=σ_i²/(n-1)。解释方差比可由前 k 个 σ_i² 占总和的比例得到,无需显式构造 d×d 协方差矩阵。

数据形态常见求解思路
中小规模稠密矩阵完整 SVD
只需少量主成分截断或随机 SVD
超大或流式数据Incremental PCA

SVD 更快不是无条件结论;完整分解仍可能昂贵,求解器要按 n、d、稀疏性和所需成分数选择。

六、关键注意事项

  • PCA 的协方差与重构解释以中心化数据为前提,很多库会在内部中心化(减均值);通常还要标准化(除标准差)——否则量纲大的特征方差天然大、会主导主成分,PCA 会被单位而非真实结构带偏(详见特征缩放专题)。
  • 主成分不可解释:主成分是原特征的线性组合,没有直观业务含义(这是它和「特征选择」的区别——选择保留原始可解释特征,PCA 造新特征)。
  • 只能捕捉线性结构:PCA 是线性方法,对非线性流形无能为力,需要核 PCA、t-SNE、UMAP、自编码器等非线性方法。
  • k 怎么定:看累计方差解释比例(如取到 95%)、或碎石图(scree plot)找拐点。

七、常见追问

  • PCA 为什么要中心化/标准化? 中心化让协方差正确;标准化防大尺度特征主导方差。
  • 特征值和方差什么关系? 特征值 = 主成分方向的方差;λᵢ/Σλ 是方差解释比例。
  • PCA 和特征选择区别? PCA 造新特征(不可解释、线性组合);特征选择保留原始特征子集(可解释)。
  • PCA 会不会丢重要信息? 会丢方差小的方向——若有用信息恰在小方差方向(少见),PCA 会误删;一般方差大=信息多成立。
  • PCA 能去相关吗? 能——主成分互相正交、不相关,常用来消除多重共线性。
  • 降到几维? 按累计解释方差(如 95%)或可视化需求(2/3 维)定。

八、用对角协方差算解释率与重构损失

若中心化后的二维数据协方差矩阵为 diag(9,1),两个特征向量就是坐标轴,特征值为 9 和 1。只保留第一主成分时,累计解释方差比为 9/(9+1)=90%;在样本均方意义下,被丢弃方向贡献的重构误差对应剩余特征值 1。这个结论依赖中心化和平方欧氏重构目标。

X_centered = U S V^T
主成分方向 = V 的列(等价于 V^T 的行)
协方差特征值 = S_i^2 / (n-1)   # 使用样本协方差口径
预处理PCA 实际强调什么风险
只中心化原单位下的协方差大量纲特征可能主导
再标准化相关矩阵结构会放大小方差特征的相对作用
白化主成分再除标准差丢失原方差信息、可能放大噪声

“方差大等于信息多”是 PCA 的建模准则,不是任务真理:一个低方差方向仍可能决定标签或业务风险。选择 k 除了解释方差,还应检查重构误差、下游验证表现、稳定性和推理成本。

易错点:PCA 只保证在线性正交投影和平方重构误差下最优,不保证保住所有监督任务所需的信息。

九、常见误区与追问

  • 误区:PCA 前任何数据都必须标准化。 中心化通常必需;是否除标准差取决于单位是否可比较和业务语义。
  • 误区:解释方差达到 95% 就一定够用。 阈值是经验规则,还要检查下游任务和低方差信号。
  • 追问:为什么 SVD 不必显式构造协方差? 它直接分解中心化数据,避免形成 XᵀX 带来的数值条件恶化。
  • 追问:主成分的符号为什么会翻转? 特征向量乘以 -1 仍是同一方向,不改变投影子空间与解释方差。
  • 追问:PCA 能处理缺失值吗? 标准 PCA 通常要求先插补或使用专门的概率/迭代方法。

十、加强记忆

PCA 是线性降维:找几个正交、方差最大的新方向(主成分),把数据投影上去,用少数主成分代替多个原特征、尽量保留方差(信息)。核心直觉:方差大 = 区分度大 = 信息多(椭圆长轴),方差小的方向多是噪声冗余可弃。两个等价视角:最大方差 = 最小重构误差。求解:中心化 → 算协方差矩阵 → 特征值分解 → 取前 k 大特征值对应的特征向量做投影主成分 = 协方差矩阵的特征向量,特征值 = 该方向方差,λᵢ/Σλ = 方差解释比例(决定 k);工程用 SVD 更稳。注意:必须中心化、通常标准化(防大尺度主导)、主成分不可解释、只捕捉线性结构(非线性用核 PCA/t-SNE/自编码器)