19世纪末到20世纪初,统计学家(最典型的是Pearson那篇论文)遇到一个很具体的麻烦:他们手里有一批样本,每个样本身上量了好几个指标(比如同一批人的身高、体重、头围、坐高……),这些指标彼此并不独立——量了身高,某种程度上就能猜个大概体重。当时的困扰是:这些指标高度重叠信息,但没人知道怎么用一个数学上站得住脚的办法,把重叠的部分挤掉,只留下真正独立、有信息量的少数几个新指标。我们把这个问题压到最小、最具体的情形——上面那张图,就是这个情形:160名学生的身高体重散点图。你已经能看到,这团点不是正圆形,而是斜向右上方拉长的一片云。PCA 主成分分析Principal Component Analysis一、学习目标学完本节内容后你应该能够用自己的语言解释降维和主成分分析PCA的直观含义而不是死记硬背公式。说出 PCA 涉及的关键概念——方差、协方差、协方差矩阵、特征值、特征向量、投影并解释它们之间的联系。按照标准化 → 求协方差矩阵 → 求特征值和特征向量 → 选择主成分个数 → 投影得到新数据的步骤独立完成一个小规模数据集的 PCA 手工计算。根据方差解释率贡献率合理判断应该保留几个主成分。清楚区分 PCA 与因子分析、特征选择等容易混淆的概念不再张冠李戴。至少能举出 2 个 PCA 在实际生活或工作中的应用场景如数据可视化、图像压缩、去噪、聚类前处理等。二、知识点导入某高中期末要评选年级学习标兵年级主任拿到了每个学生7 门课的成绩语文、数学、英语、物理、化学、生物、政治。他想给每个学生算一个综合能力值用来排名但很快遇到了麻烦直接把 7 门成绩加起来合理吗—— 不一定。比如某次数学考试全年级都考得很好大家分数都挤在 9095 分之间这门课其实分不出谁更强而物理这次考试全年级分数从 40 到 98 分都有差异非常明显。如果简单相加数学和物理同等重要地被加总显然没有充分利用物理这门课信息量更大的特点。7 门成绩之间还互相关联——数学好的学生往往物理、化学也不差这些科目在某种程度上说的是同一件事重复计算了。于是问题来了能不能找到一两个新的综合指标来代替这 7 门成绩并且这个新指标还能尽量保留原始数据中学生与学生之间差异的信息这正是本节课要解决的问题——在信息损失尽可能小的前提下把很多个变量压缩成少数几个更有代表性的新变量。这套方法就是PCA主成分分析。三、核心概念讲解1. 直观理解先从一个拍照的类比说起想象你手里有一个哑铃形状的物体悬在空中你只能用一台相机给它拍一张平面照片但你希望这张照片尽可能完整地体现出这个物体的形状信息。如果你从侧面拍哑铃的长度、两头球的大小都能看得清清楚楚这张照片信息量很大。如果你正对着哑铃的一端拍照片里看到的只是一个圆点哑铃的长度信息完全丢失这张照片信息量很小。PCA 做的事情本质上就是帮你自动找到那个信息量最大的拍摄角度。在数学上这个角度叫主成分方向——沿着这个方向看过去数据点之间的差异方差最大也就是最能区分开不同的数据点。回到开头的例子7 门课就像 7 个观察维度PCA 帮你找到 12 个新的综合视角主成分从这个视角看过去学生之间谁强谁弱的差异体现得最清楚。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大测成绩如下学生xyA11B22C34D45请手工完成 PCA 的前几步计算并说明如果只保留第一主成分能保留多少比例的信息思路分析这是一个只有 2 个变量、4 个样本的最小案例目的是让你完整走一遍中心化 → 协方差矩阵 → 特征值 → 方差解释率 → 投影的全过程建立手感。详细解答① 中心化均值 x̄ (1234)/4 2.5ȳ (1245)/4 3中心化后数据A(-1.5, -2)B(-0.5, -1)C(0.5, 1)D(1.5, 2)② 计算协方差矩阵样本协方差除以 n-13Cov(x,x) [(-1.5)²(-0.5)²0.5²1.5²] / 3 5/3 ≈ 1.667Cov(y,y) [(-2)²(-1)²1²2²] / 3 10/3 ≈ 3.333Cov(x,y) [(-1.5)(-2)(-0.5)(-1)0.5×11.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.50B: 0.576×(-0.5)0.817×(-1) ≈-1.11C: 0.576×0.50.817×1 ≈1.11D: 0.576×1.50.817×2 ≈2.50这样每个学生原来的 2 个成绩现在变成了 1 个综合得分且排序关系DCBA和原始数据的直观差异是一致的。易错提醒别忘了协方差要除以 (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.020.950.620.250.16 5.00 ✓逐步累积保留主成分数累积特征值和累积方差解释率前 1 个3.0260.4%前 2 个3.9779.4%前 3 个4.5991.8%前 4 个4.8496.8%前 5 个5.00100%前 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 维后我们才能直接把每张图片画成平面上的一个点用肉眼观察数据的聚类情况。②只保留很少主成分的风险如果只保留 12 个主成分虽然方便可视化但可能丢失区分某些相近类别所需的关键差异比如手写的3和8在少数几个主成分上可能长得很像导致混淆人脸识别中如果保留的主成分太少可能无法区分长相相似的不同人。选择主成分个数本质上是压缩程度与保留细节/区分能力之间的权衡。③重建图像用保留下来的主成分可以反向计算出一张近似还原的图像专业说法是重建。这张重建图像通常会比原图模糊、丢失细节因为被舍弃的那些方差很小的主成分往往对应着图像里的噪声或不重要的细枝末节但主要轮廓和整体特征会被保留下来。这也是 PCA 常被用来图像压缩和去噪的原因——用较少的数据存储图像的主要信息同时顺带滤掉了一些噪声。易错提醒不要把PCA 降维后的可视化图误认为是分类结果——PCA 本身不知道每张图片的真实数字标签是几它只是找方差最大的方向能不能自然分开纯粹取决于数据本身的结构如果肉眼看到没有明显分簇不代表 PCA 算错了可能只是这份数据本身在低维空间里确实不好区分这时候可能需要更多主成分或改用非线性降维方法。六、常见误区误区为什么错应该如何理解① 认为 PCA 是从原始变量里挑几个最重要的PCA 属于特征提取新变量是所有原始变量的线性组合通常不再对应任何一个具体的原始变量与特征选择直接挑变量子集严格区分开见下一节对比表② 跳过标准化这一步如果变量单位/尺度差异很大方差大的变量会主导主成分方向掩盖其他变量中真正重要的模式变量量纲不同或数值范围差异大时务必先标准化z-score再做 PCA③ 认为保留的主成分越多越好保留全部主成分等于没有降维失去了简化数据、去噪、提高计算效率的意义结合方差解释率、下游任务效果、可解释性需求综合权衡不是越多越好④ 认为特征向量方向搞反了就是算错了特征向量乘以 -1 仍然代表同一条直线同一个方向方向的正负并不影响其代表的子空间只需关注方向所在的直线/平面本身符号问题不影响降维效果只是在解读载荷正负号时需要留意⑤ 强行给每个主成分起一个好听的名字主成分常常是多个原始变量复杂的线性组合很多时候并没有清晰、单一的现实含义可以尝试解释但如果解释不通也不必勉强PCA 首先是一个数学压缩工具不是必须可解释的⑥ 认为标准 PCA 能很好处理任何形状的数据标准 PCA 基于线性变换假设如果数据内在结构是非线性的例如卷曲、环形分布效果会很差遇到明显非线性结构时考虑核 PCAKernel 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-12③ 不需要精确求特征向量只需结合协方差矩阵的结果说明你认为第一主成分的方向大致会朝向哪里并说明理由。第 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.11.30.50.1 4与标准化后变量个数 4 吻合可用于自查。 ② 第一主成分解释率 2.1/4 52.5%。 ③ 累积前 1 个 52.5%前 2 个 (2.11.3)/4 85%恰好达到 85%所以保留 2 个主成分即可满足要求。第 3 题 ① 均值x̄(024)/32ȳ(022)/3≈1.333。中心化后(-2,-1.333)(0,0.667)(2,0.667)。 ② Cov(x,x)[404]/24Cov(y,y)[1.7770.4450.445]/2≈1.333Cov(x,y)[2.66701.333]/22。协方差矩阵为 [[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 还能很好地工作吗为什么你能想到哪些可能的解决办法提示可以查一查核 PCAKernel PCA和流形学习在深度学习兴起的今天自编码器Autoencoder这种神经网络结构也常被用来做降维。它和 PCA 在思路上有什么相似之处又有什么本质区别你认为在什么场景下简单的 PCA 依然会比复杂的自编码器更合适