**从“总体”到“样本”
- 在总体PCA中:我们假设拥有上帝视角,知道随机变量 的真实均值 和真实协方差矩阵 。我们所有的推导都基于这两个已知的“真值”。
- 在样本PCA中:我们回归现实。我们没有上帝视角,只有一组从总体中抽取的、有限的观测数据。我们能做的,就是利用这组数据估计出总体的均值和协方差。然后,将总体PCA中所有的理论和方法,应用到这些估计值上。
简而言之:用样本均值 替代总体均值 ,用样本协方差矩阵 替代总体协方差矩阵 。
1. 数据与统计量的定义
1.1 样本数据矩阵 X
在实际问题中,我们的数据通常以一个矩阵的形式存在。
-
定义:假设我们对 个变量(特征)进行了 次独立观测。所有数据可以构成一个 的样本矩阵 。
-
解读:
- 每一列 代表第 次观测得到的样本,包含所有 个变量的值。
- 每一行代表第 个变量在所有 次观测中的取值。
- 表示第 次观测时,第 个变量的值。
1.2 样本均值向量
这是对总体均值 的估计。
-
定义 (式16.40):
-
这是一个 的列向量。它的第 个元素 ,就是第 个变量在所有 次观测中的平均值。它就是对数据矩阵 的所有列向量求平均。
1.3 样本协方差矩阵 S
这是对总体协方差矩阵 的估计,也是样本PCA的核心计算对象。
-
定义 (式16.41): 是一个 的对称矩阵,其元素 计算如下:
-
对角线元素 : 这是第 个变量的样本方差,衡量该变量自身的离散程度。
-
非对角线元素 : 这是第 和第 个变量的样本协方差,衡量这两个变量的线性相关程度。
-
为什么是 ?: 这里的除数是 而不是 ,这被称为“贝塞尔校正”。使用 计算出的样本方差/协方差是对总体方差/协方差的无偏估计。通俗讲,这意味着如果我们从同一个总体中反复抽取多组样本并计算 ,这些 的平均值会更接近真实的 。而如果用 作分母,估计值会系统性地偏低。
-
矩阵形式(更便于计算和理解):
-
首先,对数据进行中心化:将每个观测向量 减去样本均值向量 ,得到中心化后的数据矩阵 。
-
然后,样本协方差矩阵可以非常简洁地表示为:
-
【数值示例】
我们用一个具体例子再来理解一下这些概念。假设我们有3个学生()的数学和物理成绩():
| 学生 | 数学 () | 物理 () |
|---|---|---|
| A | 80 | 85 |
| B | 90 | 95 |
| C | 100 | 105 |
-
数据矩阵 X:
-
样本均值向量 :
-
样本协方差矩阵 S: 首先,计算中心化矩阵 :
现在计算 :
- 是数学成绩的样本方差。
- 是物理成绩的样本方差。
- 是两者之间的样本协方差。这个例子中,两者完全正相关。
2. 样本主成分的定义
有了样本统计量 和 ,那么其实样本主成分的定义就是总体主成分定义的直接“复制-粘贴-替换”。
定义 16.4 (样本主成分)
给定样本矩阵 。样本第一主成分是 ,其中 是在 条件下,使得 () 的样本方差 最大的线性变换。
… 以此类推,第 个主成分是在 和 () 条件下,使得样本方差 最大的线性变换。
- 这个定义构建的优化问题,与我们在总体PCA中解决的问题在数学形式上完全相同,只是把 换成了 。
- 最大化目标:
- 约束:
- 求解方法: 因此,求解方法也完全一样。我们不需要重新证明。
- 样本主成分的求解,就是对样本协方差矩阵 进行特征值分解。
- 第 个样本主成分的方向向量 ,就是 的第 大特征值 所对应的单位特征向量。
- 第 个样本主成分的样本方差,就是特征值 。
3. 规范化与样本相关矩阵 R
与总体PCA一样,当变量单位或量级不同时,我们需要先对样本数据进行规范化。
-
规范化公式 (式16.48): 对每个观测值 ,进行如下变换:
其中 是第 个变量的样本均值, 是其样本方差。
-
作用于样本相关矩阵 R:
-
定义 (式16.42):样本相关矩阵 的元素为:
-
对规范化后的样本数据做PCA,等价于对样本相关矩阵 进行特征值分解。
-
-
关于式(16.49)的说明: 书中提到,对于规范化后的数据矩阵(书中为方便记作 ),样本协方差矩阵 就是样本相关矩阵 ,并给出了公式 。 这里需要注意,这与之前定义的 在分母上有差异。
- 使用 是为了获得无偏估计,在统计推断中更常用。
- 使用 得到的是最大似然估计(在高斯假设下),在某些机器学习文献或算法实现中为了计算方便也可能出现。
在实际应用中,当样本量 很大时,两者差异可以忽略。但理解其来源非常重要。在后续算法中,我们通常遵循先中心化,再计算
(1/(n-1)) * X_c * X_cᵀ的标准流程。
至此,我们已经建立了样本PCA的完整逻辑。其算法步骤非常清晰:
- 数据准备: 获取 的数据矩阵 。
- (可选但强烈推荐)规范化: 如果各变量量纲不同,对 的每一行进行规范化处理。
- 中心化: 计算样本均值向量 ,并将 的每一列都减去 ,得到中心化矩阵 。
- 计算协方差/相关矩阵: 计算样本协方差矩阵 。(如果步骤2做了规范化,那么这一步计算出的就是样本相关矩阵 )。
- 特征值分解: 对矩阵 (或 ) 进行特征值分解,得到特征值 和对应的单位特征向量 。
- 获得主成分: 这些特征向量 就是我们寻找的主成分方向。
基于相关矩阵特征值分解的PCA
这个算法是样本主成分分析最直接、最经典的方法。其步骤如下:
输入: 的样本矩阵 ,需要降维到的维度 (或一个累计方差贡献率阈值)。 输出: 个主成分的方向向量,以及每个样本点在这 个主成分上的新坐标。
【步骤 1】对观测数据进行规范化处理
-
为了消除不同变量(特征)由于量纲和数值范围差异带来的影响,确保每个变量在分析中地位平等,我们对原始数据矩阵 的每一个元素 (第 个变量,第 个样本)应用 式(16.48):
其中, 是第 个变量的样本均值,而 是其样本方差。
-
经过上述操作得到规范化数据矩阵,书中为了方便,仍记作 。这个新矩阵的每一行(每个变量)的均值为0,方差为1。
【步骤 2】计算样本相关矩阵 R
-
而为了得到描述规范化后各变量之间线性关系的核心矩阵,我们根据 式(16.49),计算 的样本相关矩阵 。
(这里的 是上一步规范化后的矩阵)。
-
注意:由于上一步已经对数据进行了规范化处理(每一行的均值为0),所以这一步相当于直接计算规范化数据的协方差矩阵,其结果就是相关矩阵。
【步骤 3】求 R 的特征值和特征向量
- 然后,我们通过一个标准的线性代数计算找出主成分的方向和它们所能解释的方差大小。
- 求解特征方程:,得到 个特征值。
- 排序特征值:将特征值从大到小排列:。
- 确定主成分个数 k:
- 方法A (指定个数):如果问题直接给定了 值。
- 方法B (阈值法):计算累计方差贡献率 ,找到满足阈值(如75%)的最小 。
- 求特征向量: 求解方程 ,求出与前 个特征值 对应的单位特征向量 。
【步骤 4 & 6】计算 k 个样本主成分和每个样本的主成分值
- 目的:定义新的坐标轴(主成分),并计算出每个原始样本点在新坐标系下的坐标。
- 操作:
-
定义主成分 (式16.50):第 个主成分 是一个由原始变量构成的线性组合,其系数由特征向量 给出:
-
计算每个样本的主成分值: 对于第 个样本(中心化/规范化后) ,其在第 个主成分上的坐标(或称“得分”)为 :
-
【步骤 5】计算主成分的性质
- 目的:解释主成分的实际意义,并评估降维效果。
- 操作:
-
因子负荷量 (Factor Loadings):计算第 个主成分 与第 个原始变量 的相关系数 。由于数据已规范化,公式简化为:
-
对变量 的贡献率: 计算前 个主成分对原始变量 的方差的解释比例,即相关系数的平方和:
-
学生考试成绩分析
现在,我们用这个算法流程来一步步“复盘”书中的例子。
背景:分析 个学生四门课程(语文, 外语, 数学, 物理)的成绩。
步骤 1 & 2 已完成
书上直接给出了对原始成绩数据进行规范化处理后,计算得到的样本相关矩阵 R (表 16.1)。
- 对角线全为1,这是相关矩阵的必然特征(变量与自身的相关性为1)。
- 非对角线元素 表示变量 和 的相关性。例如, 表示数学和物理成绩有较强的正相关,这符合直觉。 表示语文和数学相关性较弱。
步骤 3:求 R 的特征值和特征向量
- 特征值: , , ,
- 总方差: 。这正好等于矩阵的维度 ,验证了规范化PCA的性质。
- 确定 k: 题目要求累计方差贡献率达到75%。
- : 贡献率 = (54.3%),不够。
- : 累计贡献率 = (76%)。
- 结论: 76% > 75%,所以我们选择 ,即保留前两个主成分。
- 特征向量 (表 16.2): 前两个特征值对应的单位特征向量:
- (对应 )
- (对应 )
步骤 4:定义前两个主成分
根据 式(16.50),我们可以写出第一、第二主成分的表达式:
-
第一主成分 :
-
第二主成分 :
步骤 5:解读主成分的性质 (表 16.3)
这是PCA中最需要洞察力的部分,它赋予了数学计算结果实际的意义。
-
计算因子负荷量 :
- 对于 : ()
- 对于 : ()
- 对于 : ()
-
解读因子负荷量:
- 解读 : 观察 这一行,所有四个值都是较大的正数。这意味着,要提高 的得分,需要所有四门课的成绩都提高。因此, 可以被解释为“学生的综合/整体成绩”或“学习能力因子”。书中称之为“整体成绩”。
- 解读 : 观察 这一行,我们看到正负号的分化。语文()和外语()的负荷为正,而数学()和物理()的负荷为负。这意味着,如果一个学生语文、外语成绩高,而数学、物理成绩低,他的 得分会很高。反之,如果他理科好文科差, 得分会很低。因此, 反映了学生的偏科情况,可以解释为“文科 vs 理科”的偏好因子。书中称之为“理科成绩”。(更准确的叫法应该是“文科-理科”差异因子,因为正值代表文科优势)。
-
计算对原始变量的贡献率 :
- 这意味着,前两个主成分 共同解释了原始“语文”成绩方差的 74.7%。其他三门课的贡献率同理计算。
可视化解读

