第五章 支持向量机
前言
前面的几章我们讲解了一些基础的分类、回归模型,以及模型的简单应用、模型的训练。这一章我们继续来学习一种功能很强大的模型:SVM(支持向量机),SVM是一种强大并且全面的机器学习模型。它既支持线性与非线性的分类、回归,甚至支持异常值的检测。下面就让我们来开始学习吧。
一、思维导图
二、主要内容
1、线性SVM分类
-
定义
用一条直线来分类实例,尽可能的拟合直线到每个分类最近的实例之间距离最大,这个距离称之为街道,位于街道边缘的实例称之为支持向量。街道外的实例数量变化不会影响模型的性能。 -
软/硬间隔分类
硬间隔分类:强制使得所有的实例都能被分类到街道的两旁,没有考虑到异常实例的问题。
软间隔分类:由超参数C来控制街道的宽度,尽可能的把足够多的实例分类到街道的两侧,允许街道上出现异常实例。拟合出一条权衡之后最宽的街道。
图2:硬间隔对异常值的影响 -
控制过拟合
SVM模型中有很多的超参数来约束模型,防止过拟合。超参数C就是其中之一,C值越大街道约小,模型越拟合训练集,C值越小街道越宽。当我们发现SVM过拟合于训练集的时候应该降低C的值。
图3:不同超参数训练处的模型 -
训练线性SVM模型
训练线性SVM模型的方式有三种:第一种是使用LinearSVC类来创建模型,第二种是使用SVC类加上线性内核来创建模型,第三种是使用随机梯度下降SGDClassifier类来创建模型,这种方式将会使用梯度下降的方式来训练模型,虽然收敛的速度不如LinearSVC快,但是适合于核外训练和在线分类任务。
2、非线性SVM分类
-
定义
对于线性不可分的数据集,可以使用某些算法来使得数据集线性可分。 -
特征多项式
解决线性不可分的第一种方式就是使用特征多项式。这种方式可以在多种模型在解决线性不可分的问题,但是都存在同一个问题:特征的数量难以控制。但是在SVM中就不会出现这个问题,因为SVM使用核技巧使得模型产生的效果像是添加了很多的特征项,但实际上并没有。模型拟合出来的不再是是条直线,而是一条蜿蜒的曲线。
图4:使用特征多项式的SVM分类器 -
相似特征
解决线性不可分的第二种方式就是添加相似特征。通过相似函数计算出每个实例的相似值,计算出来的实例就是可以实现线性可分的,但是存在同在一个问题,就是如果训练集的特征特别多,那么将会得到一个特别庞大的数据集。好消息是与特征多项式一样,使用SVM的核函数(高斯RBF内核)同样实现是像是添加了很多相似的特征的效果但是实际上并没有。 -
核函数的选择
针对SVM那么多的核函数我们该如何做出选择?一定要从线性核函数开始尝试,但是要记住一个点LinearSVC类永远比SVC(kernel=“linear”)快很多,特别是对数据集很大情况。如果数据集适中可以使用高斯RBF内核,再如果你又很多的时间和计算能力的话可以尝试一下其他的核函数。 -
计算复杂度
由于LinearSVC与SVC支持的库不同,LinearSVC的库优化了算法,所以LinearSVC永远快于SVC。LinearSVC的计算复杂度为O(mn),SVC的算计复杂度为O(m²n) 到O(m³n)之间,SGDClassifier()的计算复杂度为O(mn)。(m:实例的数量, n:特征的数量)
图5:不同SVM类的算术复杂度
3、SVM回归
-
定义
第一节提到的SVM及支持分类任务又支持回归任务。SVM的回归与分类相反,不再是使得实例拟合在街道的两旁,而是尽可能的使得实例拟合在街道中间,街道的宽度由超参数决定。
图6:SVM回归 -
非线性的回归
与分类任务相似,使用SVM的的核函数来解决非线性的问题。 -
SVM分类与SVM回归的关系
LinearSVR是LinearSVC的回归等价物,SVR是SVC的回归等价物,由于他们支持的库是相同的,所以同样的计算复杂度也是相同的LinearSVR要低于SVR。
4、工作原理
由于是刚刚接触机器学习,本章内容过于复杂选择暂时跳过。
三、课后练习
1.支持向量机的基本思想是什么?
支持向量机的基本思想就是竟可能的拟合每个类别之间可能存在的、最宽的间隔。换句话说就是使得决策边界的间隔最大化,软间隔就是在尽可能完美的分割实例和尽可能的构造最宽的间隔之间寻找一个折中的方法。
2.什么是支持向量?
在支持向量机训练完成之后,位于决策边界上的实例称之为支持向量,支持向量机的预测由这些支持向量来决定,与处在街道之外的实例无关,删除和添加街道之外的实例,对与支持向量机的预测没有影响。
3.使用SVM时,对输入值进行缩放为什么重要?
SVM是在拟合类别之间可能存在的最宽的间隔,如果不对特征进行缩放,那么SVM将会忽略掉一些数值比较小的特征。
4.SVM分类器在对实例进行分类时,会输出信心分数吗?概率呢?
SVM分类会输出实例到决策边界的距离,你可以把这一数值看做是信心分数,但是这个值并不能认为是概率的估算。如果在创建SVM时使用了probability=True那么在SVM训练完成后,算法将会使用逻辑回归对SVM的进行校准,从而计算出概率。
5.如果训练集有成百万个实例和几百个特征,你应该使用SVM原始问题还是对偶问题来训练模型?
这个问题仅限于线性SVM中,因为核SVM只能是用对偶问题,对于原始的SVM的计算复杂度与实例和特征数量成正比,而对偶问题与m²与m³之间的某个值成正比,所以当百万特征是,选择原始的SVM会好。
6.假设你用RBF核训练了一个SVM分类器,看起来似乎对训练集欠拟合,你应该提升还是降低γ(gamma)?C呢?
如果是模型欠拟合与训练集,那么应该是模型过度正则化导致的,这个时候应该选择提升gamma或者是C值来降低对模型的正则化,或者是同时升高。
7.如果使用现成二次规划求解器,你应该如何设置QP参数(H、f、A和b)来解决软间隔线性SVM分类器问题?
我们把硬间隔问题的QP参数定义为H’、f’、A’及b’。软间隔问题的QP参数还包括m个额外参数(np=n+1+m)及m个额外约束(nc=2m)。
四、总结
本章内容相对比较少,但是在机器学习中比较重要。SVM是机器学习中比较优秀同时也比较重要的一个模型,本文中只是对SVM讲了很多概念性的东西。总结一下:
- SVM支持回归也支持分类
- SVM的思想就是尽可能的拟合一个比较宽的街道来分割或者包含实例。分割对应的就是分类,包含对应的就是回归,位于街道边缘上的实例就称之为支持向量。
- 核函数是SVM的重点,核函数可以创建线性模型,非线性模型。一般使用特征多项式(kernel=“poly”)、相似特征(kernel=“rbf”)来解决线性不可分问题。
- 由于支持的库不同,LinearSVC的算法复杂度要由于SVC,同等价物也是如此。
对文章有任何疑惑或者想要和博主一起学机器学习一起进步的朋友们可以添加 群号:666980220。需要机器学习实战电子版或是思维导图的也可以联系我。祝你好运!
项目地址: github