
19世纪末到20世纪初,统计学家(最典型的是Pearson那篇论文)遇到一个很具体的麻烦:他们手里有一批样本,每个样本身上量了好几个指标(比如同一批人的身高、体重、头围、坐高......),这些指标彼此并不独立------量了身高,某种程度上就能猜个大概体重。当时的困扰是:这些指标高度"重叠信息",但没人知道怎么用一个数学上站得住脚的办法,把重叠的部分"挤掉",只留下真正独立、有信息量的少数几个新指标。
我们把这个问题压到最小、最具体的情形------上面那张图,就是这个情形:160名学生的身高体重散点图。你已经能看到,这团点不是正圆形,而是斜向右上方拉长的一片"云"。
PCA 主成分分析(Principal Component Analysis)
一、学习目标
学完本节内容后,你应该能够:
- 用自己的语言解释"降维"和"主成分分析(PCA)"的直观含义,而不是死记硬背公式。
- 说出 PCA 涉及的关键概念------方差、协方差、协方差矩阵、特征值、特征向量、投影,并解释它们之间的联系。
- 按照"标准化 → 求协方差矩阵 → 求特征值和特征向量 → 选择主成分个数 → 投影得到新数据"的步骤,独立完成一个小规模数据集的 PCA 手工计算。
- 根据"方差解释率(贡献率)",合理判断应该保留几个主成分。
- 清楚区分 PCA 与因子分析、特征选择等容易混淆的概念,不再张冠李戴。
- 至少能举出 2 个 PCA 在实际生活或工作中的应用场景(如数据可视化、图像压缩、去噪、聚类前处理等)。
二、知识点导入
某高中期末要评选"年级学习标兵",年级主任拿到了每个学生 7 门课的成绩:语文、数学、英语、物理、化学、生物、政治。
他想给每个学生算一个"综合能力值"用来排名,但很快遇到了麻烦:
- 直接把 7 门成绩加起来合理吗?------ 不一定。比如某次数学考试全年级都考得很好,大家分数都挤在 90~95 分之间,这门课其实分不出谁更强 ;而物理这次考试全年级分数从 40 到 98 分都有,差异非常明显。如果简单相加,数学和物理"同等重要"地被加总,显然没有充分利用物理这门课"信息量更大"的特点。
- 7 门成绩之间还互相关联------数学好的学生往往物理、化学也不差,这些科目在某种程度上"说的是同一件事",重复计算了。
于是问题来了:
能不能找到一两个"新的综合指标",来代替这 7 门成绩,并且这个新指标还能尽量保留原始数据中"学生与学生之间差异"的信息?
这正是本节课要解决的问题------在信息损失尽可能小的前提下,把很多个变量"压缩"成少数几个更有代表性的新变量。这套方法,就是 PCA(主成分分析)。
三、核心概念讲解
1. 直观理解:先从一个"拍照"的类比说起
想象你手里有一个"哑铃形状"的物体悬在空中,你只能用一台相机给它拍一张平面照片,但你希望这张照片尽可能完整地体现出这个物体的形状信息。
- 如果你从侧面 拍:哑铃的长度、两头球的大小都能看得清清楚楚,这张照片信息量很大。
- 如果你正对着哑铃的一端 拍:照片里看到的只是一个圆点,哑铃的长度信息完全丢失 ,这张照片信息量很小。
PCA 做的事情,本质上就是帮你自动找到那个"信息量最大的拍摄角度"。在数学上,这个角度叫主成分方向------沿着这个方向看过去,数据点之间的差异(方差)最大,也就是最能区分开不同的数据点。
回到开头的例子:7 门课就像 7 个观察维度,PCA 帮你找到 1~2 个"新的综合视角"(主成分),从这个视角看过去,学生之间谁强谁弱的差异体现得最清楚。
2. 正式定义
主成分分析(PCA) 是一种通过线性变换,将原始的、可能相互关联的多个变量,转换为一组新的、彼此不相关的变量(称为"主成分")的方法。这些主成分按照其能解释的原始数据方差大小从高到低排序,通常只需保留前几个主成分,就可以用较少的维度保留原始数据中的大部分信息(方差)。
3. 几个必须先搞懂的术语
不要被术语吓到,下面逐一拆解:
| 术语 | 通俗理解 |
|---|---|
| 方差(Variance) | 衡量一组数据"分散程度"的指标。方差越大,说明这组数据里个体之间差异越明显,包含的信息越多。 |
| 协方差(Covariance) | 衡量两个变量"一起变化的趋势"。两者总是同增同减,协方差为正;一增一减,协方差为负;没什么关系,协方差接近 0。 |
| 协方差矩阵 | 把所有变量两两之间的协方差(包括自己和自己,也就是方差)排成一张表格(矩阵)。 |
| 特征值 / 特征向量 | 从协方差矩阵中,可以数学地求解出一组特殊的"方向"(特征向量),以及数据在这些方向上的"分散程度"(特征值)。特征值越大,说明这个方向上数据差异越大,越值得保留为主成分。 |
| 投影 | 把原始数据点"拍扁"到某个新方向上,得到的新坐标值。 |
一张简单的示意图(以两个变量为例):
y轴
5 | D
4 | C
3 | ← 这条虚线方向,就是PCA找到的"第一主成分方向"
2 | B (把数据点投影到这条线上,几乎不损失差异信息)
1 | A
0 +---------------------------- x轴
0 1 2 3 4 5
可以看到,A、B、C、D 四个点几乎排在一条斜线上。这条斜线的方向,就是数据"最舒展、差异最大"的方向------也正是 PCA 要找的第一主成分方向。
四、关键原理或步骤
给定一个有 n 个样本、p 个变量的数据集,PCA 的标准流程是这样的:
第一步:数据标准化(中心化,必要时还要缩放)
做什么 :把每个变量减去它自己的均值(中心化),如果各变量的量纲或尺度差异很大(比如"年收入"单位是万元,"年龄"单位是岁),还需要再除以该变量的标准差(标准化)。
为什么这样做:PCA 是根据"方差大小"来判断哪个方向重要的。如果不做标准化,单位大、数值范围大的变量(比如收入)方差天然就很大,会"喧宾夺主"地主导主成分方向,掩盖住其他变量(比如年龄)中真正重要的模式。中心化则是数学上求协方差、求主轴的必要前提(协方差的定义本身就是基于"偏离均值的程度")。
第二步:计算协方差矩阵
做什么:计算所有变量两两之间的协方差,组成一个 p×p 的对称矩阵。
为什么这样做:协方差矩阵完整地记录了变量内部的"分散程度"(方差,矩阵对角线)和变量之间的"关联程度"(协方差,矩阵非对角线)。PCA 要找的主成分方向,正是要同时考虑这两方面信息才能确定。
第三步:求协方差矩阵的特征值和特征向量
做什么:对协方差矩阵做特征值分解,得到 p 个特征值和对应的 p 个特征向量。
为什么这样做:可以证明,协方差矩阵的特征向量,恰好就是使投影后数据方差最大(且各方向互不相关)的那些方向;对应的特征值,恰好就是数据在该方向上投影后的方差大小。这是一条数学定理,PCA 的核心计算正是"借用"了这条定理,把"找方差最大的方向"这个优化问题,转化成了"求矩阵特征值和特征向量"这个可以直接计算的问题。
第四步:按特征值从大到小排序,决定保留几个主成分
做什么 :将特征值从大到小排序,特征值最大的对应"第一主成分",第二大的对应"第二主成分",以此类推。计算每个主成分的方差解释率 = 该特征值 ÷ 所有特征值之和,以及累积方差解释率。
为什么这样做:特征值越大,说明沿这个方向数据的差异(信息量)越大,越应该优先保留。我们希望用尽量少的主成分,解释尽量多的总方差(比如保留能解释 80%~90% 总方差的前几个主成分),这样就在"降维"和"保留信息"之间找到了一个平衡点。
第五步:将原始数据投影到选定的主成分方向上
做什么:用中心化后的原始数据,分别与选定的每个特征向量做内积(投影),得到新的、维度更低的数据表示。
为什么这样做:这一步是"降维"真正发生的地方------原来 p 个变量的一条记录,现在变成了 k 个(k < p)主成分得分,且这 k 个新变量彼此不相关,同时尽可能保留了原始数据里的差异信息。
五、例题 / 案例
例题 1(基础):两个变量的手工计算
题目:某小组 4 名学生的两次测验成绩(x:小测成绩,y:大测成绩)如下:
| 学生 | x | y |
|---|---|---|
| A | 1 | 1 |
| B | 2 | 2 |
| C | 3 | 4 |
| D | 4 | 5 |
请手工完成 PCA 的前几步计算,并说明:如果只保留第一主成分,能保留多少比例的信息?
思路分析:这是一个只有 2 个变量、4 个样本的最小案例,目的是让你完整走一遍"中心化 → 协方差矩阵 → 特征值 → 方差解释率 → 投影"的全过程,建立手感。
详细解答:
① 中心化:均值 x̄ = (1+2+3+4)/4 = 2.5,ȳ = (1+2+4+5)/4 = 3
中心化后数据:A(-1.5, -2),B(-0.5, -1),C(0.5, 1),D(1.5, 2)
② 计算协方差矩阵(样本协方差,除以 n-1=3):
- Cov(x,x) = (-1.5)²+(-0.5)²+0.5²+1.5² / 3 = 5/3 ≈ 1.667
- Cov(y,y) = (-2)²+(-1)²+1²+2² / 3 = 10/3 ≈ 3.333
- Cov(x,y) = (-1.5)(-2)+(-0.5)(-1)+0.5×1+1.5×2 / 3 = 7/3 ≈ 2.333
协方差矩阵:
C = | 1.667 2.333 |
| 2.333 3.333 |
③ 求特征值:解方程 λ² - 5λ + 1/9 = 0(迹=5,行列式=1/9),得:
- λ₁ ≈ 4.978(第一主成分对应)
- λ₂ ≈ 0.022(第二主成分对应)
④ 方差解释率:总方差 = λ₁+λ₂ = 5(正好等于协方差矩阵对角线之和)。
第一主成分解释率 = 4.978 / 5 ≈ 99.5%
也就是说,只用 1 个新变量(而不是原来的 2 个),就能保留原始数据里约 99.5% 的差异信息,几乎没有损失!这也印证了我们前面示意图里的直觉:这 4 个点本来就几乎排在一条直线上,用一维(一条线)就足够描述它们的差异了。
⑤ 求第一主成分方向并投影:解得第一主成分对应的单位特征向量约为 (0.576, 0.817)。将中心化后的每个点投影到这个方向上(对应坐标分别相乘再相加):
- A: 0.576×(-1.5)+0.817×(-2) ≈ -2.50
- B: 0.576×(-0.5)+0.817×(-1) ≈ -1.11
- C: 0.576×0.5+0.817×1 ≈ 1.11
- D: 0.576×1.5+0.817×2 ≈ 2.50
这样,每个学生原来的 2 个成绩,现在变成了 1 个"综合得分",且排序关系(D>C>B>A)和原始数据的直观差异是一致的。
易错提醒:
- 别忘了协方差要除以 (n-1) 而不是 n(这是"样本协方差"的标准定义,也有教材用 n,两种都可以,但要在一次计算中保持一致)。
- 特征向量的方向可以整体乘以 -1(比如 (0.576, 0.817) 和 (-0.576, -0.817) 效果等价,代表同一条直线),不要误以为算错了。
- 方差解释率一定要基于"全部特征值之和"来算比例,不能只看某一个特征值的绝对大小。
例题 2(中等):如何决定保留几个主成分
题目:某公司用 5 个标准化后的指标(工作量完成率、工作质量评分、团队协作评分、创新指数、出勤率)评价员工绩效。用软件计算协方差矩阵(此时等价于相关系数矩阵)的特征值后,得到:
λ₁=3.02,λ₂=0.95,λ₃=0.62,λ₄=0.25,λ₅=0.16
如果目标是"用尽量少的主成分解释至少 80% 的总方差",应该保留几个主成分?
思路分析:5 个变量都经过标准化,标准化后每个变量方差为 1,所以总方差固定等于变量个数 5(可以用来检验特征值算得对不对:λ 之和应约等于 5)。本题的核心是练习"累积方差解释率"的计算和阈值判断,不需要再手算特征向量。
详细解答:
验证总方差:3.02+0.95+0.62+0.25+0.16 = 5.00 ✓
逐步累积:
| 保留主成分数 | 累积特征值和 | 累积方差解释率 |
|---|---|---|
| 前 1 个 | 3.02 | 60.4% |
| 前 2 个 | 3.97 | 79.4% |
| 前 3 个 | 4.59 | 91.8% |
| 前 4 个 | 4.84 | 96.8% |
| 前 5 个 | 5.00 | 100% |
前 2 个主成分只能解释 79.4%,没有 达到 80% 的目标;前 3 个主成分可以解释 91.8%,已经超过 80%。所以应保留 3 个主成分。
易错提醒:很多同学看到"前 2 个已经接近 80%"就直接选 2 个------差 0.6 个百分点看似很接近,但既然设定了明确阈值就要严格执行;实际工作中这个阈值本身也可以和业务方沟通调整,但既定标准下不能"差不多就行"。
例题 3(综合 / 较难):PCA 在图像与人脸识别中的应用
题目:手写数字图片通常是 28×28 像素的灰度图,也就是每张图片可以看作一个 784 维的向量(每个像素是一个"变量")。研究者常用 PCA 把这些图片降到 2 维,画在平面上观察不同数字是否能自然分成不同的簇;在人脸识别领域也有类似做法,称为"特征脸(Eigenface)"方法。请说明:① 这里 PCA 起到了什么作用;② 只保留很少的主成分可能带来什么问题;③ 用主成分"重建"出来的图像和原图有什么关系。
思路分析:这是一道不需要精确数值计算,但需要综合理解 PCA 本质的应用题------重点考察你能否把抽象的"方差最大方向"概念,迁移到"784 个像素点"这种更贴近真实工程场景的问题中。
详细解答:
① PCA 的作用:784 个像素之间存在大量相关性(比如相邻像素的灰度值往往相近),PCA 能找到几十个甚至几个"主要的变化模式"(主成分),比如"数字整体的粗细程度""笔画的倾斜方向"等,用这几十个数字就能较好地概括一张 784 维的图片,同时保留区分不同数字(或不同人脸)所需的关键信息。降到 2 维后,我们才能直接把每张图片画成平面上的一个点,用肉眼观察数据的聚类情况。
② 只保留很少主成分的风险 :如果只保留 1~2 个主成分,虽然方便可视化,但可能丢失区分某些相近类别所需的关键差异(比如手写的"3"和"8"在少数几个主成分上可能长得很像,导致混淆;人脸识别中如果保留的主成分太少,可能无法区分长相相似的不同人)。选择主成分个数本质上是"压缩程度"与"保留细节/区分能力"之间的权衡。
③ 重建图像 :用保留下来的主成分,可以反向计算出一张"近似还原"的图像(专业说法是"重建")。这张重建图像通常会比原图模糊、丢失细节(因为被舍弃的那些方差很小的主成分,往往对应着图像里的噪声或不重要的细枝末节),但主要轮廓和整体特征会被保留下来。这也是 PCA 常被用来"图像压缩"和"去噪"的原因------用较少的数据存储图像的主要信息,同时顺带滤掉了一些噪声。
易错提醒:不要把"PCA 降维后的可视化图"误认为是"分类结果"------PCA 本身不知道每张图片的真实数字标签是几,它只是找方差最大的方向,能不能自然分开纯粹取决于数据本身的结构;如果肉眼看到没有明显分簇,不代表 PCA 算错了,可能只是这份数据本身在低维空间里确实不好区分(这时候可能需要更多主成分,或改用非线性降维方法)。
六、常见误区
| 误区 | 为什么错 | 应该如何理解 |
|---|---|---|
| ① 认为 PCA 是从原始变量里"挑几个最重要的" | PCA 属于特征提取,新变量是所有原始变量的线性组合,通常不再对应任何一个具体的原始变量 | 与"特征选择"(直接挑变量子集)严格区分开,见下一节对比表 |
| ② 跳过标准化这一步 | 如果变量单位/尺度差异很大,方差大的变量会主导主成分方向,掩盖其他变量中真正重要的模式 | 变量量纲不同或数值范围差异大时,务必先标准化(z-score)再做 PCA |
| ③ 认为保留的主成分越多越好 | 保留全部主成分等于没有降维,失去了简化数据、去噪、提高计算效率的意义 | 结合方差解释率、下游任务效果、可解释性需求综合权衡,不是越多越好 |
| ④ 认为特征向量方向搞反了就是算错了 | 特征向量乘以 -1 仍然代表同一条直线(同一个方向),方向的正负并不影响其代表的子空间 | 只需关注方向所在的直线/平面本身,符号问题不影响降维效果,只是在解读载荷正负号时需要留意 |
| ⑤ 强行给每个主成分起一个"好听的名字" | 主成分常常是多个原始变量复杂的线性组合,很多时候并没有清晰、单一的现实含义 | 可以尝试解释,但如果解释不通也不必勉强,PCA 首先是一个数学压缩工具,不是必须可解释的 |
| ⑥ 认为标准 PCA 能很好处理任何形状的数据 | 标准 PCA 基于线性变换假设,如果数据内在结构是非线性的(例如卷曲、环形分布),效果会很差 | 遇到明显非线性结构时,考虑核 PCA(Kernel PCA)或 t-SNE、UMAP 等非线性降维方法 |
七、对比辨析
PCA 常常和以下几个概念混淆,通过表格集中辨析:
| 维度 | PCA(主成分分析) | 因子分析(Factor Analysis) | 线性判别分析(LDA) | 特征选择(Feature Selection) |
|---|---|---|---|---|
| 是否需要标签(是否有监督) | 否,无监督 | 否,无监督 | 是,有监督(需要类别标签) | 可以有监督也可以无监督 |
| 新变量是什么 | 原始变量的线性组合(主成分),旨在最大化方差 | 假设存在少数"潜在因子"驱动了观测变量的相关性,侧重解释变量间的相关结构 | 找到最大化"类别之间差异 / 类别内部差异"的方向 | 从原始变量中直接挑选一个子集,不产生新变量 |
| 核心目标 | 最大程度保留数据整体差异(方差),压缩维度 | 揭示变量背后可能存在的"共同原因"(潜变量) | 让降维后的数据更容易区分不同类别 | 去掉冗余或不重要的原始变量,保留可解释性 |
| 典型应用场景 | 数据压缩、可视化、去噪、为聚类/回归做预处理 | 心理测量、问卷量表的潜在维度分析 | 分类任务前的降维(如人脸识别中先 LDA 再分类) | 需要保留原始变量含义、追求模型可解释性的场景 |
一句话辨析:PCA 关心"怎么用最少的新变量尽量保留原始数据的差异";因子分析关心"背后有没有少数几个看不见的原因导致了这些变量的相关性";LDA 关心"怎么让不同类别分得更开";特征选择则干脆"不造新变量,只挑旧变量"。
八、练习题
第 1 题(概念理解题·基础)
判断正误并说明理由:"PCA 计算出的第一主成分,一定是原始变量中方差最大的那一个变量。"
第 2 题(概念理解题·基础到中等)
某数据集经标准化后,协方差矩阵(此时等价于相关系数矩阵)的 4 个特征值分别为 2.1、1.3、0.5、0.1。 ① 总方差是多少?② 只保留第一主成分能解释多少比例的总方差?③ 若目标是解释至少 85% 的总方差,至少需要保留几个主成分?
第 3 题(应用题·中等)
给定 3 个样本、2 个变量的数据:(0, 0),(2, 2),(4, 2)。 ① 求均值并完成中心化;② 计算样本协方差矩阵(除以 n-1=2);③ 不需要精确求特征向量,只需结合协方差矩阵的结果,说明你认为第一主成分的方向大致会朝向哪里,并说明理由。
第 4 题(应用题·中等偏难)
某电商公司用 10 个反映用户"活跃度"的指标做 PCA,标准化后得到累积方差贡献率如下:PC1: 35%;前 2 个:58%;前 3 个:72%;前 4 个:82%;前 5 个:88%;前 6 个:92%。若业务目标是"既要显著降维,又要保留至少 80% 的信息",应该保留几个主成分?并说明为什么不能只看单个主成分的贡献率,而要看累积贡献率。
第 5 题(综合题·较难)
图书馆想根据读者的 10 个借阅行为指标(如借阅频率、偏好类别、逾期次数等)对读者画像并推荐书籍。有同事提议:"直接从 10 个指标里手动挑 3 个看起来最重要的就行,不需要用 PCA。"请从"信息保留"和"变量相关性"两个角度,说明特征选择和 PCA(特征提取)是两种不同思路,分别说明各自的优缺点,并给出你的建议(在什么情况下更适合选哪一种)。
参考答案与解析
第 1 题 :错误。第一主成分不是原始变量中的某一个,而是所有原始变量的一个线性组合(加权和);这个组合方向是使新变量方差最大的方向,与"挑出方差最大的原始变量"是两回事------即使把方差最大的那个原始变量单独拿出来,通常也无法达到第一主成分所能解释的方差比例。
第 2 题 : ① 总方差 = 2.1+1.3+0.5+0.1 = 4 (与标准化后变量个数 4 吻合,可用于自查)。 ② 第一主成分解释率 = 2.1/4 = 52.5% 。 ③ 累积:前 1 个 52.5%;前 2 个 (2.1+1.3)/4 = 85% ,恰好达到 85%,所以保留 2 个主成分即可满足要求。
第 3 题 : ① 均值:x̄=(0+2+4)/3=2,ȳ=(0+2+2)/3≈1.333。中心化后:(-2,-1.333),(0,0.667),(2,0.667)。 ② Cov(x,x)=4+0+4/2=4;Cov(y,y)=1.777+0.445+0.445/2≈1.333;Cov(x,y)=2.667+0+1.333/2=2。协方差矩阵为 \[4, 2, 2, 1.333]。 ③ 由于 x 的方差(4)远大于 y 的方差(1.333),且两者呈正相关(协方差为 2),第一主成分方向应主要沿 x 轴方向,同时略微向 y 轴正方向倾斜------因为 x 是数据差异的主要来源,而正的协方差说明 y 会随 x 增大而略微增大,主成分方向会把这部分关联也"吸收"进来。
第 4 题 :应保留 4 个 主成分(累积 82%,是第一次达到 ≥80% 阈值的位置)。原因:单个主成分的贡献率只反映"这一个新变量"单独包含的信息量;而降维后我们实际上是用多个主成分共同表示原始数据,因此必须看这些主成分加起来一共能保留多少信息(即累积方差贡献率),才能判断降维后信息损失是否在可接受范围内。
第 5 题(参考要点,属开放性综合题,言之有理即可):
- 特征选择:优点是保留原始变量含义,可解释性强,便于向业务方或非技术人员解释每个指标的含义;缺点是如果多个指标高度相关,人工只挑 3 个可能遗漏其他变量独有的信息,而且"哪 3 个最重要"的判断标准比较主观。
- PCA(特征提取):优点是能综合利用全部 10 个变量的信息,把相关性强的变量中共同的变化模式提炼出来,通常比直接砍掉 7 个变量损失更少的信息,还能顺带消除变量间的多重共线性;缺点是主成分是多个原始变量的线性组合,往往不容易直接对应到某个具体的业务含义,增加了解释和沟通成本。
- 建议:如果业务非常看重"每个维度含义清晰、便于向非技术人员汇报",可优先用特征选择(结合领域知识挑选,而不是纯粹凭感觉);如果目标是尽量减少信息损失、提升后续建模(如聚类、推荐算法)效果,且能接受主成分含义不够直观,则更适合用 PCA。实际工作中也常常两者结合:先用相关性分析和业务经验粗筛一遍变量,再用 PCA 做进一步压缩。
九、总结
PCA 的核心思想,其实就一句话:在信息损失最小的前提下,把很多个相互关联的变量,压缩成少数几个互不相关、且最能体现数据差异的新变量。 整个计算流程(标准化 → 协方差矩阵 → 特征值分解 → 按方差排序选主成分 → 投影)本质上都是在为这一个目标服务。
记忆口诀:
降维找方向,方差大是关键;先中心化,再看协方差;特征值排大小,贡献率定几个;越大越优先,信息损失才最小。
十、拓展思考
-
如果原始数据的内在结构是非线性的(比如数据点在三维空间里卷曲成一条"瑞士卷"形状),标准 PCA 还能很好地工作吗?为什么?你能想到哪些可能的解决办法(提示:可以查一查"核 PCA(Kernel PCA)"和"流形学习")?
-
在深度学习兴起的今天,自编码器(Autoencoder) 这种神经网络结构也常被用来做降维。它和 PCA 在思路上有什么相似之处?又有什么本质区别?你认为在什么场景下,简单的 PCA 依然会比复杂的自编码器更合适?