seegongsik
工程数学

主成分分析 PCA

在数据云里找出最分散的方向,主成分是协方差矩阵的特征向量,只留下它们就降了维

假设你在桌上撒了一把小米。如果米粒不是撒成圆圆的一片,而是朝一个方向躺成长长的一条,谁都能一眼指出“它在这个方向上散得最开”。主成分分析 (PCA) 问的正是这个问题:在一团数据云里,哪个方向最分散?这个方向就是第 1 主成分 (PC1),与它垂直、散得第二开的方向就是 PC2。令人惊讶的是,这两个方向正是数据协方差矩阵的特征向量,而各方向的散布程度,也就是方差,恰好就是特征值。在“特征向量就是方向不变的向量”里看到的特征概念,这次原样用在了数据的散布上。

拖动手柄让点云转一圈,整个点云就跟着手柄一起倾斜。不管转到什么角度,包住这些点的金色椭圆(按 1 西格玛画出的协方差)都会跟着点云一起转。椭圆里最长的轴(绿色)是 PC1,与它垂直的短轴(橙色)是 PC2。两条轴的长度是各方向方差的平方根,也就是标准差,下方写出两个方向的方差。不管怎样转动点云,PC1 总是准确地指向散得最长的那一侧。这些轴正是由这些点算出的协方差矩阵的特征向量。

这次只用滑块改变点云的角度。两条轴,PC1(绿色)和 PC2(橙色),始终跟着走。PC1 是方差最大的方向,PC2 是与它恰好垂直的第二个方向。不管滑块放在哪里,两条轴之间始终保持 90 度,因为对称的协方差矩阵的特征向量总是彼此正交。所以,主成分把数据干净地分解到互不重叠的方向上。一条轴上的信息不会漏到另一条轴上。

PC1 为什么特别,可以亲手量一量。用滑块转动某个方向的直线,所有点都会垂直投影到这条直线上,留下脚印。这些脚印在直线上散开的程度就是该方向的方差,下方用一根条和一个数字写出它的值。把直线转来转去,方差在直线与 PC1 平行时升到最大,与 PC2 平行时降到最小。接近最大值时,直线、脚印和条都会变成绿色。所以 PC1 也被定义为使方差最大的方向。最分散的方向,就是保留信息最多的方向。

现在进入真正的用途:降维。用开关只留下 PC1 或 PC2 中的一条轴,点就被压扁到那条轴上,被丢掉的垂直方向则显示为红色虚线尾巴,也就是重建误差。读数是被丢掉那条轴的方差,即损失的信息量。只留 PC1 时尾巴最短,因为丢掉的是散得最少的方向,损失也就最少。把 2D 缩成 1D,同时让损失尽量小,这就是用 PCA 压缩数据的方式。

最后是一个询问到底需要几维的工具。用滑块把点云从圆形一直拉成很长的形状,两根条就显示特征值的比例:上面是 λ1/(λ1+λ2),下面是 λ2/(λ1+λ2)。点云是圆的时,两根条几乎是 50 对 50,只留一条轴就会丢掉一半。点云越长,PC1 的条越接近 100%,PC2 几乎变成 0。这时只留一条轴,也几乎能保住全部信息。这个被解释的方差比例,就是衡量数据可以降到几维的尺子。

实际应用PCA 就是在数据云里寻找最分散的方向。建立点的协方差矩阵并求出它的特征向量,PC1 是方差最大的方向,PC2 是与它垂直的下一个方向,两个特征值就是各方向的方差。这与特征向量一讲里的特征概念完全相同,只是这次对象不是变换矩阵而是数据的协方差矩阵,而且它是不用标准答案就能找出结构的无监督学习。投影到 PC1 上,就能用最少的数保住最多的信息,于是实现降维;被解释的方差比例则用来判断几维就够了。人脸识别中的特征脸、基因数据的概括、去噪,全都建立在这一个想法之上。
← 工程数学
如果有帮助,请支持我们