Skip to content
知识

/knowledge/pca-dimensionality-reduction

PCA 与降维

大多数高维数据其实悄悄地活在一个更低维的曲面上。PCA 找到那个曲面——承载信号的少数几个方向——让你几乎无损地把其余部分丢弃。

学于
多元统计——PCA数据科学硕士(83/H1)
时间
墨尔本大学,2023–2024
应用于
聚类前处理 · 压缩 · 探索性分析
阅读 / 复习
约 16 分钟阅读2026-06-25

真实的数据集很宽——成百上千列——但其中大多数列都是相关的、冗余的,或是噪声。降维把这种宽度压缩成少数几个捕捉真正变化的方向,而主成分分析(PCA)就是经典的、线性的做法。它正是特征向量的线性代数与方差的统计学相遇并变得真正有用之处。

收益无处不在:更快的模型、你真正看得见的图、去噪的数据,以及对那些会拖垮回归的相关特征问题的一剂 解药。本页从头构建 PCA——为什么高维有害、「主成分」究竟意味着什么,以及数学到底是 如何找到它们的。

01

维度灾难

高维空间极其反直觉,而且它以一个有名字的方式与你作对:维度灾难。 随着你添加特征,空间的体积呈指数增长,于是你的数据点变得无可救药地稀疏——一切 都离一切很远,而支撑聚类与最近邻的「邻近」概念悄然失效。

具体而言,更多维度意味着:

  • 稀疏性——你需要指数级更多的数据才能稠密地覆盖空间,所以模型几乎 无从学习。
  • 距离集中——在高维中,最近和最远的点最终几乎等距,于是相似性变得 毫无意义。
  • 过拟合与开销——更多特征给模型更多拟合噪声的途径,而且一切都变慢。

可取之处在于,真实数据很少填满它的空间。一张人脸照片中的像素、一份问卷上的答案、 传感器读数——它们高度相关,所以数据实际上聚集在高维盒子内部一个低得多维的曲面上。 PCA 的工作就是找到那个曲面。

02

核心思想:方差即信号

PCA 建立在一个假设之上:数据变化最大的方向,信息量也最大。一个对每个 点都相同的特征什么也没告诉你;一个把点拉得很开的特征则承载着区分它们的信息。所以 PCA 寻找新的坐标轴——按数据沿它们变化多少来排序——只保留最靠前的几个。

这些新的坐标轴,即主成分,有两个定义性属性:每一个都指向剩余方差最大 的方向,而且它们彼此正交(相互垂直,因而不相关)。第一个捕捉最多的 离散,第二个捕捉剩下的最多,以此类推。保留头两三个,你就以一种可以低成本绘图与 计算的形式,保留了结构的主体。

PC1PC2
二维点云上的 PCA。数据是相关的,所以它沿一条对角线伸展。PC1 是方差最大的方向;PC2 与它正交。仅投影到 PC1 上就保留了大部分离散——一次几乎无损的 2D → 1D 降维。

03

方差与协方差矩阵

要找到方差最大的方向,你首先需要衡量各特征是如何一起变化的。先把数据中心化——减去每个特征的均值,让点云坐落在原点。然后协方差矩阵概括了所有成对的关系:对于一个有 nn 行的中心化数据 矩阵 XX

C=1n1XXC = \frac{1}{n-1}\, X^{\top} X

C 是对称的 d×d 矩阵(每个特征一行/一列)。它的对角线是每个特征的方差;非对角线是协方差。

每个对角元 CiiC_{ii} 是特征 ii 的 方差;每个非对角元 CijC_{ij} 是特征 ii jj 之间的协方差——若它们 同涨为正,若一涨一跌为负。这一个矩阵编码了数据点云的整个形状,而主方向就藏在 它里面。

04

主成分

这就是让 PCA 奏效的优雅结果:主成分恰恰是协方差矩阵的特征向量,而每一个的特征值就是沿它捕捉到的方差。

Cvi=λiviC\,\mathbf{v}_i = \lambda_i\,\mathbf{v}_i

把特征向量按它们的特征值从大到小排序,你就得到了按重要性排列的新坐标轴:v1\mathbf{v}_1(第一主成分)是方差最大的方向,v2\mathbf{v}_2 是次大的,以此类推——每一个都自动与其余正交, 因为对称矩阵的特征向量总是如此。在数据上最大化方差就是求解这个特征值 问题;这就是整个定理,一行话。

05

SVD 路径

实践中你很少真的构造协方差矩阵——你直接对中心化数据运行奇异值分解,因为它在数值上更稳定:

X=UΣVX = U\,\Sigma\,V^{\top}

VV 的各列恰恰是主成分,而 Σ\Sigma 中奇异值的平方与特征值成正比——所以 SVD 在一个稳定的步骤里就把成分及其方差交给你。 这正是线性代数页中那个「旋转–拉伸–旋转」的分解;PCA 是它最重要的应用之一。

06

保留多少个成分

降维意味着选择在哪里切。标准工具是解释方差比例:每个成分的特征值占 总数的份额,告诉你它承载了多少信息。

explainedi=λijλj\text{explained}_i = \frac{\lambda_i}{\sum_{j} \lambda_j}

把特征值按降序画出来,你就得到一张碎石图:它通常先陡降然后变平,而 「拐点」标出额外成分不再值回票价的位置。一个常见规则是保留足够的成分以留住总方差 的 90–95%——这个数字往往小得惊人,因为真实数据太相关了。

拐点 → 保留 3 个成分 →
一张碎石图。每个成分的解释方差快速衰减;「拐点」(这里在约 3 个成分之后)就是你停手的地方——后面的成分大多是噪声。

07

投影与重构

一旦你选定了前 kk 个成分,把它们作为列堆成一个矩阵 WW,并把你的数据投影到它们上——一次简单的 矩阵相乘,把每一个 dd 维的行变成 kk 个数字:

Z=XW(n×k, with kd)Z = X\,W \qquad (n \times k,\ \text{with } k \ll d)

ZZ 就是你压缩后的数据集——行数相同、列数少得多,每一个 新列都是一个互不相关的主成分得分。你也可以反向运行 X^=ZW\hat{X} = Z\,W^{\top},从你保留的少数几个成分重构出原始数据的一个近似。XX X^\hat{X} 之间的差距,恰恰是你丢弃的方差——这就是为什么 对于图像或数据压缩,保留头部成分能用一小部分数字存下几乎整幅图。

08

PCA 做不到什么

PCA 很强大,但它有实实在在的盲区,懂得它们才能阻止你误用它:

  • 它是线性的。PCA 只能找到平直(线性)的结构。卷曲在弯曲流形上的数据 (一条螺旋、一条 S 曲线)会让它失效——这时你就要转向 t-SNE、UMAP 或核 PCA 等 非线性方法。
  • 成分不可解释。一个主成分是所有原始特征的混合,所以「PC1」很少对应 一个有意义的现实量。你用可解释性换取了紧凑性。
  • 方差不总等于相关性。PCA 假设高方差的方向最重要,但对于一个分类任务,区分各类的信号可能恰好住在 PCA 丢弃的某个低方差方向里。 (那正是 LDA 的用武之地。)
  • 它对尺度敏感——即上文那条标准化的注意事项。

09

它在我工作中的体现

10

60 秒回顾