首页 文章

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

提问于
浏览
18

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

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

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

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

如果这个问题太宽泛而无法在这里回答,我会理解一个这样的内核函数的构造,尽管我更喜欢这个例子有点简单 .

4 回答

  • 1

    问:“如何为学习问题设计内核函数?”答:“非常小心”

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

    如果你真的想为特定问题设计内核那么你是对的,这本身就是一个机器学习问题 . 它's called the '模型选择问题'. I'我自己并不是一个专家,但对我来说最好的洞察方法来源是“免费在线提供”这本书,特别是第4章和第5章 . 我说的远远不止于此 . 'read this huge book full of maths'但这是一个复杂的问题,他们在解释它方面做得非常好 .

  • 0

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

    好吧,从已知可与SVM分类器一起使用的内核开始,以解决感兴趣的问题 . 在这种情况下,我们知道具有经过训练的SVM的 RBF (径向基函数)内核可以完全分离XOR . 您可以这样在Python中编写RBF函数:

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

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

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

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

    • 线性内核

    • 多项式

    • sigmoid

  • 8

    我的方法是研究数据:如何将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

    另一方面,如果您认为 np.sqrt(np.square(X + Y))np.sqrt(np.square(X + Y)) 基本相同,那么 Zdoug's rbf的配方并不太相似在这种情况下为 np.abs(X + Y) .

    我也无法以类似的方式访问Crisitanini 's paper but I' d这个问题,从玩具版本开始(顺便说一下,checkerboard code感谢非doug):

    checkerboard

    这里可能的直觉是黑色方块的行和列索引的总和将始终是偶数,而白色方块总是奇数,因此在这个简单版本中添加类似于_1492728的第三个维度就可以了 . 在更大,更复杂的棋盘格数据集中,我在网上找到了这样的数据集:

    Cristianini-like?

    事情不是't so simple, but perhaps one could cascade clustering to find the the 16 clusters'表示X和Y位置(也许使用medoids clustering),然后应用"modulo kernel trick"的版本?

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

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

    UPDATE October 27/17 在我的松弛通道上的一次谈话中,另一位地球物理学家向我询问了XOR门被设计为0s和1s而不是-1s和1s的情况(后者类似于勘探地球物理学中的经典问题,因此我的初始玩具示例) .

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

    XOR_II

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

  • 6

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

    更容易选择内核的传统方法是使用不同内核方法的交叉验证来找到最佳方法 .

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

相关问题