支持向量机 Support vecor machine,SVM)本身是一个二元分类算法,是对感知器算法模型的一种扩展,现在的SVM算法支持线性分类和非线性分类的分类应用,并且也能够直接将SVM应用于回归应用中,同时通过OvR或者OVO的方式我们也可以将SWM应用在多元分类领域中。在不考虑集成学习算法,不考虑特定的数据集的时候,在分类算法中SVM可以说是特别优秀的。
算法思想
在感知器模型中,算法是在数据中找出一个划分超平面,让尽可能多的数据分布在这个平面的两侧,从而达到分类的效果,但是在实际数据中这个符合我们要求的超平面是可能存在多个的。如下图所示:
![](https://img.haomeiwen.com/i1652713/e1f0faa80179d84e.png)
在感知器模型中,我们可以找到多个可以分类的超平面讲数据分开,并且优化时希望所有的点都离超平面尽可能的远,但是实际上离超平面足够远的点基本上都是被正确分类的,所以这个是没有意义的;反而比较关心那些离超平面很近的点,这些点比较容易分错。所以说我们只要让离超平面比较近的点尽可能的远离这个超平面,那么我们的模型分类效果应该就会比较不错喽。SⅥM其实就是这个思想。
举个例子简单介绍一下svm算法的几个基本概念,参考知乎作者简之的回答。他通过简单明了的故事讲述了各个概念的生动比喻,这里就不在这里累述了,有兴趣的可以参照网址:<u>https://www.zhihu.com/question/21094489。</u>
线性可分(Linearly Separable):在数据集中,如果可以找出一个超平面,将两组数据分开,那么这个数据集叫做线性可分数据。
线性不可分( Linear Inseparable):在数据集中,没法找出一个超平面,能够将两组数据分开,那么这个数据集就叫做线性不可分数据。
分割超平面( Separating Hyperplane):将数据集分割开来的直线/平面叫做分割超平面。
间隔( Margin):数据点到分割超平面的距离称为间隔。
支持向量( Support Vector):离分割超平面最近的那些点叫做支持向量。如下如:分别用红蓝标记的点就为支持向量点。
![](https://img.haomeiwen.com/i1652713/3db37f350afe15f8.png)
线性可分svm
SVM的解决问题的思路是找到离超平面的最近点,通过其约束条件求出最优解。如下图所示:
![](https://img.haomeiwen.com/i1652713/f571d70cb5eb326f.png)
支持向量满足函数:
![](https://img.haomeiwen.com/i1652713/b283deb8748836bc.png)
支持向量点到超平面的距离:
![](https://img.haomeiwen.com/i1652713/5f8abf722925998d.png)
我们解题的思路是:让所有分类的点各自在支持向量的两边,同时要求尽量使得支持向量远离超平面,优化问题可以用数学公式可以表示如下:
![](https://img.haomeiwen.com/i1652713/5186216e7c0cdf8f.png)
以上优化问题可以转化为:
![](https://img.haomeiwen.com/i1652713/400b400845abb209.png)
可以转化为求损失函数J(w)的最小值,如下表示:
![](https://img.haomeiwen.com/i1652713/d568c00288abee4c.png)
以上问题可以用前面讲的KKT条件求解:
![](https://img.haomeiwen.com/i1652713/e42fb1baeebcf7f8.png)
求解过程如下:
引入拉格朗日乘子之后,优化目标变成了:
![](https://img.haomeiwen.com/i1652713/967db59a5846194e.png)
根据朗格朗日对偶特性,将该优化目标转化为等价的对偶问题来解决,从而优化目标变成了:
![](https://img.haomeiwen.com/i1652713/8bb9a599edb7cd73.png)
对于优化目标而言,可以先求w和b的最小值,然后再求解拉格朗日乘额最大值。求极小值,我们以前学过,可以通过求各自的偏导让其各自为零,可以求得参数。
![](https://img.haomeiwen.com/i1652713/551e1ee3bed0e2b2.png)
将求得的参数带入优化函数L(W,b,β)中,得到只关于β的函数L(β):
求解过程如下:
![](https://img.haomeiwen.com/i1652713/d97662bb45454248.png)
通过对W、b极小化后,我们最终得到的优化函数只和β有关,所以此时我们可以直接极大化我们的优化函数,得到β的值,从而可以最终得到w和b的值。
![](https://img.haomeiwen.com/i1652713/a6a02225d80aa0a8.png)
以上β的求解可以用后面学的SMO算法进行求解,
设存在最优解β;根据W、b和β的关系,可以分别计算出对应的W值和b值般使用所有支持向量的计算均值来作为实际的b值,求得解为:
![](https://img.haomeiwen.com/i1652713/f767bbc9e4b1fbc0.png)
![](https://img.haomeiwen.com/i1652713/de631d659a9fcfbe.png)
最终可以求得svm的分类器模型。
svm算法流程
输入线性可分的m个样本数据{(x1y1)、(x2y2)…,(xmym)},其中x为n维的特征向量,y为二元输出,取值为+1或者-1;svm模型输出为参数w、b以及分类决策函数。步骤如下:
(1) 构造约束优化问题;
![](https://img.haomeiwen.com/i1652713/52ebe5b1ec06e5c8.png)
(2) 使用SMO算法求出上式优化中对应的最优解β*;
(3) 找出所有的支持向量集合S
(4) 更新参数W、b的值;
![](https://img.haomeiwen.com/i1652713/f767bbc9e4b1fbc0.png)
![](https://img.haomeiwen.com/i1652713/de631d659a9fcfbe.png)
(5)构造最终分类器:
![](https://img.haomeiwen.com/i1652713/056a3489602f7d2f.png)
小结
(1)要求数据必须是线性可分的;
(2)纯线性可分的SVM模型对于异常数据的预测可能会不太准
(3)对于线性可分的数据,SVM分类器的效果毛非常不错
网友评论