仁兄,可曾听闻支持向量机?

仁兄,可曾听闻支持向量机?

这是一篇机器学习算法——支持向量机(SVM)的原理篇,可能比较枯燥,但这正是大家在学习算法中必不可少的一步:忍受枯燥!

感兴趣的同学,可以关注一下,这期先介绍原理,再慢慢的一步一步实践,到大家亲手用会SVM(小编也不是很熟,就当是一起学习的过程了~)


(一)SVM的简介

支持向量机(Support Vector Machine)是Cortes和Vapnik于1995年首先提出的,它在解决小样本、非线性及高维模式识别中表现出许多特有的优势,并能够推广应用到函数拟合等其他机器学习问题中。
支持向量机方法是建立在统计学习理论的VC 维理论和结构风险最小原理基础上的,根据有限的样本信息在模型的复杂性(即对特定训练样本的学习精度,Accuracy)和学习能力(即无错误地识别任意样本的能力)之间寻求最佳折衷,以期获得最好的推广能力(或称泛化能力)。

以上是经常被有关SVM 的学术文献引用的介绍,我来逐一分解并解释一下。

所谓VC维是对函数类的一种度量,可以简单的理解为问题的复杂程度,VC维越高,一个问题就越复杂。正是因为SVM关注的是VC维,后面我们可以看到,SVM解决问题的时候,和样本的维数是无关的(甚至样本是上万维的都可以,这使得SVM很适合用来解决文本分类的问题,当然,有这样的能力也因为引入了核函数)。

机器学习本质上就是一种对问题真实模型的逼近(我们选择一个我们认为比较好的近似模型,这个近似模型就叫做一个假设),但毫无疑问,真实模型一定是不知道的(如果知道了,我们干吗还要机器学习?直接用真实模型解决问题不就可以了?对吧,哈哈)既然真实模型不知道,那么我们选择的假设与问题真实解之间究竟有多大差距,我们就没法得知。比如说我们认为宇宙诞生于150亿年前的一场大爆炸,这个假设能够描述很多我们观察到的现象,但它与真实的宇宙模型之间还相差多少?谁也说不清,因为我们压根就不知道真实的宇宙模型到底是什么。

这个与问题真实解之间的误差,就叫做风险(更严格的说,误差的累积叫做风险)。我们选择了一个假设之后(更直观点说,我们得到了一个分类器以后),真实误差无从得知,但我们可以用某些可以掌握的量来逼近它。最直观的想法就是使用分类器在样本数据上的分类的结果与真实结果(因为样本是已经标注过的数据,是准确的数据)之间的差值来表示。这个差值叫做经验风险Remp(w)。以前的机器学习方法都把经验风险最小化作为努力的目标,但后来发现很多分类函数能够在样本集上轻易达到100%的正确率,在真实分类时却一塌糊涂(即所谓的推广能力差,或泛化能力差)。此时的情况便是选择了一个足够复杂的分类函数(它的VC维很高),能够精确的记住每一个样本,但对样本之外的数据一律分类错误。回头看看经验风险最小化原则我们就会发现,此原则适用的大前提是经验风险要确实能够逼近真实风险才行(行话叫一致),但实际上能逼近么?答案是不能,因为样本数相对于现实世界要分类的文本数来说简直九牛一毛,经验风险最小化原则只在这占很小比例的样本上做到没有误差,当然不能保证在更大比例的真实文本上也没有误差。

(二)理解支持向量机

2.1 性支持向量机的思想跟感知机的思想很相似。其思想也是对给定的训练样本,找到一个超平面去尽可能的分隔更多正反例。不同的是其选择最优的超平面是基于正反例离这个超平面尽可能远。

微信图片_20190327143358.jpg

从上图可以发现,其实只要我们能保证距离超平面最近的那些点离超平面尽可能远,就能保证所有的正反例离这个超平面尽可能的远。因此,我们定义这些距离超平面最近的点为支持向量(如上图中虚线所穿过的点)。并且定义正负支持向量的距离为Margin。

2.2函数间隔和几何间隔

对SVM思想有一定理解之后,设超平面为wTx+b=0。我们讲解一下函数间隔和几何间隔的区别。