- 坐标系: 这张图将四个原始变量(语文、外语、数学、物理)作为点,画在由前两个主成分 构成的二维平面上。
- 点的坐标: 每个变量点 的坐标是它的因子负荷量 。
- 数学 的坐标是 。
- 语文 的坐标是 。
- 聚类现象:
- 语文()和外语()在图上彼此靠近,它们都在 轴的正半轴,可以被归为“文科”。
- 数学()和物理()在图上彼此靠近,它们都在 轴的负半轴,可以被归为“理科”。
- 所有四个变量在 轴上都有较大的正值,再次印证了 是“综合成绩”的解释。
- 这张图直观地展示了主成分分析发现的潜在结构:学生的成绩表现,可以很好地被“综合能力”和“文理偏科”这两个新的、不相关的维度来描述。这就是PCA强大的降维与特征提取能力。
数据矩阵的奇异值分解(SVD)算法
1. 为什么要用SVD?
在上一节,我们确立了PCA的核心算法:
- 中心化数据得到 。
- 计算样本协方差矩阵 。
- 对 进行特征值分解。
这个方法在理论上完美,但在实践中可能遇到两个问题:
- 计算成本高:如果我们的特征维度 非常大(例如,处理图像数据时, 可能是几十万),那么协方差矩阵 将是一个 的巨大矩阵。仅仅是计算并存储它,就可能耗费大量的计算资源和内存。
- 数值不稳定性:计算 这个步骤,涉及到矩阵与其自身的乘积。这个过程可能会放大矩阵中的计算误差,导致数值上的不精确,尤其是在矩阵条件数比较大的情况下。
SVD算法提供了一条更优雅的路径,它直接作用于(经过变换的)数据矩阵,避免了上述问题。
2. SVD与协方差矩阵特征值分解的等价性
这是理解本节内容的关键所在。我们要证明:对数据矩阵做SVD,其结果与对协方差矩阵做特征值分解是等价的,并且可以直接得到主成分。
让我们严格地推导这个关系。
-
准备工作:
-
我们从中心化后的数据矩阵 开始(书中算法16.1的输入假定数据已中心化)。 是一个 的矩阵。
-
我们定义一个新的 矩阵 ,如 式(16.51) 所示:
为什么要这样定义? 这是一个巧妙的构造,它的目的是让后续的计算能直接产生我们想要的样本协方差矩阵。
-
-
建立联系:我们来计算 :
我们发现, 正是我们定义的样本协方差矩阵 (在数据已中心化的情况下)! 所以,我们得到了一个至关重要的恒等式,即书中的 式(16.53):
这意味着,我们想要求解特征值分解的协方差矩阵 ,可以被表示为我们构造的矩阵 与其转置的乘积。
-
引入SVD:现在,我们对矩阵 进行奇异值分解(SVD):
其中:
- 是 的正交矩阵(左奇异向量)。
- 是 的矩形对角矩阵(奇异值)。
- 是 的正交矩阵(右奇异向量)。
-
连接SVD与特征值分解: 将SVD的表达式代入到我们之前推导的 中:
由于 是正交矩阵,所以 (单位矩阵)。上式简化为:
让我们仔细看一下 这一项。 是 的对角矩阵,其对角线上的前 (矩阵的秩) 个元素是奇异值 。那么 会是一个 的对角矩阵,其对角线元素为 。
如果我们令 ,那么这个对角矩阵 的对角元就是我们想要的特征值。 此时,等式变为:
这个形式 正是协方差矩阵S的特征值分解的矩阵形式!
-
得出结论:
- 主成分方向: 比较 和特征值分解的标准形式 ,我们发现,协方差矩阵 的特征向量矩阵 ,恰好就是我们对 做SVD得到的右奇异向量矩阵 V!
- 主成分方差: 协方差矩阵 的特征值 ,恰好是 的奇异值 的平方,即 。
至此,我们从理论上完美证明了,通过对变换后的数据矩阵 进行SVD,我们就能直接获得主成分分析所需的一切信息,而无需计算S。
算法 16.1 (主成分分析算法)
现在,我们来逐行解析这个基于SVD的具体算法。
输入: 样本矩阵 ,且其每一行元素的均值为零(即数据已中心化)。需要降维到的维度 。 输出: 的样本主成分矩阵 (即降维后的数据)。
【步骤 1】构造新的 n x m 矩阵 X’
-
操作:
-
如我们刚才所证明的,这个构造是为了让 正好等于样本协方差矩阵 ,从而在SVD和特征值分解之间建立桥梁。
【步骤 2】对矩阵 X’ 进行截断奇异值分解
-
操作: 对 进行SVD,但我们只需要保留前 个最大的奇异值和对应的奇异向量。
其中:
- 是 矩阵,包含前 个左奇异向量。
- 是 对角矩阵,包含前 个奇异值。
- 是 矩阵,包含前 个右奇异向量。
-
根据我们的理论推导, 的列向量就是我们梦寐以求的前 个主成分的方向向量!
【步骤 3】求 k x n 样本主成分矩阵 Y
-
目的: 将原始的 个样本点,投影到由前 个主成分构成的新的坐标空间中,得到它们的新坐标。
-
操作:
-
注:
- 是一个 的矩阵,它的每一列是一个主成分方向。所以 是一个 的矩阵,它的每一行是一个主成分方向。
- 是原始的 数据矩阵。
- 矩阵乘法 的结果是一个 的矩阵。
- 让我们看 的第 列 。这正是将原始的第 个样本点 投影到由 的列向量张成的 维子空间中,得到的新坐标。
- 因此,矩阵 的每一列,就是降维后对应样本点的新表示。
两种方法的比较与总结
| 特性 | 方法一:协方差矩阵的特征值分解 | 方法二:数据矩阵的SVD |
|---|---|---|
| 核心计算对象 | 样本协方差矩阵 () | (变换后的)数据矩阵 () |
| 核心数学运算 | 特征值分解 (Eigen-decomposition) | 奇异值分解 (SVD) |
| 主成分方向 | 的特征向量 | 的右奇异向量 |
| 主成分方差 | 的特征值 | 的奇异值的平方 |
| 适用场景 | 当特征数 远小于样本数 时,尚可接受。 | 通用,特别是当 很大时,优势明显。 |
| 优点 | 理论直观,易于理解。 | 数值稳定性好,计算效率高(有成熟的高效SVD算法库),无需构建巨大的S矩阵。 |
SVD方法是执行主成分分析在现代计算中的标准和首选方法。它不仅在数学上等价,而且在计算实践中表现更优越。我们在主流机器学习库(如Scikit-learn)中调用PCA时,其底层实现很大概率就是基于SVD的。