machine-learning - 支持向量机内核类型

标签 machine-learning svm

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

最佳答案

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

用非常简短的话来说内核

内核做的是更改点积的定义 在线性公式中。这是什么意思? SVM 使用点积,对于定义为 <x,y> = x^Ty = SUM_{i=1}^d x_i y_i 的有限维度.这或多或少地捕捉了两个向量之间的相似性(也是投影的几何运算,它也与向量之间的角度密切相关)。内核技巧的作用是改变 <x,y> 的每次出现。在 SVM 的数学中转化为 K(x,y)说“K是一些空间中的点积”,并且每个内核都存在一个映射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 学习时间:linear < poly < rbf
  • 拟合任何数据的能力:linear < poly < rbf
  • 过拟合的风险 : 线性 < 聚 < rbf
  • 欠拟合风险 : rbf < 多边形 < 线性
  • 超参数的数量:线性 (0) < rbf (2) < poly (3)
  • “本地”如何成为特定内核:线性 < poly < rbf

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

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

    关于machine-learning - 支持向量机内核类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33778297/

    相关文章:

    unix - 如何在第 1 行 libsvm 处获得正确的输入格式

    apache-spark - 如何在 Spark MLlib 中使用 L1 正则化进行 LogisticRegressionWithLBFGS

    matlab - 如何在 MATLAB 上开始 SVM 训练

    python - pySpark如何访问(键,元组)RDD中元组中的值(python)

    MATLAB - 直接将标称数据转换为数值

    r - 在 R 中使用 frbs.learn() 训练 ANFIS 模型时出错

    machine-learning - 无法理解卷积神经网络

    machine-learning - SVM 排名仅适用于小型数据集

    algorithm - 支持向量机 - 一个简单的解释?

    opencv - OpenCV SVM培训