01 核心原理(大白话版)

你手里有一张照片,需要发给朋友,但文件太大传不过去。你把图片压缩一下——画面主体还在,细节丢了一些,但整体信息基本保留。

PCA 做的是同一件事:把高维数据"压缩"成低维,但优先保留最重要的信息

关键问题是:什么叫"最重要"?PCA 的答案是——方差最大的方向最重要。数据在某个方向上变化越大、越分散,那个方向包含的信息就越多。把数据投影到这个方向上,就能用更少的数字表达更多的内容。

四步走完 PCA

1
中心化

把所有数据点都减去均值,让数据的"重心"移到原点。这样方向比较才有意义。

2
算协方差矩阵

协方差矩阵记录了每对特征之间的相关程度——哪两个维度总是一起变化,哪两个维度互相独立。

3
求主成分方向(特征向量)

对协方差矩阵做特征分解,得到若干个互相垂直的方向(主成分)。对应特征值越大,那个方向的方差越大、信息越多。

4
投影降维

把数据投影到前 k 个主成分方向上,原来 100 维的数据可能只需要 2~3 维就能保留 95% 的信息。

运行下面的代码,可以看到完整的四步过程:原始散点图 → 中心化后移到原点 → 红线标出 PC1 主方向 → 所有点垂直投影到主轴上。

降多少维合适?

看"方差解释比例"

每个主成分都有一个方差解释比例。前 k 个主成分加起来解释了 95% 的方差,通常就够了,剩下 5% 大多是噪声。

用"碎石图"辅助判断

把各主成分的特征值从大到小画出来,曲线出现明显"肘部"的位置,就是合适的维数截断点。

一步步构建 PCA

第一步 生成斜向椭圆形数据

主轴沿 45° 方向的椭圆,主成分方向明显,正好用来演示 PCA 如何找到这个隐藏的"主方向"。

第二步 中心化:重心移到原点

减去均值让所有方向的比较在同一起点上。不中心化,主成分方向会被均值偏移污染。

第三步 协方差矩阵 + 特征值分解

协方差矩阵捕捉各维度的相关性,特征向量就是主成分方向,特征值越大说明该方向信息越多。

第四步 投影到 PC1 完成降维

把每个点投影到 PC1 方向(点积),2D 数据变成 1D 坐标,同时记录保留了多少方差。

四段拼在一起,加上可视化,就是完整演示代码——看下面。

02 代码

03 学术性讲解

PCA(主成分分析)是一种常用的降维方法。它的核心思想是:找到数据中方差最大的方向,把高维数据投影到低维空间,同时尽量保留信息。

为什么需要降维?

  • 可视化:将高维数据降到 2-3 维进行可视化
  • 压缩:减少存储空间
  • 加速:减少计算量
  • 去噪:去除噪声和冗余特征

主成分是什么?

主成分是数据中方差最大的方向。第一主成分是数据分布最"长"的方向,第二主成分是与第一主成分正交的方向中方差最大的。

PC1 PC2 主成分:数据方差最大的方向

算法步骤

1
数据中心化

把每个特征减去它的均值,让数据中心移到原点

2
计算协方差矩阵

反映各特征之间的相关程度

3
求特征值和特征向量

特征向量表示主成分方向,特征值表示该方向的重要性

4
选择主成分

按特征值大小排序,选择前 k 个作为主成分

PCA 降维演示

将 2D 数据降到 1D,观察主成分方向。左侧为原始数据与主成分方向,右侧为降维后的 1D 投影:

降维结果

PC1 方向
--
PC2 方向
--
方差解释比例
--

总结

目标

最大化方差

输入

高维数据

输出

低维投影

评估

方差解释比例