外观
PCA 不是一种可视化技术
PCA is not a Visualization Technique
PCA 从本质上讲是一种降维技术。然而,有时许多人会用 PCA 来可视化(visualization)高维数据集。做法是把给定数据投影到二维,然后进行可视化。

虽然这看起来是个合理的做法,但这里有一个经常被忽视的大问题。要理解这个问题,我们首先需要了解一下 PCA 是如何工作的。
PCA 的核心思想是利用协方差矩阵(covariance matrix)的特征向量(eigenvector),将数据线性投影到另一个空间。

为什么要用特征向量?
它会创建不相关的特征,这很有用,因为如果特征是独立的,就可以把方差最小的那些特征丢弃掉,从而实现降维。
它能确保新特征整体上保留原始数据的方差。
回到可视化这个话题……如上所述,在应用 PCA 之后,每个新特征都会捕捉原始数据方差的一部分。因此,如果我们打算通过把数据投影到二维来用 PCA 做可视化……那么只有当前两个主成分整体上捕捉了原始数据的大部分方差时,这种可视化才会有用。如果不是这样,那么二维可视化就会具有很强的误导性,也是不正确的。
我们可以通过绘制累积解释方差(cumulative explained variance,CEV)图来避免这个错误。顾名思义,它绘制的是主成分所解释的累积方差。例如在 sklearn 中,解释方差的比例可以通过 explained_variance_ratio_ 属性获取:

我们可以创建一个解释方差的累积图,并检查前两个成分是否解释了大部分方差。

例如,在下面的图中,前两个成分只解释了原始数据方差的 55%。

因此,用 PCA 把这个数据集可视化成二维可能不是个好选择,因为有相当多的数据方差丢失了。然而,在下面的图中,前两个成分解释了原始数据方差的 90%。

因此,在这里用 PCA 做可视化看起来是个合理的做法。作为要点总结:仅当上面的图表明可以这样做时,才用 PCA 做二维可视化。如果不可以,就不要用 PCA 做二维可视化,而应使用其他专门用于可视化的技术,比如 t-SNE、UMAP 等。t-SNE 相对于 PCA 的优越性如下图所示:

PCA 生成的二维投影并不考虑局部结构。相反,它的主成分主要关注保留最大的方差。但 t-SNE 的投影能更清晰地展现数据簇。t-SNE 产生的簇是分离良好的。而 PCA 中的簇则有相当大的重叠,几乎传达不出任何信息。