支持向量机内核类型

Support Vector Machine kernel types

支持向量机中使用的流行核函数是线性、径向基函数和多项式。有人可以用简单的方式解释这个内核函数是什么吗:) 因为我是这个领域的新手,所以我不清楚这些内核类型的重要性。

让我们从头说起。支持向量机是一个线性模型,它总是寻找一个超平面来将一个 class 与另一个分开。我将专注于二维情况,因为它更容易理解,并且可以形象化以提供一些直觉,但请记住,这对于更高维度也是正确的(只是线变为平面,抛物线变为抛物面等)。

内核简介

内核所做的是改变线性公式中点积的定义。这是什么意思? SVM 使用点积,有限维定义为 <x,y> = x^Ty = SUM_{i=1}^d x_i y_i。这或多或少捕获了两个向量之间的相似性(也是投影的几何运算,它也与向量之间的角度密切相关)。 kernel trick 所做的是将 SVM 数学中每个出现的 <x,y> 更改为 K(x,y) 表示 "K is dot product in SOME space",并且每个内核都存在一个映射 f_K,使得 K(x,y)=<f_K(x), f_K(y)> 诀窍是,您不直接使用 f_K,而只是计算它们的点积,这会为您节省大量时间(有时 - 无限数量,因为 f_K(x) 可能有无限数量维度)。好的,那对我们来说意味着什么?我们在 x 的 space 中仍然是 "live",而不是 f_K(x)。结果非常好——如果你在 f_K 的 space 中构建一个超平面,分离你的数据,然后回头看看 x 的 space (所以你可能会说你将超平面投影回来f_K^{-1}) 你得到了非线性决策边界!边界的类型取决于 f_K,f_K 取决于 K,因此,K 的选择将(除其他外)影响边界的形状。

线性内核

这里我们实际上没有任何内核,你只有 "normal" 点积,因此在 2d 中你的决策边界总是直线。

如您所见,我们可以正确分离大部分点,但由于 "stiffness" 我们的假设 - 我们永远无法捕获所有点。

多边形

在这里,我们的内核在一定程度上引入了我们特征的 space 多项式组合。因此,我们可以稍微使用 "bended" 决策边界,例如 degree=2

的抛物线

如您所见 - 我们分离了更多点!好的,我们可以通过使用高阶多项式来获得所有这些吗?让我们试试 4!

不幸的是没有。为什么?因为多项式组合不够灵活。它不会 "bend" 我们的 space 难以捕捉到我们想要的东西(也许它不是那么糟糕?我的意思是 - 看看这一点,它看起来像一个异常值!)。

RBF 内核

在这里,我们导出的 space 是 space 高斯分布...每个点都成为正态分布的概率密度函数(按比例缩放)。在这样的 space 中,点积是积分(因为我们确实有无限多的维度!)因此,我们具有极大的灵活性,事实上,使用这样的核你可以分离所有东西(但这很好吗?)

粗略比较

好的,那么主要区别是什么?我现在将根据一些措施对这三个内核进行排序

  • SVM学习时间:linear < poly < rbf
  • 适合任何数据的能力:linear < poly < rbf
  • 过度拟合的风险:linear < poly < rbf
  • 欠拟合风险:rbf < poly < linear
  • 超参数数量:linear (0) < rbf (2) < poly (3)
  • 如何"local"是特定内核:linear < poly < rbf

那么选择哪一个呢?这取决于。 Vapnik 和 Cortes(SVM 的发明者)很好地支持了这样的想法,即您始终应该尝试拟合 可能的最简单模型 并且只有当它不适合时 - 才可以使用更复杂的模型。所以你通常应该从线性模型开始(在 SVM 的情况下是内核),如果它得到非常糟糕的分数 - 切换到 poly/rbf(但是请记住,由于超参数的数量,使用它们要困难得多)

所有图像都是使用 libSVM 网站上的一个漂亮的小程序完成的 - 试一试,没有什么比大量图像和交互更能给你直觉了:-) https://www.csie.ntu.edu.tw/~cjlin/libsvm/