21

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

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

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

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

如果这个问题太宽泛而无法在这里回答,我会很感激参考构造一个这样的内核函数,尽管我希望这个例子有点简单。

4

4 回答 4

9

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

A:“非常小心”

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

如果您真的想为特定问题设计内核,那么您是对的,这本身就是一个机器学习问题。这被称为“模型选择问题”。我自己并不是这里的专家,但对我而言,深入了解内核方法的最佳来源是 Rasumussen 和 Williams 的《高斯过程》一书(可在线免费获得),尤其是第 4 章和第 5 章。我很抱歉我只能说“阅读这本充满数学的巨书”,但这是一个复杂的问题,他们在解释方面做得非常好。

于 2011-05-14T15:09:56.147 回答
6

(对于不熟悉机器学习中使用核函数的人来说,核只是将输入向量(构成数据集的数据点)映射到更高维空间,也就是“特征空间”。然后,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中)

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

  • 线性核

  • 多项式

  • 乙状结肠

于 2011-05-14T02:37:28.290 回答
1

我的方法是研究数据:我将如何分离 XOR 问题中的点?当我开始学习一般的 ML,特别是 SVM 时,我就是这样做的,我做的是玩具问题,手绘它,并尝试将类分开。

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

3D之前 3D后

附带说明一下,如果您认为这与本例中的基本相同,则与doug 的 rbfZ并没有太大的不同。np.sqrt(np.square(X + Y))np.abs(X + Y)

我无法访问 Crisitanini 的论文,但我也会以类似的方式解决这个问题,从玩具版本开始(顺便说一下,棋盘代码感谢doug):

棋盘

这里的一个可能的直觉是黑色方块的行和列索引的总和总是偶数,而白色方块总是奇数,所以(row_index + col_index) % 2在这个简单的版本中添加类似的东西作为第三维就可以了。在一个更大、更复杂的棋盘数据集中,就像我在网上找到的这样:

像克里斯蒂亚尼?

事情不是那么简单,但也许可以级联聚类以找到 16 个聚类的平均 X 和 Y 位置(可能使用medoids 聚类),然后应用“模核技巧”的一个版本?

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

最后,正如在对道格的回答的评论中发布的那样,我没有发现像他这样的经验方法有任何问题,通过使用相同算法 (SVC) 将所有可能的内核传递给网格搜索来研究所有可能内核的性能并更改只有内核。您可以通过在转换后的特征空间中绘制相应的边距来添加该方法:例如,对于 rbf,使用 Doug 建议的方程(以及 Sebastian Raschka 绘制决策区域的例程 -此处为单元格 13)。

2017 年10 月 27 日更新 在我的 slack 频道的一次对话中,另一位地球物理学家问我关于异或门设计为 0 和 1 而不是 -1 和 1 的情况(后者类似于勘探地球物理学中的一个经典问题,因此我最初的玩具示例)。

如果我要使用 0 和 1 处理 XOR 门,并且没有关于 rbf 内核的知识,那么在这种情况下,我也会根据这些问题的坐标来研究这个问题,看看是否我可以想出一个转变。

XOR_II

我在这里的第一个观察是,Osx=y在线上,Xsx=-y在线上,所以在一个情况下差异x-y将是 0(或带有一点噪音的小),在另一个情况下分别为 +/-1。绝对值会处理符号,因此Z = np.abs(X-Y)会起作用。顺便说一句,这与道格的 非常相似rbf = np.exp(-gamma * np.abs(x - y)**2)(另一个支持他的答案的原因);事实上,他的 rbf 是一个更通用的解决方案,适用于所有 XOR 情况。

于 2017-10-26T15:53:03.820 回答
0

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

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

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

于 2012-11-07T18:11:31.907 回答