支持向量机详解

支持向量机详解

 

  SVM(Support Vector Machine)是数据挖掘中常用的分类算法。事实上,在2012年深度学习算法提出之前,SVM一直被认为是机器学习领域近几十年来最成功的算法。SVM的难度相较于其他分类算法要高一些儿,特别是涉及到的数学知识比较多,不过不要害怕,本文尽量把每个知识点讲清楚,力求更多的人能看懂SVM分类算法。现在,请深呼吸几次,给大脑充足的氧气,我们即将一起去探究SVM的点点滴滴。

  我们根据数据集的分布情况,可将数据集分成两种:线性可分与线性不可分。所谓的线性可分,是指我们可以找到一个线性方程(2维情况下是一条直线,3维情况下是一个平面),将数据分隔开来。下图展示了2维数据集线性可分与线性不可分的情况。

  如图所示,在左图中可以找到一条直线,将两类数据分隔开,而右图则找不到这样一条直线,因此我们称其是线性不可分的。

  本文将着重讨论SVM在线性可分数据集上的应用,对于线性不可分的数据集,留待在后续的文章中详细讨论。

  SVM的模型  

  

  对于给定的训练数据集,我们可能有多条不同的线性方程可以将数据分隔开,如上图所示。SVM分类算法的目标,就是找到最优划分的那条线性方程。因此,线性方程的数学模型,即是SVM的分类模型,其可以表示为:

 

  

 

  其中,X是数据集的特征向量,W是权重向量,b是偏置项。

  我们说到,要寻找最优划分的线性方程,那么,该如何度量线性方程划分结果的优劣呢?这里我们引入一个概念:边缘(Margin)

  有时候,我们也会称线性方程为超平面(hyperplane,因为3维空间里的线性方程就是指一个平面,而对于高维空间,则是超平面)。对于一个超平面,我们做一个这样的操作:将超平面向上平移,直到蓝色类的第一个点落在超平面上时停止(上方虚线);将超平面向下平移,直到红色类的第一个点落在超平面上时停止(下方虚线)。两条虚线间的距离即为该超平面的边缘

  那么这个距离得怎么算呢?我们知道,将超平面平移时,权重向量W是不会改变的,仅仅是改变偏置项b。(平移时直线的斜率不会变),因此,两条虚线的方程可以这样表示:(我们把偏置项的变化量移到了方程右边)

 

  

  我们不妨用(X,y)表示一条数据记录,其中X是记录的特征向量,y是记录的类标号,我们把蓝色类的类标号记为1,把红色类的类标号记为-1,则有:

 

 

  为了之后计算方便,我们可以调整Wb的取值,对方程做缩放变换,使得k=1,k'=-1,则上式可改写为:

 

    我们可以将上面两个不等式概括为更加简洁的形式:

 

 

  假设超平面 W * X + b = 0上有p1,p2两点,则有 W * Xp1 + bp1 = 0,W * Xp2 + bp2 = 0,两式相减有 W * ( Xp1 - Xp2 ) = 0。其中 Xp1 - Xp2  是该超平面上的向量,说明权重向量W和该超平面垂直

  假设上下虚线上分别有p3,p4两点,则对于p3点,有 W * Xp3 + bp3 = 1;对于p4点,有 W * Xp4 + bp4 = -1,两式相减有 W * ( Xp3 - Xp4 ) = 2。Xp3 - Xp4 是p3,p4两点间的向量,其在W方向上的投影长度即是两条虚线间的距离d,所以有:

  即:

  其中,||W||是向量W的模长。至此,我们已经知道了如何计算一个超平面边缘的大小,SVM的目标,就是找到边缘最大的那个超平面,我们称之为最大边缘超平面(Maximum Margin Hyperplane)。也就是说,我们要优化距离函数d,使得取得最大值,此时对应的W0,就是MMH的权重向量。

  为什么要寻找边缘最大的超平面呢?因为具有较大边缘的超平面具有更小的泛化误差(也就是将应用在其它样本上的误差),边缘较小的超平面,对训练数据的过分拟合程度会更高,从而在未知样本上的泛化能力较差。

  目标函数

  通过上面的讨论,我们知道了需要最大化边缘,最大化边缘等价于最小化下面的函数:

 

 

 

  像 f(W) 这样我们要优化的目标,在机器学习领域,有一个专门的术语:目标函数

 

  同时,不要忘了还有式1的不等式约束。总结来说,SVM的学习任务为以下被约束的优化问题:

 

 

  可以看到,目标函数 f(W) 是二次的,而不等式约束在参数W和b上面是线性的,这在数学上属于一个凸优化问题,对于凸优化问题,我们可以通过标准的拉格朗日乘子(Lagrange Multiplier)方法求解。下面简要介绍一下求解这个优化问题的主要思想。

 

  首先,必须改写目标函数,将施加在解上的约束包括进来,新目标函数称为该优化问题的拉格朗日函数:  

   其中,N为训练数据集的大小,λi称为拉格朗日乘子。拉格朗日函数的第一项为原函数,第二项则捕获了不等式约束。为了理解改写原目标函数的必要性,考虑式2,容易证明当 W=0(零向量)时函数取得最小值,然而,这样的解违背了约束条件,因为b此时没有解。事实上,如果 W,b 的解违反了约束,即 y( W X+ b ) - 1 < 0 ,假定λi≥ 0,则任何不可行的解仅仅是增加了拉格朗日函数的值,当我们求得函数的最小值时,即可保证此时的解W0,b0是满足约束条件的。

  为了最小化拉格朗日函数,需要对L求关于W和b的偏导,并令它们等于0:

  

  

  因为拉格朗日乘子λi是未知的,所以现在我们仍然求解不了W和b的值。

  如果我们能将式1中的不等式约束转换为等式约束,则我们可以从该等式约束得到的N的方程,加上式5,6(共N+2个方程),从而求得W,b,λi(共N+2个参数)的可行解。幸运的是,这种转换在数学上是可行的,称为Karuch-Kuhn-Tucher(KKT)转换。式1的不等式约束等价于以下的等式约束:

 

  

  乍一看,拉格朗日乘子的数量好像和训练数据集的规模一样大。不过我们冷静想一下,绝大部分的点,满足  y ( W * X + b ) - 1 > 0,因为它们都在虚线的一侧,并没有落在虚线上,因此,为了满足式6的等式约束,这些点对应的拉格朗日乘子必须等于0,我们所需要求的,只是那些落在虚线上的点对应的λ。这些点被称为支持向量,因为式5中W的取值只受那些λ≠0的点的影响,这也是这个算法被称为支持向量机的原因。

  现在,我们已经过滤掉了大量为0的参数,但是对于式4的优化问题求解仍然是一项十分棘手的任务,因为方程中同时涉及了W,b,λ三类参数。我们可以将拉格朗日函数转化成对应的对偶函数(duel function)来进一步简化该问题。在对偶函数中,参数只有拉格朗日乘子λ。

  对偶定理陈述如下:

  如果原问题有最优解,则其对偶问题也有最优解,并且相应的最优解是相同的。

  我们可以将式5,6代入到式4中求得原拉格朗日函数的对偶拉格朗日函数。

  首先,将式4展开:

  代入式5,6:

 

  因为,λi=0时,对结果没有影响,所以我们可以把数据的范围从整个训练数据集缩小到支持向量的集合,用S表示支持向量的集合。

 

  此时有约束条件如下:

 

  至此,通过层层的转化,我们已经找到了最终的目标函数:对偶拉格朗日函数LD。可以看到,LD仅涉及到拉格朗日乘子和支持向量,而原拉格朗日函数L除了拉格朗日乘子外还涉及超平面的参数W,b。奇妙的是,这两个优化问题的解是等价的。同时,需要注意的是,LD中的二次项前面的符号是负的,这说明原来涉及L的最小化问题已经变成了涉及LD的最大化问题

  SMO算法

  首次,对坚持到这里的同学们点个赞,经过各种数学公式的层层洗礼之后还未放弃实属不易。告诉大家一个好消息,SMO算法是求解SVM分类器的最后一步了,现在,大家可以站起来活动活动筋骨,再次深吸几口气,让大脑休息一会儿再一鼓作气攻克最后一步吧!

  那么,如何求解式7呢?这在数学上属于二次规划问题,可以使用通用的二次规划算法来求解,然而,该问题的复杂程度正比于训练数据集的规模,这会在实际的任务中造成很大的开销,为了避开这个障碍,人们通过利用问题本身的特性,提出了很多高效的算法,SMO(Sequential Minimal Optimization)就是其中一个著名的代表。

  SMO的基本思想是选取一对变量λi,λj,并固定其他参数,由于存在式8的约束,所以λi可以用λj和其他固定的拉格朗日乘子导出。这样LD就变成了一个只关于单变量λi的二次规划问题,仅有的约束是λ> 0,只靠导数的方法就可以高效地计算出更新后的λi,λj。我们可以将参数全都初始化为0,然后不断执行如下步骤直至收敛。

  1.选取一对需要更新的变量λi,λj

  2.固定除λi,λj外的参数,通过式7更新λi,λj

  式8的约束可以改写为:

  即:

  将式10代入到式7中并求LD对λi的导数得:

 

  在上式中,仅有λi是未知的,因此,令该导数为0,则可以求得λi的值,再代入到式10中,即可以求得λj的值。重复以上计算过程,直到各拉格朗日乘子不再变化。

  当计算出支持向量对应的拉格朗日乘子后,我们就可以通过式5计算出权重向量W的值了。

  说了这么多,一直在说W如何计算,那么偏置项b呢?我们可以通过两条虚线的方程:W*X+b=±1 来计算b的值,可以知道,两条虚线的偏置项b计算出来的结果是不一样的,我们不妨记为b1,b2。常用的做法是,取它们的平均值作为b的最终取值,也即是:b=(b1+b2)/2。

  到这里,线性SVM算是完全讲完了,在后续的文章中我们将一起讨论在非线性可分的数据集上该如何训练SVM模型。好了,快去让大脑放松一下吧。 

转载于:https://www.cnblogs.com/liuyongdun/p/11603868.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值