为支持向量机(XOR)设计内核

时间:2011-05-14 00:05:49

标签: kernel machine-learning svm

我的问题的核心是“如何为学习问题设计内核函数?”

作为一个快速的背景,我正在阅读有关支持向量机和内核机器的书籍,我看到作者提供的内核示例(多项式内核均匀和非均匀,高斯内核以及对基于文本的内核的暗示)一些),但所有要么提供结果的图片而不指定内核,或者模糊地声称“可以构造一个有效的内核”。我对为新问题设计内核时的过程感兴趣。

可能最简单的例子是学习XOR,这是一个嵌入真实平面的最小(4点)非线性数据集。如何能够提出一个自然(和非平凡)内核来线性分离这些数据?

作为一个更复杂的例子(参见Cristianini,SVM简介,图6.2),如何设计内核来学习棋盘图案? Cristianini声称这张照片是“使用高斯内核”得出的,但似乎他使用了多个,并且它们以未指定的方式组合和修改。

如果这个问题太宽泛而无法在这里回答,我会很感激地提到构建一个这样的内核函数,尽管我更喜欢这个例子有点简单。

4 个答案:

答案 0 :(得分:8)

  

问:“如何为学习问题设计内核函数?”

     

答:“非常小心”

尝试通常的嫌疑人(线性,多项式,RBF)并使用最好的方法,对于试图获得最准确的预测模型的人来说,这是一个合理的建议。对于它的价值,这是对SVM的一种常见批评,它们似乎有很多参数需要你根据经验进行调整。所以至少你并不孤单。

如果您真的想为特定问题设计内核,那么您是对的,它本身就是一个机器学习问题。它被称为“模型选择问题”。我自己并不是一个专家,但对我来说最好的洞察方法来源是Rasumussen和Williams的书“Gaussian Processes”(可以在网上免费获得),特别是第4章和第5章。我对不起,我不能说“阅读这本充满数学的大书”,但这是一个复杂的问题,他们在解释它方面做得非常好。

答案 1 :(得分:6)

(对于不熟悉机器学习中内核函数使用的人来说,内核只是将输入向量(构成数据集的数据点)映射到更高维空间,即“特征空间”。然后在这个变换的空间中找到一个具有最大边距(超平面和支持向量之间的距离)的分离超平面。)

好吧,从已知使用SVM分类器工作的内核开始解决感兴趣的问题。在这种情况下,我们知道 RBF (径向基函数)内核w /训练有素的SVM,干净地分离XOR。你可以用Python编写RBF函数:

def RBF():
    return NP.exp(-gamma * NP.abs(x - y)**2)

其中 gamma 是1 /特征数(数据集中的列),x,y是笛卡尔对。

(径向基函数模块也在 scipy.interpolate.Rbf

其次,如果你所追求的不只是使用可用的内核函数来解决分类/回归问题,而是你想建立自己的,我建议首先研究如何选择内核函数和这些函数中的参数影响分类器性能。与SVM / SVC一起使用的一小组内核函数是最好的起点。该小组由(除了RBF)组成:

  • 线性内核

  • 多项式

  • S形

答案 2 :(得分:1)

我的方法是研究数据:如何将XOR问题中的点分开?当我开始研究M.L.总的来说,特别是SVM,就是我所做的,带着玩具问题,手工绘制,并尝试将类别分开。

当我看到第一次的XOR问题时,我发现两个紫色点(下方,左侧)都有相同符号的X和Y,有的是一个正值为负,而两个绿色点都有X和Y符号相反。因此,对于绿点,X和Y的平方和将是0(或者在初始问题中具有一点噪声的非常小),对于绿点,X和Y的平方和将是2(或接近2)。因此,添加第三个坐标Z = np.sqrt(np.square(X + Y))将很好地将两个集合分开:

3D before 3D after

在旁注中,如果您认为Znp.sqrt(np.square(X + Y))在本案例中基本相同,则np.abs(X + Y)与[{3}}的表述不同。

我无法访问Crisitanini的论文,但我也会以类似的方式解决这个问题,从玩具版本开始(顺便说一下,doug's rbf感谢除了checkerboard code) :

doug

这里可能的直觉是黑色方块的行和列索引的总和将始终是偶数,而白色方块总是奇数,因此像(row_index + col_index) % 2那样添加第三个维度这个简单版本的诀窍。在一个更大,更复杂的棋盘格数据集中,我在网上找到了这样的数据集:

checkerboard

事情并非如此简单,但也许可以级联聚类来找到16个集群的平均X和Y位​​置(可能使用Cristianini-like?),然后应用“模数核心技巧”的版本?

由于免责声明我没有解决大量的分类问题,到目前为止我发现在制作复杂的玩具版本时,我通常会获得关于解决方案类型的“数字”直觉这可能有用。

最后,正如对doug的答案的评论中所发表的那样,我没有发现medoids clustering的任何问题,通过使用相同的算法将它们传递给嵌套交叉验证中的网格搜索来研究所有可能内核的性能( SVC)并且仅更改内核。您可以通过在变换的特征空间中绘制相应的边距来添加到该方法:例如,对于rbf,使用Doug建议的等式(以及Sebastian Raschka用于绘制决策区域的例程 - empirical approach like his)。

2017年10月27日更新 在我松弛通道的谈话中,另一位地球物理学家向我询问了XOR门被设计为0s和1s而不是-1s和1s的情况(后者类似于勘探地球物理学中的经典问题,因此我的初始玩具例子)。

如果我用0和1来处理XOR门,并且没有处理关于rbf内核的知识,在这种情况下我也会坐下来解决这些问题的坐标问题看看我能否想出一个转变。

cell 13 here

我在这里的第一个观察是,Os位于x=y行,x=-y行上的X,因此差异x-y将为0(或者有点小噪音)in in case,+ / - 1 in each。绝对值将处理符号,因此Z = np.abs(X-Y)将起作用。顺便说一句,这与XOR_II rbf = np.exp(-gamma * np.abs(x - y)**2)非常相似(另一个原因是赞成他的回答);事实上,他的rbf是一个更通用的解决方案,适用于所有异或情况。

答案 3 :(得分:0)

我正在通过示例寻找一些多项式内核工作,并偶然发现了这篇文章。如果你还在寻找可能会有帮助的一些事情是这个工具包(http://www2.fml.tuebingen.mpg.de/raetsch/projects/shogun),它使用多个内核学习,你可以选择多种选择内核方法然后学习将选择最好的问题,所以你不必。

您选择内核的一种更简单的传统方法是使用不同内核方法的交叉验证来找到最佳方法。

希望这可以帮助您或其他任何阅读内核方法的人。