本文由 AI 翻译。
主成分分析(Principal Component Analysis, PCA)是一种应用非常广泛的 降维 与 特征提取 技术。它的目标是在特征空间中找到一组新的正交坐标轴(主成分),把数据投影到这些轴上,从而在尽可能保留信息的前提下减少维度(轴的数量)。
目标分析
要实现 PCA,我们首先要澄清“尽可能保留信息”到底指什么。一种常见做法是:让数据在新坐标轴上的投影 方差 尽可能大。直觉上,方差更大的方向往往捕捉到了数据结构与变化的主要部分;而方差很小的方向可能更多对应噪声或不重要的特征。因为方差可以量化数据点在某个方向上的“分散程度”,它就给了我们一个衡量新轴“质量”的工具:沿该轴投影后的方差越大,这根轴就越能捕捉数据中的信息。
此外,我们希望这些新轴(主成分)彼此 不相关,也就是不存在线性依赖。直觉上,相关性意味着线性信息的重叠:沿一个方向的变化可以部分解释沿另一个方向的变化。选择不相关的轴,可以让每个主成分捕捉数据变动中独特的线性方面,从而在降维时避免不必要的冗余。
因此,PCA 的目标可以概括为:
- 找到一组新的坐标轴(主成分),使数据投影到这些轴上的方差最大。
- 确保这些新轴彼此不相关。
- 按捕捉到的方差大小对主成分排序,以便选择前 k 个主成分用于降维。
有了对目标的整体理解后,我们就可以进入背后的数学推导。
记号与设定
令 x∈Rd 表示一个数据点对应的随机向量,其中包含 d 个特征。我们可以把 x 的每次取值看作 d 维空间中的一个点;所有点的集合形成一个“点云”,其形状反映了数据分布的结构。
给定 n 个样本,我们将它们按列排成数据矩阵 X=[x1,x2,…,xn]∈Rd×n。
为了与线性代数的惯例一致,我们把每个数据点表示为列向量。这与机器学习中常见的“样本按行排列”的约定不同。
为什么需要中心化
在做 PCA 之前,我们先对数据进行 中心化:减去样本均值
xˉ=n1i=1∑nxi,x~i=xi−xˉ
于是得到中心化后的数据 X~=[x~1,…,x~n],并且满足 E[x~]=0。
为什么中心化是必要的? 在 PCA 里,我们要找的是能使方差最大的方向(单位向量)。一个方向对应一条过原点的直线——它从 0 出发。当我们把数据投影到某个方向 w 上时,我们衡量的是投影点在 这条过原点的直线 上的分散程度。
如果数据的质心(均值)不在原点,这个衡量就会变得没有意义。想象你的数据点云集中在距离原点很远的某个位置 c。一条必须穿过原点的方向 w 可能会完全错开点云,或者以一个与点云真实形状无关的角度穿过它。这时计算出来的“方差”,反映的很可能是点云离原点的距离,而不是点云本身的展开方向。
通过中心化,我们把点云的质心移动到原点。这样,所有过原点的方向都会穿过数据云的“中心”,沿某个方向的方差才真正表示数据在该方向上的扩散程度。
从现在开始,我们默认数据已经中心化,为了简洁起见省略波浪号。
几何直觉
把数据点云想象成 Rd 中的一个形状:它在某些方向上被拉长,在另一些方向上被压扁——更像一个椭球体而不是球。PCA 想要找到这个椭球的坐标轴:也就是数据最“伸展”的那些方向。
第一主成分是使投影后方差最大的方向。第二主成分是在与第一主成分正交的前提下,使方差次大的方向,以此类推。
协方差矩阵
为了形式化,我们先引入随机向量 x 的 协方差矩阵 Σ:
Cov(x)=E[(x−E[x])(x−E[x])T]
由于数据已中心化,E[x]=0,因此
Cov(x)=E[(x−0)(x−0)T]=E[xxT]=Σ
对角元素 Σii=E[xi2] 是各个特征的方差;非对角元素 Σij=E[xixj] 是不同特征之间的协方差。
协方差矩阵为什么有用可能并不直观,但它为我们后续通过分析 Σ 的性质来找到最优方向(主成分)铺平了道路。
经验协方差矩阵。 实践中我们用数据估计 Σ:
Σ≈n1∑i=1nxixiT=n1XXT
协方差矩阵的性质
在寻找主成分之前,我们需要了解 Σ 的一些关键性质:
Σ 是对称矩阵。 因为 Σij=E[xixj]=E[xjxi]=Σji,所以 Σ=ΣT。
谱定理(Spectral Theorem)。 任意实对称矩阵都可以被一个正交矩阵对角化。具体地,存在一个正交矩阵 W(满足 WTW=WWT=I),使得
WTΣW=Λ
其中 Λ 是对角矩阵,对角线元素是特征值;W 的列向量是对应的特征向量。同样地,为什么“可对角化”如此重要可能还不明显,但接下来会看到它正是 PCA 的核心。
一次性求出所有主成分
与其一个一个地找主成分,我们可以直接利用谱定理一次性得到全部主成分。令 W=[w1,w2,…,wd] 为 Σ 的特征向量组成的正交矩阵,并按特征值从大到小排列:
Λ=λ10⋮00λ2⋮0⋯⋯⋱⋯00⋮λd,λ1≥λ2≥…≥λd≥0
变换及其协方差
变换 z=WTx 将原始数据投影到由特征向量定义的新坐标轴上。每个分量 zi=wiTx 就是沿第 i 根新轴的投影。
变换后的数据 z 的协方差矩阵是什么?因为 z=WTx 且 E[z]=WTE[x]=0,于是
Cov(z)=E[zzT]=E[(WTx)(WTx)T]=E[WTxxTW]=WTE[xxT]W=WTΣW
根据谱定理,WTΣW=Λ,因此
Cov(z)=Λ
这说明:使用特征向量矩阵 W 做变换后,z 的协方差矩阵变成了对角矩阵。敏锐的读者会注意到,对角协方差矩阵有两个重要含义:
- 对角线元素 Λii=λi 就是方差:Var(zi)=λi
- 非对角元素 全为 0:当 i=j 时 Cov(zi,zj)=0
这直接给出两条关键信息:
- 变换后的各个分量两两 不相关——正是我们想要的!
- 每个分量的 方差 恰好等于对应的 特征值。
识别主成分
我们已经看到:当用 W 定义新坐标轴时,第 i 根轴上的方差就是 λi。由于 λ1≥λ2≥…≥λd,方差最大的方向是 w1——也就是最大特征值 λ1 对应的特征向量。
因此,第一主成分就是取变换矩阵 W 的第一列:
w1=first column of W,Var(w1Tx)=λ1
同理,第二主成分 w2(在与 w1 正交的前提下方差第二大)就是 W 的第二列,依此类推。
特征向量矩阵 W 同时给了我们:
- 所有主成分方向(作为列向量)
- 这些方向彼此不相关的保证(协方差的非对角元素为 0)
- 每个主成分捕捉到的方差(对应的特征值)
你可能会觉得:为什么协方差矩阵的特征向量恰好就是 PCA 想要的方向?这可以从优化角度来理解:寻找第一主成分等价于求解 max∥w∥=1Var(wTx)。
可以证明该问题的解就是 Σ 的最大特征值对应的特征向量,从而把 PCA 直接连接到谱定理。推导细节超出了本节范围。
降维
要把维度从 d 降到 k(其中 k<d),我们选择前 k 个特征向量组成
Wk=[w1,…,wk]∈Rd×k:
zreduced=WkTx∈Rk
这样就保留了方差最大的 k 个方向,丢弃其余方向。至此,我们实现 PCA 的工作就完成了!我们得到了一个既能最大化信息保留、又能保证不相关性的主成分提取方法。
总结
PCA 通过寻找能最大化方差的正交方向(主成分)来降维:
- 中心化 数据:减去均值(使质心位于原点)。
- 计算 协方差矩阵 Σ=n1XXT。
- 对角化 Σ 得到特征值 λi 与特征向量 wi。
- 按特征值降序排序 特征向量。
- 选取 前 k 个特征向量组成 Wk。
- 变换 数据:z=WkTx。