第十五章:主成分分析
15.1 概述
主成分分析(Principal Component Analysis,简称PCA)是一种经典的降维方法,旨在通过线性变换将高维数据投影到低维空间,同时最大程度地保留数据的方差信息。PCA由Pearson(1901)和Hotelling(1933)先后提出,至今仍是数据分析和机器学习中最广泛使用的技术之一。其核心思想是:对于给定的高维数据,找到一组两两正交的新坐标系(主成分),使得数据在这些坐标轴上的投影的方差依次递减。第一主成分对应最大方差方向,第二主成分对应次大方差方向,依此类推。通过选择前k个主成分,即可实现数据的降维,同时保留原始数据的主要信息。
PCA的应用场景极为广泛。在图像处理领域,PCA被用于人脸识别(如Eigenface方法),将人脸图像投影到主成分子空间进行分类;在数据可视化中,PCA可将高维数据降至二维或三维,以便于直观观察数据的分布和聚类结构;在特征工程中,PCA可作为特征提取手段,去除冗余信息和噪声;在信号处理、基因组数据分析、金融风险建模等领域,PCA同样发挥着重要作用。
15.2 PCA的两种推导
15.2.1 基于最大方差的推导
第一种推导方式从最大化投影方差的角度出发。给定原始数据集\(X = \{x_1, x_2, \ldots, x_n\}\),每个样本\(x_i\)为p维列向量。设\(u_1\)为第一主成分的方向向量(单位向量,即\(u_1^T u_1 = 1\))。数据在\(u_1\)方向上的投影为\(u_1^T x_i\),则投影的方差为:
其中\(\overline{u_1^T x} = \frac{1}{n} \sum_{i=1}^{n} u_1^T x_i = u_1^T \bar{x}\),\(\bar{x} = \frac{1}{n} \sum_{i=1}^{n} x_i\)为样本均值向量。为简化推导,假设数据已经过中心化处理,即\(\bar{x} = 0\),此时投影方差简化为:
其中\(\Sigma = \frac{1}{n} X X^T\)为样本协方差矩阵(已中心化情况下)。因此,第一主成分的方向\(u_1\)应使得\(u_1^T \Sigma u_1\)最大化,同时满足约束\(u_1^T u_1 = 1\)。构造拉格朗日函数:
对\(u_1\)求偏导并令其为零:
这正是协方差矩阵\(\Sigma\)的特征值方程。\(u_1\)为特征向量,\(\lambda\)为对应的特征值。投影方差\(S_1^2 = u_1^T \Sigma u_1 = u_1^T (\lambda u_1) = \lambda u_1^T u_1 = \lambda\)。因此,为了使投影方差最大,应选择最大特征值\(\lambda_1\)对应的特征向量作为第一主成分方向。类似地,第二主成分\(u_2\)应与\(u_1\)正交,并在剩余方向中使方差最大化,可证\(u_2\)为第二大特征值对应的特征向量,以此类推。
15.2.2 基于最小重构误差的推导
第二种推导方式从最小化重构误差的角度出发。其思想是:原始数据\(x_i\)可以表示为所有主成分的线性组合。若仅保留前k个主成分,则原始数据被投影到由这k个主成分张成的低维子空间中,我们用投影后的数据重构原始数据,并希望重构误差最小。
设保留前k个主成分\(u_1, u_2, \ldots, u_k\)构成投影矩阵\(U_k = [u_1, u_2, \ldots, u_k]\),则样本\(x_i\)在低维空间中的投影为\(U_k^T x_i\)(k维向量)。重构后的数据为\(U_k U_k^T x_i\)。重构误差定义为原始数据与重构数据之间的均方误差:
注意到\(I - U_k U_k^T\)是一个投影矩阵,将向量投影到\(U_k\)所张成空间的正交补空间。展开误差项:
因此最小化\(\mathcal{J}\)等价于最大化\(\frac{1}{n} \sum_{i=1}^{n} \| U_k^T x_i \|^2 = \frac{1}{n} \sum_{i=1}^{n} x_i^T U_k U_k^T x_i = \frac{1}{n} \sum_{i=1}^{n} u_j^T x_i x_i^T u_j\)。可以证明,该目标函数在\(U_k\)的列向量两两正交且为单位向量的约束下取得最大值时,\(U_k\)由协方差矩阵\(\Sigma\)的前k个最大特征值对应的特征向量组成。这与最大方差推导的结果完全一致。
这两种推导从不同角度揭示了PCA的本质——协方差矩阵的特征值分解,等价地,也等价于在均方误差意义下对原始数据的最佳线性近似。
15.3 协方差矩阵的特征值分解
设有p维随机向量\(x \in \mathbb{R}^p\),其协方差矩阵为\(\Sigma = E[(x - \mu)(x - \mu)^T]\),为p阶对称矩阵。设样本均值为\(\bar{x}\),样本协方差矩阵定义为:
对称矩阵的特征值分解(EVD)理论为PCA提供了数学基础。对于对称矩阵\(\Sigma\),必存在正交矩阵\(Q\)使得:
其中\(\Lambda = \text{diag}(\lambda_1, \lambda_2, \ldots, \lambda_p)\),\(\lambda_1 \geq \lambda_2 \geq \cdots \geq \lambda_p \geq 0\)为特征值,\(Q = [q_1, q_2, \ldots, q_p]\)为对应的标准正交特征向量矩阵。特征值\(\lambda_j\)度量了数据在对应特征向量方向上的方差大小。
根据特征值分解,前k个主成分(保留前k维)的投影矩阵为\(U_k = [q_1, q_2, \ldots, q_k]\)。降维后的数据为\(Y = U_k^T X \in \mathbb{R}^{k \times n}\),每一列为\(z_i = U_k^T (x_i - \bar{x})\)。当选择k个主成分时,重构数据为\(\hat{x}_i = \bar{x} + U_k z_i\),总重构误差为:
这一结果表明,丢弃后p-k个特征值对应的特征方向所引入的误差,等于被丢弃特征值的总和。这深刻揭示了特征值与降维误差之间的定量关系:当特征值迅速衰减时,仅保留前几个主成分即可很好地近似原始数据。
在实际计算中,直接对协方差矩阵进行特征值分解的复杂度为\(O(p^3)\)。当p非常大时这一计算成本很高。但我们注意到,PCA的计算可以绕过显式构造协方差矩阵——通过对数据矩阵X(n×p)直接进行奇异值分解(SVD)来实现,这将在后续章节详细讨论。
15.4 方差贡献率
方差贡献率是衡量各主成分相对重要性的指标,也是决定保留多少个主成分的关键依据。
15.4.1 单个主成分的方差贡献率
第j个主成分的方差贡献率定义为该主成分所解释的方差占总体方差的比例:
由于协方差矩阵的特征值之和等于矩阵的迹(Trace),即\(\sum_{i=1}^{p} \lambda_i = \text{tr}(\Sigma)\),因此方差贡献率也可以理解为该主成分方向上方差占总方差的比例。第一个主成分的方差贡献率最大,依次递减。前k个主成分的累计方差贡献率为:
15.4.2 主成分个数的选择
在实际应用中,累计方差贡献率是选择主成分个数k的主要依据。通常设定一个阈值(如85%、90%、95%等),选择使\(\Psi_k\)首次超过该阈值的k值。此外,还有一些辅助准则:
Kaiser-Harris准则建议保留特征值大于1的主成分(适用于相关系数矩阵)。这一准则基于这样的直觉:如果某个主成分的方差小于原始变量的平均方差(为1),则该主成分并没有提供比单个变量更多的信息。
碎石图(Scree Plot)准则通过绘制特征值随序号变化的曲线,寻找曲线"拐点"(elbow)来确定主成分个数。曲线下降趋于平缓之前的点通常被选为拐点。
交叉验证准则通过将数据分成训练集和验证集,评估不同k值下模型在验证集上的预测性能,选择使预测误差最小或泛化能力最强的k。
在实际问题中,累计方差贡献率准则最为常用。例如,当设定累计方差贡献率阈值为90%时,若前3个主成分的累计贡献率达到0.92,则选择k=3。
| 主成分 | 特征值 \(\lambda_j\) | 方差贡献率 \(\eta_j\) | 累计方差贡献率 \(\Psi_j\) |
|---|---|---|---|
| PC1 | \(\lambda_1\) | \(\lambda_1 / \sum \lambda_i\) | \(\eta_1\) |
| PC2 | \(\lambda_2\) | \(\lambda_2 / \sum \lambda_i\) | \(\eta_1 + \eta_2\) |
| PC3 | \(\lambda_3\) | \(\lambda_3 / \sum \lambda_i\) | \(\eta_1 + \eta_2 + \eta_3\) |
| \(\vdots\) | \(\vdots\) | \(\vdots\) | \(\vdots\) |
| PCp | \(\lambda_p\) | \(\lambda_p / \sum \lambda_i\) | 1 |
15.5 样本PCA与算法流程
15.5.1 样本主成分分析
在实际的机器学习和数据分析任务中,我们通常只有样本数据而不知道总体的协方差矩阵。此时需要用样本协方差矩阵来估计总体协方差矩阵,然后对样本协方差矩阵进行特征值分解,得到样本主成分。设样本数据矩阵为\(X \in \mathbb{R}^{p \times n}\)(每列一个样本,已中心化),样本协方差矩阵为:
对S进行特征值分解,得到特征值\(\hat{\lambda}_1 \geq \hat{\lambda}_2 \geq \cdots \geq \hat{\lambda}_p \geq 0\)及对应的特征向量\(\hat{u}_1, \hat{u}_2, \ldots, \hat{u}_p\)。第i个样本在第j个主成分上的投影为\(z_{ij} = \hat{u}_j^T x_i\)。
需要注意的是,当样本量n小于特征维度p时,样本协方差矩阵是奇异的(不满秩),此时特征值分解存在数值稳定性问题。针对这一问题,常见的解决方案包括:随机投影法、稀疏PCA、或先通过其他降维手段(如random projection)将数据投影到低维空间再进行PCA。
15.5.2 PCA算法步骤
完整的PCA算法流程如下:
输入:样本集\(D = \{x_1, x_2, \ldots, x_n\}\),低维空间维数k(1 ≤ k ≤ p)。
步骤1:数据中心化。计算样本均值\(\bar{x} = \frac{1}{n} \sum_{i=1}^{n} x_i\),将每个样本中心化:\(x_i \leftarrow x_i - \bar{x}\)。
步骤2:计算样本协方差矩阵。\(S = \frac{1}{n} \sum_{i=1}^{n} x_i x_i^T = \frac{1}{n} X X^T\)。
步骤3:特征值分解。对S进行特征值分解,特征值按降序排列\(\lambda_1 \geq \lambda_2 \geq \cdots \geq \lambda_p \geq 0\),对应的特征向量为\(u_1, u_2, \ldots, u_p\)。
步骤4:选择主成分。根据累计方差贡献率或其他准则确定保留的主成分个数k。构造投影矩阵\(U_k = [u_1, u_2, \ldots, u_k]\)。
步骤5:投影与输出。对每个样本\(x_i\),输出其k维主成分表示:\(z_i = U_k^T x_i \in \mathbb{R}^k\)。
可选步骤:重构。若需要重构原始数据,\(\hat{x}_i = \bar{x} + U_k z_i\)。
15.5.3 中心化与标准化
在进行PCA之前,数据预处理至关重要。中心化(将每个特征减去其均值)几乎是PCA的标准前置步骤,因为PCA寻找的是数据方差最大的方向,如果不中心化,第一主成分可能主要受均值方向的影响而非数据的真实变异结构。
此外,当各特征的量纲差异较大时(如一个特征取值在0-1之间,另一个在0-10000之间),协方差矩阵会被量纲较大的特征主导。此时需要进行标准化(每个特征减去均值再除以标准差),使各特征均值为0、方差为1。标准化后的协方差矩阵即为样本相关系数矩阵。标准化确保了PCA不会因人为的量纲选择而产生偏差,但同时也可能丢失特征的尺度信息,这在实际应用中需根据具体情况权衡。
15.6 PCA与SVD的关系
奇异值分解(Singular Value Decomposition,简称SVD)是线性代数中另一种重要的矩阵分解方法,与PCA有着深刻的内在联系。
15.6.1 SVD的定义
对于任意矩阵\(X \in \mathbb{R}^{p \times n}\),其奇异值分解为:
其中\(U \in \mathbb{R}^{p \times p}\)和\(V \in \mathbb{R}^{n \times n}\)为正交矩阵,\(\Sigma \in \mathbb{R}^{p \times n}\)为对角矩阵,其对角线元素\(\sigma_1 \geq \sigma_2 \geq \cdots \geq \sigma_{\min(p,n)} \geq 0\)称为奇异值。U的列向量称为左奇异向量,V的列向量称为右奇异向量。
15.6.2 PCA与SVD的等价性
考虑中心化后的数据矩阵\(X_c \in \mathbb{R}^{p \times n}\)(每列已中心化)。对\(X_c\)进行SVD:
则样本协方差矩阵\(S = \frac{1}{n} X_c X_c^T\)可以表示为:
其中\(\Sigma^2 = \text{diag}(\sigma_1^2, \sigma_2^2, \ldots)\)。由此可得,PCA的特征值与SVD的奇异值满足\(\lambda_i = \sigma_i^2 / n\)的关系。PCA的主成分方向(左奇异向量)正是SVD的左奇异向量。
15.6.3 计算优势与实践
SVD分解相比直接对协方差矩阵进行特征值分解具有显著的计算优势。对于大型矩阵,直接计算\(X X^T\)需要\(O(p^2 n)\)的存储和\(O(p^2 n)\)的计算量,而实际中通常只需要前k个主成分。SVD提供了一种"economy mode"——当n远小于p时(即样本量远小于特征维度),我们只需要计算前r个(r ≤ n)奇异值和奇异向量:
其中\(U_r \in \mathbb{R}^{p \times r}\),\(\Sigma_r \in \mathbb{R}^{r \times r}\),\(V_r \in \mathbb{R}^{n \times r}\)。这种分解方式避免了显式构造\(p \times p\)的协方差矩阵,直接从数据矩阵出发进行分解,特别适合n << p的高维低样本量场景(如基因表达数据、文本数据等)。此外,SVD在数值稳定性方面也优于直接对协方差矩阵进行特征分解。
scipy等库中的PCA实现(如sklearn的PCA类)内部均采用SVD来计算主成分,而非显式的特征值分解。
15.7 核主成分分析(KPCA)
15.7.1 非线性降维的需求
经典PCA是一种线性降维方法,它假设数据的内在结构可以通过线性投影来描述。然而,在许多实际问题中,数据的内在结构是非线性的。例如,Swiss roll(瑞士卷)数据集——一种常见的非线性流形数据——在高维空间中呈现出卷曲的几何结构,线性投影无法有效地展开和降维。对于这类数据,线性PCA往往效果不佳。
核主成分分析(Kernel PCA,简称KPCA)正是为了解决这一问题而提出的。KPCA的基本思想是:先将数据通过一个非线性映射\(\phi: \mathbb{R}^p \rightarrow \mathcal{H}\)映射到一个高维(甚至无限维)的特征空间\(\mathcal{H}\),然后在这个特征空间中进行线性PCA。由于特征空间维度很高,线性PCA在这个空间中的决策边界可能是原始输入空间中的非线性边界,从而实现非线性降维。
15.7.2 KPCA的数学推导
设非线性映射为\(\phi(x_i)\),映射后的数据中心化为\(\tilde{\phi}(x_i) = \phi(x_i) - \frac{1}{n} \sum_{j=1}^{n} \phi(x_j)\)。特征空间中的协方差矩阵为:
对\(\tilde{C}\)进行特征值分解:\(\tilde{C} v = \lambda v\)。展开后可得:
这意味着特征向量\(v\)位于\(\tilde{\phi}(x_i)\)的张成空间中,因此可以表示为\(v = \sum_{j=1}^{n} \alpha_j \tilde{\phi}(x_j)\)。将\(v\)代入特征方程,利用核函数\(k(x_i, x_j) = \phi(x_i)^T \phi(x_j)\)来计算内积,可以避免显式计算非线性映射\(\phi\)。经过推导,最终得到核特征值问题:
其中\(K \in \mathbb{R}^{n \times n}\)为核矩阵(Kernel Matrix),其元素\(K_{ij} = k(x_i, x_j)\),\(\alpha\)为对应的特征向量。解出\(\alpha\)后,第i个样本在第k个主成分上的投影为:
其中\(\tilde{K}\)为中心化后的核矩阵。
15.7.3 常用核函数
核函数的选择是KPCA的核心。常用的核函数包括:
多项式核:\(k(x, y) = (x^T y + c)^d\),其中c为常数,d为多项式阶数。
高斯核(RBF核):\(k(x, y) = \exp\left(-\frac{\| x - y \|^2}{2\sigma^2}\right)\),其中\(\sigma\)为带宽参数。高斯核将数据映射到无穷维特征空间,是最常用的核函数之一。
拉普拉斯核:\(k(x, y) = \exp\left(-\frac{\| x - y \|}{\sigma}\right)\)。
核函数的选择以及相应超参数(如高斯核的\(\sigma\))的调优,通常通过交叉验证等方法进行。
15.7.4 KPCA的局限
KPCA虽然能有效处理非线性降维,但也存在一些局限:首先,KPCA的计算复杂度为\(O(n^3)\)(核矩阵的特征值分解),难以扩展到大规模数据集;其次,核函数的选择和超参数的调优缺乏统一理论指导,高度依赖经验;最后,KPCA得到的主成分难以直接解释,因为它们位于特征空间中,而非原始的输入空间。
15.8 PCA的局限性
尽管主成分分析是应用最广泛的降维方法之一,但它并非万能,存在以下主要局限:
第一,线性假设的局限。PCA假设数据的变异结构可以通过线性组合来描述。对于非线性流形数据(如Swiss roll、helix等),线性PCA往往效果不佳。虽然KPCA等核方法可以在一定程度上缓解这一问题,但增加了计算复杂度和超参数调优的难度。
第二,方差最大化准则的局限。PCA以方差作为信息量的度量,这一假设在某些场景下并不成立。例如,在分类问题中,方差最大的方向未必是区分不同类别最有效的方向——那些在类间具有最大差异的方向可能方差并不大。线性判别分析(LDA)就是针对监督降维问题设计的,比PCA更适合此类任务。
第三,主成分的可解释性弱。PCA的主成分是原始特征的线性组合,通常难以给出明确的物理或语义解释。当需要解释降维结果的含义时,PCA的"黑箱"特性可能成为障碍。
第四,对异常值敏感。协方差矩阵对异常值(outliers)非常敏感,一个极端的异常值可以显著影响协方差矩阵的特征值和特征向量。稳健PCA(Robust PCA)通过使用协方差矩阵的鲁棒估计(如M估计)来应对这一问题。
第五,高计算与存储成本。对协方差矩阵进行特征值分解的复杂度为\(O(p^3)\),当特征维度p非常大时(如百万维的图像数据),计算和存储协方差矩阵都很困难。虽然可以通过SVD来间接计算,但当数据量也很大时,分布式计算和随机化算法(如Randomized PCA)仍是必要的。
第六,方向的正交性约束。PCA要求所有主成分方向两两正交,这一约束在某些应用中是多余的,甚至可能限制降维效果。例如,在某些流形学习中,允许非正交的降维表示可能更符合数据的内在几何结构。
15.9 小结
本章系统介绍了主成分分析(PCA)的理论基础和关键算法。PCA通过协方差矩阵的特征值分解,寻求使投影方差最大化的正交方向,从而实现数据的降维与特征提取。两种经典推导——基于最大投影方差和基于最小重构误差——从不同角度揭示了PCA的本质,两者是等价的。
方差贡献率和累计方差贡献率为主成分个数的选择提供了量化依据。实际应用中,样本PCA通过SVD高效实现,避免了显式构造和分解大型协方差矩阵。核主成分分析(KPCA)通过核技巧将PCA推广到非线性降维场景,极大拓展了PCA的适用范围。
然而,PCA的线性假设、方差最大化准则的适用性、主成分可解释性、对异常值的敏感性以及大规模数据上的计算挑战,都是实际应用中需要正视的问题。针对这些局限,研究者们提出了Kernel PCA、Robust PCA、Sparse PCA、Randomized PCA等多种改进方案,进一步丰富了降维技术的工具箱。
15.9 公式汇总表
| 编号 | 公式名称 | 公式形式 | 说明 | 类型 |
|---|---|---|---|---|
| (15.1) | PCA方差最大化 | \(\max_{\|\mathbf{v}\|=1} \mathbf{v}^T \mathbf{X}^T \mathbf{X} \mathbf{v}\) | 最大方差推导 | 目标 |
| (15.2) | 协方差矩阵 | \(\mathbf{S} = \frac{1}{n}\mathbf{X}^T\mathbf{X}\) | 样本协方差 | 定义 |
| (15.3) | 特征值分解 | \(\mathbf{X}^T\mathbf{X} = \mathbf{V} \boldsymbol{\Lambda} \mathbf{V}^T\) | PCA求解 | 公式 |
| (15.4) | 方差贡献率 | \(\eta_k = \frac{\lambda_k}{\sum_{i=1}^{D} \lambda_i}\) | 第k主成分贡献率 | 指标 |
| (15.5) | 累计贡献率 | \(\sum_{i=1}^{k} \eta_i \geq 85\%\) | 主成分个数选择准则 | 准则 |
| (15.6) | 重构误差 | \(\|\mathbf{X} - \hat{\mathbf{X}}\|_F^2 = \sum_{j=k+1}^{D} \lambda_j\) | 重构误差 | 误差 |
| (15.7) | KPCA核矩阵 | \(\mathbf{K} = \phi(\mathbf{X})^T \phi(\mathbf{X})\) | 核PCA核矩阵 | 公式 |
| (15.8) | KPCA投影 | \(z_i = \sum_{j=1}^{n} \alpha_j k(\mathbf{x}_j, \mathbf{x}_i)\) | KPCA投影系数 | 公式 |