特征分解在机器学习中怎么用?从 PCA 到谱方法的实践
特征分解(Eigendecomposition),也叫特征值分解或谱分解,是把一个方阵分解为由它的特征向量和特征值表示的形式。本站另有“特征值分解”词条介绍它的数学含义和直观理解,这里侧重介绍特征分解在机器学习中的几类典型用法,以及使用时需要注意的计算问题。
先回顾核心概念
如果一个矩阵乘以某个非零向量,结果只是把这个向量拉长或缩短了若干倍,方向不变,这个向量就叫作矩阵的特征向量,拉伸的倍数叫作特征值。如果一个 n 阶方阵有 n 个线性无关的特征向量,就可以把它分解为三个矩阵的乘积:由特征向量组成的矩阵、以特征值为对角元素的对角矩阵,以及第一个矩阵的逆。对于机器学习中最常见的实对称矩阵,比如协方差矩阵、核矩阵、图拉普拉斯矩阵,特征分解一定存在,特征值都是实数,特征向量可以选为两两正交,分解形式更加简洁。
用法一:主成分分析
主成分分析是最经典的降维方法。它先计算数据的协方差矩阵,再对它进行特征分解。特征向量给出了数据变化的主要方向,叫作主成分;对应的特征值表示数据在这个方向上的方差有多大。把特征值从大到小排列,保留前 k 个最大的特征值对应的方向,把数据投影到这些方向上,就能用 k 个维度保留数据中大部分的变化。特征值的大小也可以帮助决定保留多少个维度:比如保留累计方差占总方差 95% 的那些主成分。在实际的计算中,通常直接对中心化后的数据矩阵做奇异值分解,而不是显式地计算协方差矩阵再分解,这样数值上更加稳定。
用法二:谱聚类和图上的方法
在谱聚类中,先根据样本之间的相似度构建一张图,计算它的拉普拉斯矩阵,然后求出最小的几个特征值所对应的特征向量,用它们作为样本的新坐标,再进行 K 均值聚类。与主成分分析取最大的特征值不同,这里取的是最小的特征值,因为它们对应着图上变化最平缓的“信号”,能够反映图的簇结构。拉普拉斯矩阵为零的特征值的个数,正好等于图中连通分量的个数。拉普拉斯特征映射等流形学习方法,以及图卷积网络的谱理论,也都建立在图拉普拉斯矩阵的特征分解之上。谷歌的 PageRank 算法,则是求描述网页链接关系的矩阵的主特征向量,也就是最大特征值对应的那个特征向量。
用法三:判别分析和优化分析
线性判别分析需要求解一个广义特征值问题,最优的投影方向就是最大的广义特征值对应的特征向量。在优化中,损失函数的海森矩阵的特征值描述了损失曲面在各个方向上的弯曲程度:全部为正说明是局部最小,有正有负说明是鞍点;最大特征值与最小特征值之比,叫作条件数,它越大,说明曲面越“狭长”,梯度下降越容易来回震荡、收敛越慢。分析神经网络训练的稳定性和学习率的选择时,常常会研究海森矩阵的最大特征值。
计算上的注意事项
对一个 n 阶矩阵进行完整的特征分解,计算量大约与 n 的三次方成正比。当矩阵很大时,比如有几十万个样本的核矩阵或图拉普拉斯矩阵,完整的分解是不可行的。好在很多应用只需要最大或最小的少数几个特征值和特征向量,可以使用幂迭代、Lanczos 算法等迭代方法,以及随机化的近似算法,只计算需要的那部分,速度会快得多。对于稀疏的矩阵,这类方法尤其高效。数值计算库,比如 NumPy、SciPy 中,通常为对称矩阵提供专门的、更稳定高效的分解函数,应当优先使用。对于非对称或非方的矩阵,一般改用奇异值分解。