给定一个样本x,|wTx+b|表示点x到超平面的距离(通常成称为损失)。通过观察wTx+b和y是否同号,我们判断分类是否正确。所以函数间隔定义γ’为:

微信图片_20190327143402.jpg

而函数间隔不能正常反应点到超平面的距离,因为当我们等比例扩大w和b的时候,函数间隔也会扩大相应的倍数。因此,我们引入几何间隔。

几何间隔就是在函数间隔的基础下,在分母上对w加上约束(有点像归一化),定义为γ:

微信图片_20190327143406.jpg

其实参考点到直线的距离,我们可以发现几何间隔就是高维空间中点到超平面的距离,才能真正反映点到超平面的距离。

2.3 SVM目标函数及优化

根据SVM的思想,我们可以知道是要取最大化支持向量到超平面的几何间隔,所以目标函数可以表示为:

微信图片_20190327143413.jpg

在感知机模型最后,我们知道当同时扩大w和b,分子分母都会同样扩大,对目标函数不影响,所以在这里我们将分子(支持向量到超平面的函数间隔)扩大或压缩等于1,则目标函数可以转化为:

微信图片_20190327143416.jpg

但是上式并不是凸函数,不好求解,再进一步转化为:

微信图片_20190327143420.jpg

上式就是一个凸函数,并且不等式约束为仿射函数,因此可以使用拉格朗日对偶去求解该问题。

根据拉格朗日乘子法,引入拉格朗日乘子α,且α≥0我们可以知道,先不考虑min,(2)问题等价于:

微信图片_20190327143423.jpg

然后再考虑min,则有:

微信图片_20190327143426.jpg

应用拉格朗日对偶性,通过求解对偶问题得到最优解,则对偶问题的目标函数为:

微信图片_20190327143428.jpg

这就是线性可分条件下支持向量机的对偶算法。这样做的优点在于:

一是原问题的对偶问题往往更容易求解;

二者可以自然的引入核函数,进而推广到非线性分类问题。

从(4)中,我们可以先求目标函数对于w和b的极小值,再求拉格朗日乘子α的极大值。首先,分别对w和b分别求偏导数,并令为0:

微信图片_20190327143432.jpg

将(5)和(6)代入(4)得到:

微信图片_20190327143435.jpg

对(7)取反得到:

微信图片_20190327143438.jpg

只要我们可以求出(8)中极小化的α向量,那么我们就可以对应的得到w和b,而求解α需要使用SMO算法,由于该算法比较复杂,我们将在下一篇文章专门讲解。假设我们现在已经使用SMO算法得到了最优的α值,记为α_*。

微信图片_20190327143441.jpg

再求b:

对于任一样本(x_s, y_s)有:

微信图片_20190327143445.jpg

注意到任一样本都有y_s2=1,则将右式的1用y_s2代:

微信图片_20190327143447.jpg

将(9)代入上式,可以得到:

微信图片_20190327143450.jpg

这样,我们就能够求解得到线性支持向量机的目标函数的各个参数,进而得到最优的超平面,将正负样本分隔开。


自己对上式的推导:

在这里插入图片描述
在这里插入图片描述在这里插入图片描述


(三)、线性可分的支持向量机存在的问题

介绍了当数据集是线性可分的时候,我们可以使用线性可分的支持向量机将数据进行分类 , 但是,在现实生活中,还存在着很多数据是线性不可分的,或者说本来是线性可分的数据因为存在一些异常点,使得不能线性划分。 当有异常点的存在时会很大程度影响模型的泛化能力。

(四)、SVM处理非线性问题

1:利用核函数

在现实任务中,原始样本空间也许并不存在一个能正确划分两类样本的超平面,那这个时候应该怎么办呢?我们的想法是仍然去找平面,但我们去更高的纬度里去找平面。在低维空间里一些线性不可分的数据集,到高维空间里面将会以更大的概率被线性分开。有人证明,在特征空间中随机的选取一些点,同时随机的将这些点分成两类,那么在越高维度的空间里进行这个操作,这些点能被线性分开的概率越大。如果说你在无限的维度里面进行这个操作,那么这些点能被线性分开的概率为1。

我们定义一个映射φ,将低维矢量XX映射至高维去,即:
X→φ(X)X→φ(X)
其中,φ(X)φ(X) 是更高维的矢量。那么我们应该如何选取这个φ

φ呢,这应该是SVM最有创造力的部分之一:

φ(X) 取无限维(当然不无限有时也能操作),但同时使用有限维的操作。

我们可以不用知道 φ(X)

φ(X) 的显示表达,取而代之,如果对空间任意向量,我们知道一个低维的核函数

K(X1,X2)=φ(X1)Tφ(X2)
K(X1,X2)=φ(X1)Tφ(X2),则仍然能通过SVM,计算WTφ(X)+bWTφ(X)+b 的值,进而得出X所属的类别。

当然,什么样的函数可以作为核函数是有条件的,此处不作说明,有兴趣的同学可以参阅西瓜书支持向量机那一章。SVM最常用的核函数是如下2个:

2:软间隔和正则化

在现实任务中,往往很难确定合适的核函数使得训练样本在特征空间中线性分开。即如果我们硬要求找一个平面将所有样本正确划分,那最终结果很可能是我们找不到这样一个平面,因为条件太苛刻了,退而求其次,我们降低要求。原先我们要求所有样本必须满足以下关系(硬间隔):
yi[WTX+b]≥1(i=1⋯N)yi[WTX+b]≥1(i=1⋯N)
现在我们允许某些样本不满足上述约束,于是我们将约束条件改写为(软间隔):
{yi[WTX+b]≥1−ξi (i=1⋯N)ξi≥0 (i=1⋯N){yi[WTX+b]≥1−ξi (i=1⋯N)ξi≥0 (i=1⋯N)
同时为了使不满足约束的样本尽可能少,我们将优化目标改写为:
min{12∣∣W∣∣2+C∑Ni=1ξi}min{21∣∣W∣∣2+Ci=1∑Nξi}
当然目标函数的改写不止这一种方式,可以通过尝试不同的改写方式,来达到不同的效果。其中
C∑Ni=1ξiCi=1∑Nξi
称作正则项。ξiξi称作松弛变量,用以表征该样本不满足约束的程度。CC是事先设定的参数,根据经验来调试。从这个方面来看,SVM还是很好的,因为事先需要调试的参数并不算多。

于是SVM解决非线性问题用到了:

  1. 到更高维度去找可以分类的超平面。
  2. 有限制地降低分类要求。

(五)、总结

SVM是大家很熟悉的算法,可以用来做分类,也可以用做预测,在SKlearn 等多处地方都有封装,大家学算法,先要把原理弄懂,纵使是我现在写完了这一篇文章,看了很多朋友的博客,也不是很熟这个SVM算法,至于为什么先给大家介绍SVM,是因为,

1:他算的上家喻户晓,每一本机器学习,或者人工智能基础书籍都会介绍这个算法,但是深浅程度参差不齐,大家要有刨根究底的冲劲!

2:刚好我最近帮朋友修改了(其实并没怎么改hhh)一个基于SVM分类检测的一个车牌检测项目,也是开始接触SVM,希望自己能多了解一下这个算法吧,因为写博客,其实也是写给自己看的,在写的过程,温故而知新。

又到了文章的结尾,文中引用了几篇文章:告之侵删, “栋察一切”:https://blog.csdn.net/ffcyygd/article/details/104532946/,文章参考磐创AI的文章,https://myoschain.com/blog/143480923411710976

文章写的不错,我也深受启发。在此感谢,

下几期 我们逐步由浅入深介绍SVM的使用,训练,让大家一起熟悉SVM~ 让我们使用SVM做一个有趣的实验吧~

一不小心又划到底了呢!希望朋友们关注一下小编,我可能是博客中最菜的博主了,不过,现在的我是认真,努力的,希望有更多的朋友关注一下,另外,我自己有机器学习交流群,大家一起学习,不要学的很迷茫,我自己也会分享自己使用的学习资料,大家一起进步!感兴趣的,或者想和群友大佬们交流的可以看我主页联系我哟~
上海第二工业大学 智能科学与技术专业大二——周小夏(CV调包侠)

发布了4 篇原创文章 · 获赞 35 · 访问量 5788

猜你喜欢

转载自blog.csdn.net/qq_46098574/article/details/105499246