外观
KernelPCA 与 PCA 的对比
KernelPCA vs. PCA
在降维过程中,主成分分析(PCA)试图找到一个给定数据所符合的低维(low-dimensional)线性(linear)子空间。例如,考虑下面这个虚拟数据集:

从上面的图中可以很清楚地看到,存在一个线性子空间,数据可以沿着它表示,同时保留最大的数据方差。如下图所示:

但如果我们的数据符合的是一个低维但非线性(non-linear)的子空间呢。
例如,考虑下面这个数据集:

你看到一条可以用来表示我们数据的低维非线性子空间了吗?没有?别担心,让我给你展示一下!

上面的曲线是一个连续的非线性低维子空间,我们可以沿它来表示数据。好吧……那我们为什么不这么做呢?问题在于 PCA 无法确定这个子空间,因为数据点并没有沿一条直线排列。299
换句话说,PCA 是一种线性的降维技术。因此,在这种情况下它就力不从心了。尽管如此,如果考虑上面的非线性数据,你不觉得还是有一种直觉告诉我们:只要能捕捉到这条非线性曲线,这个数据集就可以被降到一维吗。

KernelPCA(使用核技巧,kernel trick)正是为了解决 PCA 的这一局限性。其思想非常简单:
- 使用一个核函数将数据投影(projection)到另一个高维(high-dimensional)空间,使得数据在其中变得可以用线性表示。Sklearn 提供了一个 KernelPCA 封装,支持许多常用的核函数。
- 对变换后的数据应用标准的 PCA 算法。
从下面的演示可以明显看出 KernelPCA 相对于 PCA 的优越性。如下所示,即使数据是非线性的,PCA 仍然会产生一个用于投影的线性子空间:

然而,KernelPCA 会产生一个非线性子空间:

你可能会想,代价是什么呢?代价就是运行时间。请注意,PCA 的运行时间已经与维度数呈立方级关系。

KernelPCA 涉及核技巧,其复杂度与数据点数量(n)呈平方级关系。因此,它会增加整体的运行时间。在使用 KernelPCA 时,这一点需要留意。