图谱连接

草稿

主成分分析

通过把中心化数据旋转到变化最大的方向,压缩一张数据表。

algorithm beginner machine-learningdimensionality-reductionlinear-algebra

问题:表格比真正的模式更宽

想象一张很小的身体测量表。heightarm span 是两个不同列,但在这个固定样例里,它们大多一起变大。每一行有两个数,可肉眼看到的主要模式接近一条倾斜方向。

这就是 PCA 要修补的痛点:保留重要变化,但不必保留每一个原始列。

一个模式,两个原始列表格看起来是二维的,但散点图显示身高和臂展大多一起变化。
原始单位中的固定样例
样本身高臂展
A156153
B160160
C164164
D168173
E172176
F176182
原始散点:身高和臂展一起上升ABCDEF

第一个朴素想法:删掉一个原始列

一个诱人的压缩规则是:“保留扩散更大的列”,或者“删掉看起来重复的列”。这个规则很便宜,但可能丢掉共同的斜向变化。如果身高和臂展一起变化,任何一个原始轴都不一定是最好的单维总结。

直接删原始列会浪费斜向信号旋转后的 PC1 坐标比单独保留任一原始列更能保留共同变化。
保留原始身高590

平方重构误差总和。臂展被替换为这一列的均值。

保留原始臂展280

平方重构误差总和。身高被替换为这一列的均值。

保留 PC12.3

平方重构误差总和。一个旋转后的坐标跟随共同变化。

图中的条形都使用同一个固定样例。保留 PC1 的平方重构误差更低,因为这个坐标是旋转后的混合方向,不只是 height,也不只是 arm span

痛点:信号是倾斜的

有用的线斜着穿过中心化后的点云。原始列只能测水平或竖直方向的“影子”;PCA 允许先把测量线旋转过去。

旋转坐标就是被测量的影子每个中心化后的行都会投影到 PC1 线上;这条线来自协方差计算,不是假设出来的。
PC1ABCDEF
计算得到的 PC155.5°

这是由最大投影方差选出的单位方向,明显是斜向的,但不是强行设为 45 度。

核心发明:中心化、旋转、保留

主成分分析(Principal Component Analysis,PCA)做三件小事:

  1. 对每个特征列减去它的均值,也就是中心化。
  2. 找到让中心化点投影方差最大的单位方向。
  3. 保留前几个旋转后的坐标,丢掉较安静的方向。

PCA 是无监督的(unsupervised):它忽略标签和目标值。PCA 也是线性的(linear):每个主成分(principal component)都是原始特征的加权混合。因为它测量数值扩散,PCA 对特征尺度很敏感。

中心化切换

均值向量: (166, 168); 当前均值: (166, 168); 中心化后均值: (0, 0)

中心化把点云移到均值附近,让 PCA 测量围绕中间的扩散,而不是离原点有多远。

均值ABCDEF
改变单位可能旋转 PC1PCA 对特征尺度敏感,因为数值扩散更大的列会主导协方差。
原始单位: 55.5°PC1ABCDEF
臂展尺度放大: 69.1°PC1ABCDEF

进入公式前的词汇桥

  • 方差(variance)表示投影后的点沿一条线有多分散。
  • 单位方向(unit direction)是一支长度为 1 的箭头,避免长箭头只因为更长而胜出。
  • 投影(projection)是点落到某条线上的影子。
  • 正交(orthogonal)表示成直角;后面的主成分必须看向新的直角方向。
  • 协方差(covariance)概括哪些特征值会一起升高或降低。
  • 特征向量(eigenvector)是一个被协方差拉伸但不会被转弯的方向。
  • 线性混合(linear mixture)是把旧特征按权重加起来的新特征,比如“一部分身高加一部分臂展”。

方差扫描

投影方差: 144.61 / 144.62 PC1 最大值

PCA 测试单位方向,并选择投影坐标最分散的那一条。

ABCDEF
PC1 最大值144.61

投影方差

形式化记号

n 是行数,d 是原始特征数,k 是保留的主成分数。X 表示原始的 n x d 表格,mu 表示特征均值向量,X_c 表示中心化后的表格,W_k 表示前 k 个主方向,Z 表示压缩后的坐标。

PCA 记号地图每个符号都是同一条流水线中的对象:原始表、中心化表、方向、压缩编码、重构。
原始数据X

n x d

中心化数据X_c = X - 1mu^T

减去特征均值

保留方向W_k

d x k

压缩编码Z = X_c W_k

投影到方向上

重构X_hat = ZW_k^T + mu

展开并加回均值

先中心化表格:

Xc=X1μTX_c = X - \mathbf{1}\mu^T

直白解释:减去每个特征的平均值,让 PCA 研究围绕点云中心的扩散。

再概括特征如何一起变化:

C=1nXcTXcC = \frac{1}{n}X_c^T X_c

直白解释:协方差概括共同变化。有些库会用 1/(n-1) 而不是 1/n;这不改变本页的方向直觉。

