svm分类器_机器学习入门第2章:SVM(支持向量机)—理论

e0c7b4db79597b6d64ef9589dc522fb4.png

Coding is but art of thinking than typing.

77370d1d6e8a03c1f4530d547e533516.png

A bug in the code is worth two in the documentation.

欢迎来到监督式机器学习的第二个垫脚石。 同样,本章分为两个部分。 第1部分(本部分)讨论了理论,工作和调整参数。 第2部分(在此),我们将进行小型编码练习挑战。

如果您还没有阅读过朴素贝叶斯,我建议您在这里仔细阅读。

0.简介

支持向量机(SVM)是由分离超平面正式定义的判别式分类器。 换句话说,给定带标签的训练数据(监督学习),该算法将输出最优超平面,该超平面将新示例分类。 在二维空间中,此超平面是将平面分为两部分的线,每一部分位于每一侧。

令人困惑? 不用担心,我们将以通俗易懂的方式学习。

假设您在图形上得到了两个标签类的图,如图(A)所示。 您可以为类别决定分隔线吗?

1ad8b939bc3be0d402a98d4841da9111.png

Image A: Draw a line that separates black circles and blue squares.

您可能想出了类似于下图(图B)的内容。 它公平地将两个类分开。 线左边的任何点都属于黑色圆圈类,而右边的点属于蓝色正方形类。 类别分离。 这就是SVM的工作。 它找出线/超平面(在分隔出类的多维空间中)。 很快,我们将讨论为什么我要写多维空间。

9306007774f0dc118c90faa71896bce3.png

s Image B: Sample cut to divide into two classes.

1.使它有点复杂...

到目前为止,一切都很好。 现在考虑如果我们有如下图所示的数据怎么办? 显然,在此x-y平面中没有线可以将两个类分开。 那么我们该怎么办? 我们应用变换并添加一个维度,我们称之为z轴。 假设z平面上的点值为w =x²+y²。 在这种情况下,我们可以将其作为点到z起点的距离进行操作。 现在,如果我们在z轴上绘图,则可以看到清晰的分隔线并可以绘制一条线。

01ef176e2695b78738ac839616e6d812.png

Can you draw a separating line in this plane?

b9c5a11cf6be875f48f2d39c499f7129.png

plot of zy axis. A separation can be made here.

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

cb01c545eddf0d95f2adddb2cad4a072.png

Transforming back to x-y plane, a line transforms to circle.

值得庆幸的是,您不必每次都对数据集进行猜测/推导。 sklearn库的SVM实现将其内置。

2.使它更加复杂…

如果数据图重叠,该怎么办? 或者,如果某些黑点在蓝色的内部呢? 我们应该画1或2之间的哪条线?

fb3388e3034a4842a45ae5ab3d1099b0.png

What in this case?

01d8531747a046324d2b8edc91864651.png

Image 1

507cc0b23e60c0b1c9774411f069b6f3.png

Image 2

您认为哪一个? 好吧,两个答案都是正确的。 第一个容忍一些离群点。 第二个尝试通过完美分区实现零容忍。

但是,需要权衡取舍。 在实际应用中,为数百万个训练数据集找到理想的分类需要大量时间。 如您将在编码中看到的。 这称为正则化参数。 在下一节中,我们定义两个术语正则化参数和gamma。 这些是SVM分类器中的调整参数。 改变这些,我们可以在合理的时间内以更高的精度获得可观的非线性分类线。 在编码练习(本章第二部分)中,我们将看到如何通过调整这些参数来提高SVM的精度。

另外一个参数是内核。 它定义了我们是否要线性分离。 下一节还将对此进行讨论。

0009583ad70fc9ca748299103f38c164.png

When somebody asks me for advice.

3.调整参数:内核,正则化,伽玛和边距。

内核

通过使用一些线性代数转换问题,可以完成线性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²)))。

多项式和指数核可计算出较高维的分隔线。 这称为内核技巧

正则化

正则化参数(在python的sklearn库中通常称为C参数)告诉SVM优化,您要避免避免对每个训练示例进行错误分类的程度。

对于较大的C值,如果该超平面在使所有训练点正确分类方面做得更好,则优化将选择一个较小边距的超平面。 相反,很小的C值将导致优化器寻找较大利润的分离超平面,即使该超平面对更多点进行了错误分类。

下面的图像(与第2节中的图像1和图像2相同)是两个不同的正则化参数的示例。 左一由于归一化值较低而分类错误。 更高的价值会带来如正确的结果。

11b0e70417c0dc0019ec848d0bacf081.png
69df02aeb18073ba48daf4f613e951c7.png

Left: low regularization value, right: high regularization value

Gamma伽玛

gamma参数定义单个训练示例的影响力达到的程度,低值表示"远",高值表示"接近"。 换句话说,对于较低的伽玛系数,在计算分隔线时应考虑远离合理的分隔线的点。 高伽马意味着在计算中考虑接近合理线的点。

17f007c861458afb9631011a2ee5e30f.png

High Gamma

f1a06712b54791ca64d4fd680ed3a1f9.png

Low Gamma

Margin余量

最后是SVM分类器的最后一个非常重要的特征。 支持核心的SVM试图获得良好的利润。

边距是最接近类别点的线的分隔。

良好的余量是两个类之间的差距较大的一个。 下图给出了良好和不良边距的直观示例。 足够的余量可以使这些点处于各自的类中,而不会交叉到其他类。

1af0a8c2b7d10f7f283bf75e5ab6ac22.png
88c6cfdf74417c2f43ab63ac08be2556.png

4.在本章的下一部分中,

在下一部分(此处)中,我们将调整和播放调整参数,并使用python的sklearn库为SVM分类器(也称为SVC)实现一个小型项目。 我们将结果与朴素贝叶斯分类器进行比较。 在此处查看编码部分:

5.结论

我希望本节对理解SVM分类器的工作有所帮助。 如果您有任何意见,建议或建议,请在下方写下来。

(本文翻译自Savan Patel的文章《Chapter 2 : SVM (Support Vector Machine) — Theory》,参考:https://medium.com/machine-learning-101/chapter-2-svm-support-vector-machine-theory-f0812effc72)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值