支持向量机:特征转换

时间:2016-02-09 11:14:32

标签: machine-learning svm

当我掌握训练有素的SVM模型时,如何在测试数据中进行转换?我试图模拟数学方程和训练的SVM模型(使用RBF内核)的SVM输出。我该怎么做?

在SVM中,使用的一些常见内核是:

enter image description here

此处 xi xj 代表两个样本。现在,如果数据有5个样本,则此变换包括两个样本的所有组合以生成变换后的特征空间,如x1和x1,x1和x2,x1和x3,...,x4和x5,x5和x5。

如果数据有两个特征,则2阶多项式变换将输入转换为3维,如幻灯片15 http://www.robots.ox.ac.uk/~az/lectures/ml/lect3.pdf

中所述

现在怎样才能找到使用RBF内核进行转换的类似解释?我正在尝试编写一个用于转换测试数据的代码,以便我可以在其上应用经过训练的SVM模型。

1 个答案:

答案 0 :(得分:1)

这比这更复杂。简而言之 - 您将数据直接映射到要素空间。您只需将点积更改为内核引发的那个。当使用多项式内核时,SVM内部会发生什么,每个点实际上(间接地)转换为O(d^p)维空间(其中d-输入数据维,p-度为多项式内核)。从数学角度来看,您使用了一些(通常是未知的)投影phi_K(x),它具有K(x, y) = <phi_K(x), phi_K(y)>的属性,仅此而已。在SVM实现中,您不需要实际的数据表示(因为phi_K(x)通常是巨大的,有时甚至是无限的,比如在RBF情况下)但是它需要您点的点积矢量将是训练集的每个元素。

因此,您提供的是(在实施中,而不是从数学角度):

  • 在训练整个Gram矩阵期间,G定义为G_ij = K(x_i, x_j),其中x_i是我的训练样本
  • 在测试期间,当您获得新点y时,您将其作为点积H的向量提供给SVM,使H_i = K(y, x_i)再次x_i为您的训练点(事实上你只需要支持向量的值,但许多实现,比如libsvm,实际上需要训练集大小的向量 - 如果K(y, x_j)不是x_j,你可以简单地为input-sm添加0训练矢量)

请记住,这与上面表示的“顶部”训练线性SVM不一样。这只是实现通常接受数据的一种方式,因为它们需要点积(函数)的定义,并且通常比函数更容易传递数字(但是其中一些,如scikit-learn SVC模块,实际上接受函数作为内核参数)。

那什么是RBF内核?它实际上是从正常分布的点到函数空间的映射,并且在训练点中具有平均值。然后点积从这两个函数的乘积中只是-inf到+ inf的积分。听起来很复杂?这是乍一看,但它是一个非常好的技巧,值得理解!