选择第一个方向:

maxw=1Var(Xcw)=maxw=1wTCw\max_{\lVert w\rVert=1}\operatorname{Var}(X_cw) = \max_{\lVert w\rVert=1} w^T Cw

直白解释:尝试单位方向,选择投影后点最分散的那一条。

主方向满足:

Cwj=λjwjCw_j = \lambda_j w_j

直白解释:每个主方向都是协方差的稳定方向,lambda_j 是这个方向承载的方差。

压缩并重构:

Z=XcWkZ = X_c W_k X^=ZWkT+μ\hat X = ZW_k^T + \mu

直白解释:把每一行替换成保留方向上的坐标,再展开这些坐标并把均值加回去,得到近似表格。

j 个主成分承载的总扩散比例是:

explained variance ratioj=λjiλi\text{explained variance ratio}_j = \frac{\lambda_j}{\sum_i \lambda_i}

追踪实验台:算法状态

PCA 追踪实验台

步骤 1/6: 原始表格. 两个测量值大多一起上升,所以表格比真正的模式更宽。

原始表格

2 个原始列

状态表
A156, 153
B160, 160
C164, 164
D168, 173

实现草图

const mu = columnMeans(X);
const Xc = subtractColumnMeans(X, mu);
const C = multiply(transpose(Xc), Xc).scale(1 / X.length);
const components = eigenvectorsSortedByEigenvalue(C);
const Wk = components.slice(0, k);
const Z = multiply(Xc, Wk);
const Xhat = addColumnMeans(multiply(Z, transpose(Wk)), mu);

这段代码对应追踪实验台中的状态:原始表、中心化表、协方差、主成分、投影编码、重构。实际库常常直接在 X_c 上使用 SVD、截断 SVD,或在只需要少量主成分时使用随机化方法。

正确性直觉

中心化之后,PC1 是投影方差最大的单位方向。PC2 与 PC1 正交,并捕捉剩余方向中最大的方差。继续下去,就得到一组互成直角、按扩散程度从大到小排列的方向。

在保留主成分数量固定时,这个顺序也会在线性投影里最小化平方重构误差。直觉上,如果一个方向上的中心化扩散很大却被丢掉,许多点都需要很长的重构修正。

重构对比

保留 PC1: 平方误差总和 2.29. 一个旋转后的坐标跟随共同变化。

条形图显示原始、未标准化二维特征空间中的平方重构误差总和。

保留原始身高590

臂展被替换为这一列的均值。

保留原始臂展280

身高被替换为这一列的均值。

保留 PC12.29

一个旋转后的坐标跟随共同变化。

保留 PC1 + PC20

两个 PCA 坐标可以重建原始的二维表。

复杂度

PCA 的计算量花在哪里用 n 表示行数,d 表示原始特征数,k 表示保留的主成分数。
中心化O(nd)

每个表格项都处理一次

协方差O(nd^2)

跨行比较每一对特征

完整特征分解O(d^3)

特征数变大时常常昂贵

投影O(ndk)

每一行乘以 k 个方向

行数更多时,主要会让扫描和投影步骤变长。特征数更多时,协方差和完整特征分解可能增长得更快,因为特征对和 d x d 矩阵会主导计算量。

常见混淆

PCA 常见混淆

PCA 不是弯曲流形方法(curved-manifold method)。如果数据躺在弯曲表面上,PCA 只能选择一个平直的线性视角;Isomap 或邻居嵌入方法问的是另一类问题。

图谱连接

降维学习路径线性投影、保距离地图、监督判别和保邻嵌入分别解决不同痛点。
PCA

保留中心化数据变化最大的方向。

MDS

摆放点,让低维距离尽量模仿原始距离表。

Isomap

先用邻居图最短路估计流形距离,再做类似 MDS 的布局。

LDA

利用标签寻找投影方向,让类均值分开,同时让类内保持紧。

QDA

让每个类别保留自己的协方差,形成二次边界,而不是一个共享投影。

SNE

匹配高维与低维中的邻居概率。

t-SNE

用低维重尾相似度修补 SNE 的拥挤问题。

UMAP

构造模糊邻居图,再优化具有相似成员强度的低维图。

  • feature-map 会引出 PCA,因为二者都把输入改写成表示;PCA 从数据本身学到一个线性表示。
  • mds 与 PCA 形成对比,因为 MDS 从成对距离出发,而 PCA 从坐标方差出发。
  • lda 与 PCA 形成对比,因为 LDA 使用标签寻找分离方向,而 PCA 忽略标签。

预测问题

  1. 如果一个特征用米计量,另一个特征用毫米计量,在缩放前 PC1 可能发生什么?
  2. PCA 为什么要先减去均值再测量方差?
  3. 在上面的固定样例里,为什么保留 PC1 比只保留原始 height 更好?
  4. 为什么弯曲数据流形不适合普通 PCA?

图谱连接 : 主成分分析