![在这里插入图片描述](https://img-blog.csdnimg.cn/20190703151523255.?,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly94aW9uZ3lpbWluZy5ibG9nLmNzZG4ubmV0,size_16,color_FFFFFF,t_70)
注:转载请标明原文出处链接:https://xiongyiming.blog.csdn.net/article/details/94553561
1 SVM 简介
支持向量机 (Support Vector Machine, SVM)是一类按监督学习 (supervised learning)方式对数据进行二元分类(binary classification)的广义线性分类器 (generalized linear classifier),其决策边界是对学习样本求解的最大边距超平面(maximum-margin hyperplane)。
SVM被提出于1964年,在二十世纪90年代后得到快速发展并衍生出一系列改进和扩展算法,在人像识别(face recognition)、 文本分类(text categorization)等模式识别(pattern recognition)问题中有得到应用。
SVM是由模式识别中广义肖像算法(generalized portrait algorithm)发展而来的分类器,其早期工作来自前苏联学者Vladimir N. Vapnik和Alexander Y. Lerner在1963年发表的研究 [8] 。1964年,Vapnik和Alexey Y. Chervonenkis对广义肖像算法进行了进一步讨论并建立了硬边距的线性SVM [9] 。此后在二十世纪70-80年代,随着模式识别中最大边距决策边界的理论研究 [10] 、基于松弛变量(slack variable)的规划问题求解技术的出现 [11] ,和VC维(Vapnik-Chervonenkis dimension, VC dimension)的提出 [12] ,SVM被逐步理论化并成为统计学习理论的一部分。1992年,Bernhard E. Boser、Isabelle M. Guyon和Vapnik通过核方法首次得到了非线性SVM。1995年,Corinna Cortes和Vapnik提出了软边距的非线性SVM并将其应用于手写数字识别问题,这份研究在发表后得到了广泛的关注和引用,为其后SVM在各领域的应用奠定了基础。
(以上来源于百度百科)
2 引例
我们通过一个故事来理解SVM。这个故事也主要参考博客:https://cuijiahua.com/blog/2017/11/ml_8_svm_1.html
很久以前一位大侠闭关修炼10年,想在江湖上留下自己的名号,不断地向各个武林门派挑战。其中一个门派的掌门布局迎接这位大侠的挑战。这位掌门对这位大侠说:“你能用一根棍将下面不同颜色的球分开?要求:尽量在放更多球之后,仍然适用。”(布局如下图所示)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190703111317256.#pic_center)
这位大侠很快地找到一个合适的位置放了棍,心想这是考我的智商吗?
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190703111629462.#pic_center)
这位掌门又随机放了很多球。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190703111646925.#pic_center)
显然掌门有几个故意是放错了,大侠有赶紧对棍的位置做出调整。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190703111711289.#pic_center)
如上图所示,大侠试图把棍放在最佳位置,好让在棍的两边有尽可能大的间隙。这个间隙就是球到棍的距离,这就是SVM。然而,这位掌门发现这位大侠智力还可以,再考一考内功如何,掌门又重新布局,如下图所示:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190703111723824.#pic_center)
现在,这位大侠没有棍可以很好帮他分开两种球了,现在怎么办呢?大侠苦思冥想,一会儿想到了一个办法,大侠用自己闭关修炼10年练出来的内功将这球都打入空中,然后,大侠随手拿一张纸,插入两个球的中间,如下图所示:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190703111734210.?,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly94aW9uZ3lpbWluZy5ibG9nLmNzZG4ubmV0,size_16,color_FFFFFF,t_70#pic_center)
现在,掌门这个布局被大侠用一条曲线给分开了,如下图所示:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190703111747376.#pic_center)
掌门看了这位大侠内功深厚,对这位大侠赞不绝口。
多年以后,大牛们把这些球称为数据(data),把棍子称为分类器 (classifier), 找到最大间隙的trick叫做优化(optimization),用内功将这些球弄到空中称为核(kernel), 那张纸称为超平面 (hyperplane)。
SVM超平面视频链接如下
B站:https://www.bilibili.com/video/av33852263/
YouTube: https://www.youtube.com/watch?v=3liCbRZPrZA
当一个分类问题,数据是线性可分的,也就是用一根棍就可以将两种小球分开的时候,我们只要将棍的位置放在让小球距离棍的距离最大化的位置即可,寻找这个最大间隔的过程,就叫做最优化。但是,现实往往是很残酷的,一般的数据是线性不可分的,也就是找不到一个棍将两种小球很好的分类。这个时候,我们就需要像大侠一样,运用内功将小球拍起,用一张纸代替小棍将小球进行分类。想要让数据飞起,我们需要的东西就是核函数 (kernel),用于切分小球的纸,就是超平面(hyperplane)。
下面就将具体说明SVM背后的最优化问题。
3 SVM背后的最优化问题
3.1 自然语言描述
对于下图的数据进行分类,我们容易地将其进行分类,并且有很多种方法。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190703133309925.?,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly94aW9uZ3lpbWluZy5ibG9nLmNzZG4ubmV0,size_16,color_FFFFFF,t_70#pic_center)
如下图所示,给出了三种办法将数据进行分类,直观看上去,应该去找位于两类训练样本的“正中间”画出分界线。因为中间的那条线中规中矩,对训练样本的局部扰动的容忍性最好。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190703133411765.?,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly94aW9uZ3lpbWluZy5ibG9nLmNzZG4ubmV0,size_16,color_FFFFFF,t_70#pic_center)
因此,在进行分类时,我们需要找出最佳的分界线(超平面),这样的分类结果的鲁棒性更强。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190703133432277.?,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly94aW9uZ3lpbWluZy5ibG9nLmNzZG4ubmV0,size_16,color_FFFFFF,t_70#pic_center)
SVM需要尝试寻找最优的决策边界,距离两个类型的最近的样本最远。上图外边的两条直线上的点(最近的样本点) 称之为支持向量。而外边的两条直线的距离称之为间隔(margin)。SVM的任务就是使得间隔最大化。
对于上述问题可以很容易的进行分类,我们称之为硬间隔 (Hard Margin)。而在实际情况中,大部分数据并不是这么容易进行分类。为了解决上述问题,我们允许SVM出现一些错误并且这些错误在一定范围是可接受的,这被称之为软间隔 (soft margin)。
3.2 数学语言描述
前面说到,SVM的任务就是使得间隔最大化,如下图所示,间隔为2
d,那么如何使用做数学去描述这个间隔呢?
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190703133516979.?,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly94aW9uZ3lpbWluZy5ibG9nLmNzZG4ubmV0,size_16,color_FFFFFF,t_70#pic_center)
首先回顾一下高中学习过的点到直线的距离:
给出点
(x0,y0),直线为
Ax+By+C=0,则点到直线的距离
r为:
r=A2+B2
∣Ax0+By0+C∣(1)同样地,点
(x0,y0,z0) 到平面
Ax+By+Cz+D=0的距离
r为:
r=A2+B2+C2
∣Ax0+By0+Cz0+D∣(2)同理也可以拓展
n维空间点x,在样本空间中,超平面可通过线性方程描述为:
wTx+b=0(3)其中,
w=(w1;w2;…;wd)为超平面的法向量,决定超平面的方向;
b为位移项,决定超平面与
n维空间中的原点之间的距离。下面将超平面记为
(w,b),因此
n维样本空间中任一点x到超平面
(w,b)的距离为:
r=∥w∥∣∣wTx+b∣∣(4)其中,
∥w∥=w12+w22+…+wd2
.
给定样本数据集
D={(x1,y1),(x2,y2),…,(xm,ym)},yi∈{+1,−1}用于分类,假设超平面能将样本空间的点正确分类,即对于任意的
(xm,ym)∈D,若
∀yi=+1,则+1类别样本中的点到超平面的距离要大于等于间隔d,即
∥w∥∣wTx+b∣≥d;若
∀yi=−1,则-1类别样本中的点到超平面的距离要大于等于间隔
d,即
∥w∥∣wTx+b∣≥d,将绝对值去掉,化简为
∥w∥wTx+b≤−d.
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190703134916429.#pic_center)
因此,合并起来:
{∥w∥wTx+b≥d,∀yi=+1∥w∥wTx+b≤−d,∀yi=−1(5)
将上式化简:
{∥w∥dwTx+b≥+1,∀yi=+1∥w∥dwTx+b≤−1,∀yi=−1(6)而上式中
∥w∥d为一个数,所以可以化简为:
{wdTx+bd≥+1,wdTx+bd≤−1,∀yi=+1∀yi=−1(7)其中,
wdT=∥w∥dwT,
bd=∥w∥db。这样化简的目的是方便后面的计算。
因此,化简后的分类直线如下图所示:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190703143237267.#pic_center)
其中,最中间的直线方程同样也可以化简,如下图所示:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190703143250113.?,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly94aW9uZ3lpbWluZy5ibG9nLmNzZG4ubmV0,size_16,color_FFFFFF,t_70#pic_center)
这样三条直线方程都统一起来,为了后面表达方便,我们再次化简,将公式(7)重新定义为:
{wTx+b≥+1,wTx+b≤−1,∀yi=+1∀yi=−1(8)将两边同时乘上
yi
yi(wTx+b)≥1(9)因此,要有正确分类,必须满足公式(9)的表达式。即公式(9)作为约束条件。
我们的任务就是最大化间隔,而间隔的大小为2
r:
2r=2∥w∥∣∣wTx+b∣∣⇒∥w∥2(10)则这个间隔(margin)定义为:
γ=∥w∥2(11)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190703143629354.?,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly94aW9uZ3lpbWluZy5ibG9nLmNzZG4ubmV0,size_16,color_FFFFFF,t_70#pic_center)
如上图所示,这是被重新定义的直线方程以及间隔。
若想找到最大间隔(maximum margin),即在公式(9)的约束条件下,找到间隔最大值即可,则:
maxw,b∥w∥2 s.t. yi(wTx+b)≥1,i=1,2,…,m(12)注:这个最优化问题是有约束条件的,我们称之为有条件的最优化问题。
显然,为了最大化间隔,仅需要最大化
∥w∥1 ,这个等价于最小化
∥w∥2 。则公示最优化问题可转化为:
minw,b21∥w∥2 s.t. yi(wTx+b)≥1,i=1,2,…,m(13)这就是支持向量机 (Support Vector Machine, SVM) 背后的最优化问题。
注:本博客只说明支持向量机的原理(背后的最优化的问题)。关于最优化问题如何求解比较复杂,后面有时间会更新。
参考资料
[1] https://coding.imooc.com/class/169.html#Anchor
[2] https://cuijiahua.com/blog/2017/11/ml_8_svm_1.html
[3] 机器学习, 北京: 清华大学出版社, 2016年1月
[4] 机器学习(西瓜书). 公式推导解析