SVM 的自定义内核,何时应用它们?
Posted
技术标签:
【中文标题】SVM 的自定义内核,何时应用它们?【英文标题】:Custom kernels for SVM, when to apply them? 【发布时间】:2016-09-24 21:38:05 【问题描述】:我是机器学习领域的新手,现在正试图了解最常见的学习算法是如何工作的,并了解何时应用它们。目前我正在学习支持向量机的工作原理,并对自定义内核函数有疑问。 网络上有大量关于 SVM 的标准(线性、RBF、多项式)内核的信息。但是,我想了解何时使用自定义内核函数是合理的。我的问题是:
1) SVM 还有哪些其他可能的内核? 2) 在什么情况下会应用自定义内核? 3) 自定义内核能否显着提高 SVM 的预测质量?
【问题讨论】:
【参考方案1】:1) SVM 还有哪些其他可能的内核?
其中有无数个,例如在 pykernels 中实现的列表(这远非详尽)
https://github.com/gmum/pykernels
线性 多项式 RBF 余弦相似度 指数型 拉普拉斯算子 有理二次方 逆多重次元 柯西 T-学生 方差分析 添加剂Chi^2 智^2 最小最大 最小/直方图交点 广义直方图交集 样条线 索伦森 谷本 小波 傅里叶 日志 (CPD) 电源 (CPD)2) 在什么情况下会应用自定义内核?
基本上分两种情况:
“简单”的结果非常糟糕 数据在某种意义上是特定的,因此——为了应用传统内核,必须对其进行退化。例如,如果您的数据是图形格式,则不能应用 RBF 内核,因为图形不是一个恒定大小的向量,因此您需要一个图形内核来处理该对象,而不需要某种信息丢失投影。有时您还可以深入了解数据,了解一些底层结构,这可能有助于分类器。一个这样的例子是周期性,你知道你的数据中有一种重复效应 - 那么它可能值得寻找一个特定的内核等。3) 自定义内核能否显着提高 SVM 的预测质量?
是的,特别是总是存在一个(假设的)贝叶斯最优核,定义为:
K(x, y) = 1 iff arg max_l P(l|x) == arg max_l P(l|y)
换句话说,如果标签 l 被分配给点 x 的真实概率 P(l|x),那么我们可以创建一个内核,它将您的数据点映射到它们的 one-hot 编码最可能的标签,从而导致贝叶斯最佳分类(因为它将获得贝叶斯风险)。
在实践中当然不可能得到这样的内核,因为这意味着你已经解决了你的问题。但是,它表明存在“最佳内核”的概念,显然没有一个经典的内核不是这种类型(除非您的数据来自非常简单的分布)。此外,每个内核都是一种优先于决策函数的函数——你用你的诱导函数族更接近实际的函数——越有可能用 SVM 得到一个合理的分类器。
【讨论】:
感谢您的回答 - 我一直在考虑给一个,但很高兴只是在上面吃午饭。关于内核特定数据结构(例如具有不同向量长度的图)的见解很有趣。以上是关于SVM 的自定义内核,何时应用它们?的主要内容,如果未能解决你的问题,请参考以下文章
在 Sci-kit Learn 中将参数解析为 SVM 的自定义核函数
R:使用自定义内核(用户定义内核)的 SVM 性能在 kernlab 中不起作用