支持Vector Machine内核类型

7 machine-learning svm

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

lej*_*lot 20

让我们从开始吧.支持向量机是一个线性模型,它总是寻找超平面将一个类与另一个类分开.我将重点关注二维案例,因为它更容易理解并且 - 可能可视化以给出一些直觉,但请记住,这对于更高维度(简单的线条变为平面,抛物线变为抛物线等)是正确的.

内核用很短的单词

内核的作用是改变线性公式中点积的定义.这是什么意思?SVM适用于点积,定义为有限维<x,y> = x^Ty = SUM_{i=1}^d x_i y_i.这或多或少捕获两个矢量之间的相似性(但也是投影的几何操作,它也与矢量之间的角度密切相关).什么内核技巧的作用是将<x,y>SVM数学中的每个出现都改为K(x,y)"K是SOME空间中的点积",并且每个内核都存在一个映射f_K,这样就可以K(x,y)=<f_K(x), f_K(y)>了,你不直接使用f_K,但是只计算他们的点积,这可以节省大量的时间(有时 - 无限量,因为f_K(x)可能有无限多个维度).好吧,那么它对我们有什么影响?我们仍然"生活"在x的空间,而不是f_K(x).结果非常好 - 如果你在f_K的空间中构建超平面,分离你的数据,然后回顾x的空间(所以你可能会说你通过f_K ^ { - 1}投影超平面)你会得到非线性的决定界限!边界的类型取决于f_K,f_K取决于K,因此,K的选择(除其他外)将影响边界的形状.

线性内核

这里我们实际上没有任何内核,你只有"正常"的点积,因此在2d你的决策边界总是行.

SVM_lin

正如您所看到的,我们可以正确地分离大多数点,但由于我们假设的"僵硬" - 我们永远不会捕获所有这些点.

保利

在这里,我们的内核在一定程度上引入了我们特征的多项式组合的空间.因此,我们可以使用稍微"弯曲"的决策边界,例如度数= 2的抛物线

SVM_poly2

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

SVM_poly4

不幸的是.为什么?因为多项式组合不够灵活.它不会"弯曲"我们的空间足以捕获我们想要的东西(也许它不是那么糟糕?我的意思是 - 看看这一点,它看起来像一个异常值!).

RBF内核

在这里,我们的诱导空间是高斯分布的空间......每个点都成为正态分布的概率密度函数(直到缩放).在这样的空间中,点积是积分(因为我们有无数个维度!)因此,我们有极大的灵活性,事实上,使用这样的内核你可以分离一切(但它是好的吗?)

SVM_rbf

粗略的比较

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

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

那么选择哪一个?这取决于.Vapnik和Cortes(SVM的发明者)非常支持这样一种观点,即你总是应该尽可能地设计最简单的模型,并且只有在它不合适的情况下 - 去寻找更复杂的模型.所以你通常应该从线性模型开始(在SVM的情况下是内核)并且如果得分非常糟糕 - 切换到poly/rbf(但是请记住,由于超参数的数量,使用它们要困难得多)

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