第2章:SVM(支持向量机) - 理论
作者:Savan Patel
时间:2017年5月3日
原文:https://medium.com/machine-learning-101/chapter-2-svm-support-vector-machine-theory-f0812effc72

欢迎来到监督机器学习的第二个踏脚石。同样,本章分为两部分。第1部分(本文)讨论了理论,工作和调整参数。第2部分(这里)我们采取小编码练习挑战。
如果你还没有读过朴素贝叶斯,我建议你在这里仔细阅读。
0.简介
支持向量机(SVM)是由分离超平面正式定义的判别分类器。换句话说,给定标记的训练数据(监督学习),算法输出最佳超平面,其对新示例进行分类。在二维空间中,这个超平面是将平面分成两部分的线,其中每一级都位于两侧。
混乱?别担心,我们将以外行的方式学习。
假设您在图表上给出了两个标签类的图,如图(A)所示。你能为这些类决定分界线吗?

你可能想出了类似于跟随图像的东西(图像B)。它将这两个类别分开。线条左侧的任何点都属于黑色圆圈类,右侧属于蓝色方形类。分类 这就是SVM所做的。它找到一条线/超平面(在多维空间中分隔出类)。不久,我们将讨论为什么要写多维空间。

1. 让它有点复杂......
到现在为止还挺好。现在考虑如果我们有如下图所示的数据怎么办?显然,没有可以在这个 xy 平面中分离两个类的行。那么我们该怎么办?我们应用变换并添加一个维度,我们称之为 z 轴。让我们假设z平面上的点值,w =x²+y²。在这种情况下,我们可以将它作为点与 z 原点的距离进行操作。现在,如果我们在 z 轴上绘图,则可以看到清晰的分离,并且可以绘制线条。


当我们将这条线转换回原始平面时,它会映射到圆形边界,如图 E 所示。这些转换称为 核。

值得庆幸的是,您不必每次都为数据集猜测 / 派生转换。sklearn 库的 SVM 实现提供了内置功能。
2. 让它变得更复杂......
如果数据图重叠怎么办?或者,如果一些黑点在蓝色点内?我们应该画出 1 或 2 中的哪一行?



你觉得哪一个?好吧,两个答案都是正确的。第一个容忍一些异常点。第二个是尝试通过完美分区实现0容差。
但是,还要考虑权衡。在实际应用中,为数百万个训练数据集寻找完美的类需要花费大量时间。正如您将在编码中看到的那样。这称为正则化参数。在下一节中,我们定义了两个术语正则化参数和 gamma。这些是 SVM 分类器中的调整参数。改变那些我们可以在合理的时间内以更高的准确度实现相当大的非线性分类线。在编码练习中(本章的第2部分),我们将看到如何通过调整这些参数来提高 SVM 的准确性。
另一个参数是核。它定义了我们是否需要线性线性分离。这也将在下一节中讨论。

3.调整参数:核,正则化,Gamma 和 间隔。
核
线性 SVM 中超平面的学习是通过使用一些线性代数转换问题来完成的。这是核扮演角色的地方。
对于线性核,使用输入(x)和每个支持向量(xi)之间的点积来预测新输入的等式计算如下:
f(x) = B(0) + sum(ai * (x,xi))
这是一个方程,涉及使用训练数据中的所有支持向量计算新输入向量(x)的内积。必须通过学习算法从训练数据估计系数B0和ai(对于每个输入)。
的多项式核可被写为K(x,xi) = 1 + sum(x * xi)^d 和 指数 为 K(x,xi) = exp(-gamma * sum((x — xi²) [摘自:http://machinelearningmastery.com ]。
多项式和指数核计算更高维度的分离线。这称为核技巧
正则
正则参数(通常在 python 的 sklearn 库中称为 C 参数)告诉 SVM 优化您希望避免错误分类每个训练示例的程度。
对于较大的 C 值,如果超平面更好地将所有训练点分类正确,则优化将选择较小间隔的超平面。相反,非常小的 C 值将导致优化器寻找更大间隔的分离超平面,即使该超平面错误分类更多的点。
下面的图像(与图像 1 和图 2 中的图像 2 相同)是两个不同正则化参数的示例。由于较低的正则化值,上边的一个有一些错误分类。值越大,结果就越正确。


Gamma
Gamma 参数定义单个训练样例的影响达到多远,低值意味着“远”,高值意味着“接近”。换句话说,对于低 ,Gamma在分离线的计算中考虑远离可能的分离线的点。高 Gamma 意味着在计算中考虑接近合理线的点。


间隔
最后是 SVM 分类器的最后但非常重要的特性。SVM核试图获得良好的间隔。
间隔是线与最近的类点的分隔。
一个好的间隔是这两个类的分隔更大。下面的图片给出了好的和坏的边缘的视觉示例。良好的间隔允许 点 在各自类中,而不会跨越其他类。


4.在本章的下一部分,
在下一部分(这里),我们将调整和播放调整参数,并使用 python 的 sklearn 库为 SVM 分类器(也称为 SVC )实现一个迷你项目。我们将把结果与 Naive Bayes Classfier 进行比较。
5.结论
我希望本节有助于理解 SVM 分类器背后的工作。