首页 » python机器学习 » python机器学习全文在线阅读

《python机器学习》5.3.1 核函数与核技巧

关灯直达底部

回忆一下我们在第3章中曾讨论过的基于核的支持向量机,通过将非线性可分问题映射到维度更高的特征空间,使其在新的特征空间上线性可分。为了将样本x∈Rd转换到维度更高的k维子空间,我们定义如下非线性映射函数φ:

我们可以将φ看作是一个函数,它能够对原始特征进行非线性组合,以将原始的d维数据集映射到更高维的k维特征空间。例如:对于二维(d=2)特征向量x∈Rd(x是包含d个特征的列向量)来说,可用如下映射将其转换到三维空间:

换句话说,利用核PCA,我们可以通过非线性映射将数据转换到一个高维空间,然后在此高维空间中使用标准PCA将其映射到另外一个低维空间中,并通过线性分类器对样本进行划分(前提条件是,样本可根据输入空间的密度进行划分)。但是,这种方法的缺点是会带来高昂的计算成本,这也正是我们为什么要使用核技巧的原因。通过使用核技巧,我们可以在原始特征空间中计算两个高维特征空间中向量的相似度。

在更深入了解使用核技巧解决计算成本高昂的问题之前,我们先回顾一下本章最初所介绍的标准PCA方法。两个特征k和j之间协方差的计算公式如下:

由于在对特征做标准化处理后,其均值为0,例如:我们可将上述公式简化为:

请注意,上述公式是两个特征值之间的协方差计算公式,下面给出计算协方差矩阵Σ的通用公式:

Bernhard Schoellkopf提出了一种方法[1],可以使用φ通过在原始特征空间上的非线性特征组合来替代样本间点积的计算:

为了求得此协方差矩阵的特征向量,也就是主成分,我们需要求解下述公式:

其中,λ和v分别为协方差矩阵Σ的特征值和特征向量,这里的a可以通过提取核(相似)矩阵K的特征向量来得到,具体内容在将后续段落中进行介绍。

核矩阵的推导过程如下:

首先,使用矩阵符号来表示协方差矩阵,其中φ(X)是一个n×k维的矩阵:

现在,我们可以将特征向量的公式记为:

由于Σv=λv,我们可以得到:

两边同乘以φ(X),可得:

其中,K为相似(核)矩阵:

回顾一下3.4节的内容,通过核技巧,使用核函数K以避免使用φ来精确计算样本集合x中样本对之间的点积,这样我们就无需对特征向量进行精确的计算:

换句话说,通过核PCA,我们能够得到已经映射到各成分的样本,而不像标准PCA方法那样去构建一个转换矩阵。简单地说,可以将核函数(或者简称为核)理解为:通过两个向量点积来度量向量间相似度的函数。最常用的核函数有:

·多项式核:

其中,阈值θ和幂的值p需自行定义。

·双曲正切(sigmoid)核:

·径向基核函数(Radial Basis Function,RBF)或者称为高斯核函数,我们将在下一小节的示例中用到:

也可以写作:

综合上述讨论,我们可以通过如下三个步骤来实现一个基于RBF核的PCA:

1)为了计算核(相似)矩阵k,我们需要做如下计算:

我们需要计算任意两样本对之间的值:

例如:如果数据集包含100个训练样本,将得到一个100×100维的对称核矩阵。

2)通过如下公式进行计算,使核矩阵k更为聚集:

3)将聚集后的核矩阵的特征值按照降序排列,选择前k个特征值所对应的特征向量。与标准PCA不同,这里的特征向量不是主成分轴,而是将样本映射到这些轴上。

至此,读者可能会感到困惑:为什么要在第2步中对核矩阵进行聚集处理?我们曾经假定,数据需要经过标准化处理,当在生成协方差矩阵并通过φ以非线性特征的组合替代点积时,所有特征的均值为0。由此,在第2步中聚集核矩阵就显得很有必要,因为我们并没有精确计算新的特征空间,而且也不能确定新特征空间的中心在零点。

下一小节中,我们将基于这三个步骤使用Python实现核PCA。

[1] B. Scholkopf, A. Smola, and K.-R. Muller. Kernel Principal Component Analysis. pages 583–588, 1997.