我刚进入机器学习领域,目前正在努力理解最常见的学习算法的工作原理,并了解何时应用每种算法。目前我正在学习支持向量机(SVM)的工作原理,并对自定义核函数有一个问题。
网络上有很多关于SVM更标准的核函数(如线性、RBF、多项式)的信息。然而,我希望了解在什么情况下使用自定义核函数是合理的。我的问题是:
1) SVM的其他可能的核函数有哪些?
2) 在什么情况下会应用自定义核函数?
3) 自定义核函数能显著提高SVM的预测质量吗?
回答:
1) SVM的其他可能的核函数有哪些?
这些核函数有无数种,例如可以参考pykernels中实现的一些(这远非详尽无遗)
https://github.com/gmum/pykernels
- 线性
- 多项式
- RBF
- 余弦相似度
- 指数
- 拉普拉斯
- 有理二次
- 逆多二次
- 柯西
- T-学生
- ANOVA
- 加性卡方
- 卡方
- 最小最大
- 最小/直方图交集
- 广义直方图交集
- 样条
- 索伦森
- 田宫
- 小波
- 傅里叶
- 对数(CPD)
- 幂(CPD)
2) 在什么情况下会应用自定义核函数?
基本上在两种情况下:
- “简单”的核函数效果非常差
- 数据在某种意义上是特定的,因此为了应用传统核函数,必须对数据进行降维。例如,如果你的数据是以图的格式存在的,你无法应用RBF核函数,因为图不是固定大小的向量,因此你需要一个图核来处理这种对象,而无需进行某种信息丢失的投影。有时你对数据有深入的了解,知道一些潜在的结构,这可能有助于分类器。一个这样的例子是周期性,你知道你的数据中存在某种重复效应 – 那么寻找特定的核函数可能是有价值的,等等。
3) 自定义核函数能显著提高SVM的预测质量吗?
是的,特别是总存在一个(假设的)贝叶斯最优核函数,定义如下:
K(x, y) = 1 iff arg max_l P(l|x) == arg max_l P(l|y)
换句话说,如果你有一个真实的概率P(l|x),即标签l被分配给点x的概率,那么我们可以创建一个核函数,它基本上将你的数据点映射到它们最可能的标签的一热编码上,从而实现贝叶斯最优分类(因为它将获得贝叶斯风险)。
在实践中,当然不可能获得这样的核函数,因为这意味着你已经解决了你的问题。然而,这表明存在“最优核函数”的概念,显然没有任何经典的核函数属于这种类型(除非你的数据来自非常简单的分布)。此外,每个核函数都是决策函数上的一种先验 – 你越接近实际的函数家族,就越有可能使用SVM获得一个合理的分类器。