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

《python机器学习》5.3.3 映射新的数据点

关灯直达底部

在上述两个核PCA应用的例子(半月形和同心圆)中,我们都将单一数据集映射到一个新的特征上。但在实际应用中,我们可能需要转换多个数据集,例如,训练数据、测试数据,以及在完成模型构建和评估后所要收集的新样本。本节将介绍如何映射训练数据集以外的数据点。

在本章开始时介绍过的标准PCA方法中,我们通过转换矩阵和输入样本之间的点积来对数据进行映射;映射矩阵的列是协方差矩阵中k个最大特征值所对应的特征向量(v)。现在的问题是:如何将此概念应用于核PCA?回忆一下核PCA的原理可以记得,我们从聚集核矩阵(不是协方差矩阵)中得到了特征向量(a),这意味着样本已经映射到了主成分轴v。由此,如果我们希望将新的样本(x′)映射到此主成分轴,需要进行如下计算:

幸运的是,我们可以使用核技巧,这样就无需精确计算映射φ(x′)Tv。然而值得注意的是:与标准PCA相比,核PCA是一种基于内存的方法,这意味着每次映射新的样本前,必须再次使用原始训练数据。我们需要计算训练数据集中每一个训练样本和新样本x′之间的RBF核(相似度):

其中,核矩阵K的特征向量a及特征值λ需满足如下等式:

Ka=λa

在完成新样本与训练数据集内样本间相似度的计算后,我们还需通过特征向量对应的特征值来对其进行归一化处理。可以通过修改早前实现过的rbf_kernel_pca函数来让其返回核矩阵的特征值:

至此,我们可以创建一个新的半月形数据集,并使用更新过的RBF核PCA实现来将其映射到一个一维的子空间上:

为了确保我们已经完成了实现新样本映射的代码,假定半月形数据集中的第26个点是一个新的数据点x′,现在要将其映射到新的子空间中:

通过执行下面的代码,我们可以重现原始映射。使用project_x函数,还可以映射新的数据样本。代码如下:

最后,将第一主成分上的映射进行可视化:

从下图可见,我们将样本x′正确映射到了第一主成分上: