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

Jer*_*Kun 21 kernel machine-learning svm

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

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

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

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

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

Sto*_*ken 9

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

答:"非常小心"

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

如果你真的想为特定问题设计内核那么你是对的,这本身就是一个机器学习问题.它被称为"模型选择问题".我自己并不是我自己的专家,但对我来说最好的核心方法来源是Rasumussen和Williams 的书" 高斯过程 "(可在网上免费获得),尤其是第4章和第5章.我很抱歉我不能说"阅读这本充满数学的大书",但这是一个复杂的问题,他们在解释它方面做得非常好.


dou*_*oug 6

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

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

def RBF():
    return NP.exp(-gamma * NP.abs(x - y)**2)
Run Code Online (Sandbox Code Playgroud)

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

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

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

  • 线性内核

  • 多项式

  • 乙状结肠