主成分分析(PCA)会把多个数值变量转换成一组更少的新变量,同时尽可能保留数据中的变化。如果你搜索“什么是 PCA”,简短的答案是:它把数据旋转到一组新的坐标轴上,然后保留那些能解释最大离散程度的坐标轴。
这些新的坐标轴叫作主成分。在标准 PCA 中,第一主成分捕捉尽可能大的方差,第二主成分在与第一主成分正交的前提下捕捉剩余方差中最大的部分,后面的主成分也按同样的模式继续。
PCA 想要找到什么
想象高维空间中有一团点云。PCA 要寻找的是这团点云扩散最明显的方向。
如果大部分扩散都发生在一两个方向上,那么与其保留全部原始变量,不如只用一两个主成分来概括数据。这就是为什么 PCA 常用于降维、可视化、压缩和预处理。
对于已经中心化的数据,第一主成分满足
其中 是中心化后的数据矩阵, 是一个方向向量。
中心化这个条件很重要。如果不做中心化,选出来的方向可能更多反映的是变量的平均水平,而不是数据围绕均值的变化方式。
如何计算 PCA
标准流程很短:
- 将观测值放在行中,将变量放在列中。
- 对每个变量减去其均值,完成中心化。
- 如果变量的单位差异很大,而且不希望尺度主导结果,就再做标准化。
- 计算中心化数据的协方差矩阵。
- 求它的特征向量和特征值。
特征向量给出主方向。特征值告诉你每个方向解释了多少方差。
你也会看到用奇异值分解(SVD)来计算 PCA。对于中心化数据,它会得到相同的主子空间,而且在实际计算中通常是更常用的数值方法。
PCA 的二维示例
取三个二维观测点:
这些点完全落在直线 上,所以我们已经可以预期会有一个占主导地位的方向。
先减去均值 ,对数据做中心化:
对于这个中心化后的数据集,协方差矩阵与下面的矩阵成比例:
它的两个相互正交的特征向量方向是
第一个方向沿着数据真正发生变化的那条直线。第二个方向则横穿这条直线。
把中心化后的点投影到第一个方向上:
把它们投影到第二个方向上:
所以,全部变化都沿着 这个方向,而沿着 没有任何变化。在这个特殊例子里,一个主成分就能用每个点的一个数值完整保留变化模式。
这就是最简单形式的 PCA。它先旋转坐标系,使其与数据对齐,然后判断哪些旋转后的坐标值得保留。
主成分意味着什么
每个主成分都是原始变量的线性组合。
如果第一主成分写成
这表示主要变化方向大致是前两个变量的等权组合。具体该如何解释,还取决于这些变量本身,以及数据是只做了中心化,还是还做了标准化。
得分(scores)是每个观测点投影到主方向之后得到的坐标。载荷(loadings)描述的是每个原始变量对某个主成分贡献有多强。
PCA 中的常见错误
跳过中心化
标准 PCA 通常应用在中心化后的数据上。如果跳过中心化,结果可能更多反映变量的平均水平,而不是你真正关心的变化。
忽略尺度
如果一个变量以美元计量,另一个变量以毫米计量,那么尺度更大的变量可能会主导方差计算。当单位不同,而且不希望由相对尺度决定结果时,标准化通常是合适的。
以为 PCA 找到的是最有意义的特征
PCA 找到的是方差大的方向,不一定是因果意义最强的方向,也不一定是类别分离效果最好的方向。高方差和高实用性并不总是一回事。
把低维投影当成无损表示
只保留前几个主成分本质上是一种近似。它可能非常有效,但除非其余主成分的方差恰好为零,否则仍然会丢失一些信息。
什么时候 PCA 有用
当变量之间存在相关性,而且你想用更简单的方式表示数据时,PCA 很常见。
典型用途包括:
- 在建模前减少输入特征数量
- 将高维数据可视化到二维或三维
- 在保留大部分方差的同时压缩测量数据
- 识别金融、生物学、图像分析和信号处理中的主要模式
当“基于方差的结构”能够合理概括问题时,这种方法最有用。
试试类似的问题
画出点 、、 和 。先对它们做中心化,再比较它们沿方向 和 的离散程度。这个小练习会清楚说明,为什么 PCA 会把一个方向视为重要,而把另一个方向看作大多是冗余的。
如果你想再进一步,可以自己尝试一组不完全落在同一直线上的点,并比较第一主成分解释了多少方差、第二主成分又解释了多少方差。