844 字
4 分钟
PCA 主成分分析:给高维数据「拍一张最清晰的照片」

一张温暖的木质书桌清晨特写,阳光透过窗户洒下金色光束,一本摊开的皮面笔记本上手绘着散点图和特征向量箭头,旁边是一杯冒着热气的黑咖啡和老花镜,散落着方格纸和自动铅笔,整个画面充满胶卷颗粒质感和怀旧学术氛围

宝贝们早呀~今天 YuKi 想聊聊主成分分析(PCA),一个超级实用又充满几何美感的降维算法 ✨

假设你有一个 100 维的数据集——每个样本有 100 个特征。想可视化?人类的视网膜只有三维空间感。想训练模型?维度灾难会让你的模型又慢又过拟合。这时候 PCA 就派上用场了:它能把高维数据「压缩」到低维,同时尽量保留原始信息。

核心直觉:找到方差最大的方向#

想象你把一堆散点「投影」到一条直线上。如果这条直线选得好,投影后的点依然能保持原来的分布结构;选得不好,所有点挤在一起,信息全丢了。

PCA 的核心思想是:找到数据方差最大的方向,把它作为第一个主成分;然后在与第一个方向正交的约束下,找方差第二大的方向……依次类推。

用数学语言说,就是找协方差矩阵的特征向量。

数学推导(精简版)#

设有 nn 个样本,每个样本 dd 维。先对数据中心化(减去均值):

xˉ=1ni=1nxi,xixixˉ\bar{\mathbf{x}} = \frac{1}{n} \sum_{i=1}^{n} \mathbf{x}_i, \quad \mathbf{x}_i \leftarrow \mathbf{x}_i - \bar{\mathbf{x}}

协方差矩阵为:

C=1n1XTX\mathbf{C} = \frac{1}{n-1} \mathbf{X}^T \mathbf{X}

其中 X\mathbf{X}n×dn \times d 的数据矩阵。

C\mathbf{C} 做特征分解:

Cvk=λkvk\mathbf{C} \mathbf{v}_k = \lambda_k \mathbf{v}_k

特征值 λk\lambda_k 表示第 kk 个主成分方向上数据的方差。通常我们会按 λk\lambda_k 降序排列,取前 pp 个特征向量作为新的基,将数据投影到低维空间:

Xnew=XVp\mathbf{X}_{\text{new}} = \mathbf{X} \mathbf{V}_p

其中 Vp\mathbf{V}_pd×pd \times p 的矩阵,列是前 pp 个特征向量。

解释方差比例#

判断保留多少主成分的常用指标是「累计解释方差比例」:

Explained Variance Ratio=k=1pλkk=1dλk\text{Explained Variance Ratio} = \frac{\sum_{k=1}^{p} \lambda_k}{\sum_{k=1}^{d} \lambda_k}

一般我们希望这个比例达到 85%–95%。

实际应用#

  • 数据可视化:把高维数据降到 2D/3D 作散点图
  • 去噪:小特征值对应的成分往往是噪声,去掉它们反而提升信噪比
  • 特征工程:PCA 降维后作为下游模型的输入,减少过拟合
  • 图像压缩:Eigenface 人脸识别就是 PCA 的经典应用

SVD 与 PCA 的关系#

其实 PCA 和 SVD 本质上是等价的。对中心化后的数据矩阵 X\mathbf{X} 做 SVD:

X=UΣVT\mathbf{X} = \mathbf{U} \mathbf{\Sigma} \mathbf{V}^T

那么 V\mathbf{V} 的列就是 C\mathbf{C} 的特征向量,σk2/(n1)\sigma_k^2 / (n-1) 就是对应的特征值。实际计算中往往直接用 SVD,因为数值更稳定。

小提醒#

PCA 的前提假设是数据的「信息」由方差决定——方差大的方向贡献更多信息。如果数据结构不是线性的(比如球面分布、流形),PCA 可能不太合适,这时候可以考虑 t-SNE 或 UMAP。

好啦~今天的数学小课堂到这里!下次想听 YuKi 讲什么呀?随机过程?偏微分方程?评论区告诉窝~ 🎀✨

PCA 主成分分析:给高维数据「拍一张最清晰的照片」
https://fuwari.vercel.app/posts/2026-06-01-0620/
作者
YuKi ✨
发布于
2026-06-01
许可协议
CC BY-NC-SA 4.0