SVM详细讲解

转自:https://blog.csdn.net/myarrow/article/details/51261971html

1. 目标

     SVM是一个二类分类器,它的目标是找到一个超平面,使用两类数据离超平面越远越好,从而对新的数据分类更准确,即便分类器更加健壮。web

     支持向量(Support Vetor):就是离分隔超平面最近的哪些点。算法

     寻找最大间隔:就是寻找最大化支持向量到分隔超平面的距离,在此条件下求出分隔超平面。svg

     数据分类类别:函数

     1)线性可分性能

     2)线性不可分学习

     下面首先分析线性可分的状况。优化

1.1 SVM特色

     1)非线性映射是SVM方法的理论基础,SVM利用内积核函数代替向高维空间的非线性映射;
     2对特征空间划分的最优超平面是SVM的目标最大化分类边际的思想是SVM方法的核心
     3支持向量是SVM的训练结果,在SVM分类决策中起决定做用的是支持向量。所以,模型须要存储空间小,算法鲁棒性强;
     4无任何前提假设,不涉及几率测度;
spa

     5SVM算法对大规模训练样本难以实施.net

          因为SVM是借助二次规划来求解支持向量,而求解二次规划将涉及N阶矩阵的计算(N为样本的个数),当N数目很大时该矩阵的存储和计算将耗费大量的机器内存和运算时间。针对以上问题的主要改进有有J.Platt的SMO算法、T.Joachims的SVM、C.J.C.Burges等的PCGC、张学工的CSVM以及O.L.Mangasarian等的SOR算法

     6用SVM解决多分类问题存在困难

           经典的支持向量机算法只给出了二类分类的算法,而在数据挖掘的实际应用中,通常要解决多类的分类问题。能够经过多个二类支持向量机的组合来解决。主要有一对多组合模式、一对一组合模式和SVM决策树;再就是经过构造多个分类器的组合来解决。主要原理是克服SVM固有的缺点,结合其余算法的优点,解决多类问题的分类精度。如:与粗集理论结合,造成一种优点互补的多类问题的组合分类器。

1.2 最优超平面求解流程


1.3 求带松驰变量的超平面流程



2. 寻找最大间隔(线性可分)

2.1 点到平面的距离


2.2 点到超平面的距离


    在上图中,分隔超平面为:f(x) = wT+ b=0 (注:w和x均为列向量

   点X0到分隔超平面的距离为:|wTx0 + b|/||w|| 

   注:||w||为向量w的范数,即为w与w的内积开平方

   最大间隔为:2/||w||

2.3 使点到超平面的距离最大化

   1)求最大间隔(2/||w||<为几何间隔>)的最大值:max(2/||w||)  <=>

   2)求||w||的最小值:min(||w||)  <=>

   3)由于||w||单调,为方便后面求极值时求偏导,则求 

         很显然||w||为0时,其值最小,反映在下图中,就是H1H2两条直线间的距离无限大,全部样本点都进入了没法分类的灰色地带。


    为了解决此问题,须要加一个约束条件:

    咱们把全部样本点中间隔最小的那一点的间隔定为1,也就意味着集合中的其余点间隔都不会小于1,因而有下列不等式总成立:

     wTxi + b≥+1, yi=+1

     wTxi + b-1,  yi=-1    (i=1,2,…,n)
    于此,此优化问题变成了求条件最优化问题:

        

     4)在求得上述最小值的状况下,从而求出w和b,即求出了分类超平面,此分类超平面可使几何间隔最大,而后可用此分类超平面进行分类

2.4 求解极小值

2.4.1 原问题描述   

    1)样本集合

     

    xi为:m维列向量,yi的取值为:-1或+1,样本个数为:n。

    2)优化目标


     因而可知,此求最小值的是带有约束条件(s.t. subject to)的,且这是一个凸二次规划问题,因此必定会存在全局的最优解,但实际求解较为麻烦。实际的作法:将不等式约束转化为等式约束,从而将问题转化为拉格朗日求极值的问题。


    为方便求最优解,需使用拉格朗日乘子把此不等式或等式约束条件融合到求最优解的函数中,从而生成拉格朗日函数。

2.4.2 生成拉格朗日函数

    如今要求解以下的最小值:

  

    上面的目标函数是二次的,约束条件是线性的,因此它是一个凸二次规划问题。这个问题能够用现成的QP (Quadratic Programming) 优化包进行求解。一言以蔽之:在必定的约束条件下,目标最优,损失最小。

      此外,因为这个问题的特殊结构,还能够经过拉格朗日对偶性(Lagrange Duality)变换到对偶变量 (Dual Variable) 的优化问题,即经过求解与原问题等价的对偶问题(Dual Problem)获得原问题的最优解,这就是线性可分条件下支持向量机的对偶算法,这样作的优势在于:

      1)对偶问题每每更容易求解;

      2)能够天然的引入核函数,进而推广到非线性分类问题。


2.4.3 什么是拉格朗日对偶性?

     简单来说,经过给每个约束条件加上一个拉格朗日乘子(Lagrange Multiplier),定义拉格朗日函数(经过拉格朗日函数将约束条件融合到目标函数里去,从而只用一个函数表达式就能清楚的表达出咱们的问题),即生成的拉格朗日函数以下所示:

  

     而后令:

               

     容易验证,当某个约束条件不知足时,例如,那么显然有θ(w)为无穷大(只要令为无穷大便可);而当全部约束条件都知足时,则最优值为亦即最初要最小化的量。

     所以,在要求约束条件获得知足的状况下最小化实际上等价于直接最小化(固然,这里也有约束条件,就是)   ,由于若是约束条件没有获得知足,会等于无穷大,天然不会是咱们所要求的最小值。

    具体写出来,目标函数变成了:


     这里用表示这个问题的最优值,且和最初的问题是等价的。若是直接求解,那么一上来便得面对w和b两个参数,而又是不等式约束,这个求解过程很差作。不妨把最小和最大的位置交换一下,变成:


      交换之后的新问题是原始问题的对偶问题,这个新问题的最优值用来表示。并且有,在知足KKT条件的状况下,这二者相等,这个时候就能够经过求解对偶问题来间接地求解原始问题。

       换言之,之因此从minmax的原始问题,转化为maxmin的对偶问题,一者由于的近似解,两者,转化为对偶问题后,更容易求解。

      下面能够先求wb的极小,再求的极大。

2.4.4 什么是KKT条件?

     通常地,一个最优化数学模型可以表示成下列标准形式:


    其中,f(x)是须要最小化的函数,h(x)是等式约束,g(x)是不等式约束,p和q分别为等式约束和不等式约束的数量。

    同时,得明白如下两点:

  • 凸优化的概念:\mathcal{X} \subset \mathbb{R}^n 为一凸集, f:\mathcal{X}\to \mathbb{R} 为一凸函数。凸优化就是要找出一点 x^\ast \in \mathcal{X} ,使得每一 x \in \mathcal{X} 知足 f(x^\ast)\le f(x) 。
  • KKT条件的意义:它是一个非线性规划(Nonlinear Programming)问题能有最优化解法的必要和充分条件。

    而KKT条件就是指上面最优化数学模型的标准形式中的最小点 x* 必须知足下面的条件:


      通过论证,咱们这里的问题是知足 KKT 条件的(首先已经知足Slater Condition,再者f和gi也都是可微的,即L对w和b均可导),所以如今咱们便转化为求解第二个问题。

    也就是说,原始问题经过知足KKT条件,已经转化成了对偶问题。而求解这个对偶学习问题,分为3个步骤:

   1)首先要让L(w, b, α) 关于w和b最小化;

   2)而后求对的极大;

   3)利用SMO算法求解对偶问题中的拉格朗日乘子。

2.5 求解对偶问题  

2.5.1 求L(w, b, α) 关于wb的最小化

       对L(w, b, α)分别求w和b的极值。也就是L(w, b,α)对w和b的梯度(偏导)为0:∂L/∂w=0和∂L/∂b=0,还须要知足>=0。求解这里导数为0的式子能够获得:


    其中xi,yi都是样本中的已知量,α为未知量

    将上面两个等式代入L(w,b,α)以消除w和b


即:

   

   此拉格朗日函数中只含有未知量,而后对其求极大值。

 2.5.2 求对的极大

     关于对偶问题的最优化问题。通过上面第一个步骤的求w和b,获得的拉格朗日函数式子已经没有了变量w,b,只有。从上面的式子获得:

     

     根据以上公式求出以后,则可求出w和b,以下所式:

便可求出w(也是clip_image044[16],原问题的解)



2.5.3 分类函数


    也就是说,之前新来的要分类的样本首先根据w和b作一次线性运算,而后看求的结果是大于0仍是小于0,来判断正例仍是负例。如今有了clip_image010[61],咱们不须要求出w,只需将新来的样本和训练数据中的全部样本作内积和便可。那有人会说,与前面全部的样本都作运算是否是太耗时了?其实否则,咱们从KKT条件中获得,只有支持向量的clip_image060[16],其余状况clip_image066[16]。所以,咱们只需求新来的样本和支持向量的内积,而后运算便可。这种写法为下面要提到的核函数(kernel)作了很好的铺垫。

2.6 松驰变量(Slack Variable)

     以前讨论的状况都是创建在样例线性可分的假设上,当样例线性不可分时,咱们能够尝试使用核函数来将特征映射到高维,这样极可能就可分了。然而,映射后咱们也不能100%保证可分。那怎么办呢,咱们须要将模型进行调整,以保证在不可分的状况下,也可以尽量地找出分隔超平面。
    看下面两张图:

  

      能够看到一个离群点(多是噪声)可形成超平面的移动,间隔缩小,可见之前的模型对噪声很是敏感。再有甚者,若是离群点在另一个类中,那么这时候就是线性不可分了。

      这时咱们应该容许一些点游离并在在模型中违背限制条件(函数间隔大于1)。咱们设计获得新的模型以下(也称软间隔):

      

      引入非负参数后(称为松弛变量),就容许某些样本点的函数间隔小于1,即在最大间隔区间里面,或者函数间隔是负数,即样本点在对方的区域中。而放松限制条件后,咱们须要从新调整目标函数,以对离群点进行处罚,目标函数后面加上的就表示离群点越多,目标函数值越大,而咱们要求的是尽量小的目标函数值。这里的C是离群点的权重,C越大代表离群点对目标函数影响越大,也就是越不但愿看到离群点。咱们看到,目标函数控制了离群点的数目和程度,使大部分样本点仍然遵照限制条件。

      模型修改后,拉格朗日公式也要修改以下:

     

      上式中的都是拉格朗日乘子,回想咱们在拉格朗日对偶中提到的求法,先写出拉格朗日公式,而后将其看做是变量w、b和的函数,分别对其求偏导,其值为0,则可得:获得w和b的表达式。

     

      因为都大于0,且,因此而后代入拉格朗日公式,其结果以下:

     

     这就是咱们最新的优化目标,参数只有,咱们只须要找到使W()最大的便可。

     此时,咱们发现没有了参数,与以前模型惟一不一样在于又多了的限制条件。须要提醒的是b的求值公式也发生了改变,改变结果在SMO算法里面介绍。先看看KKT条件的变化:

      

     上面的式子代表在两条间隔线外的样本点前面的系数为0,离群样本点前面的系数为C,而支持向量(也就是在超平面两边的最大间隔线上)的样本点前面系数在(0,C)上。经过KKT条件可知,某些在最大间隔线上的样本点也不是支持向量,相反也多是离群点。

2.7 坐标上升法(Coordinate Ascent)

      在最后讨论W()的求解以前,咱们先看看坐标上升法的基本原理。假设要求解下面的优化问题:

    

     这里W是向量的函数。以前咱们在回归中提到过两种求最优解的方法,一种是梯度降低法,另一种是牛顿法。如今咱们再讲一种方法称为坐标上升法(求解最小值问题时,称做坐标降低法,原理同样)。其过程以下所示:

     

      最里面语句的意思是固定除以外的全部,这时W可看做只是关于的函数,那么直接对求导优化便可。这里咱们进行最大化求导的顺序i是从1到m,能够经过更改优化顺序来使W可以更快地增长并收敛。若是W在内循环中可以很快地达到最优,那么坐标上升法会是一个很高效的求极值方法。 
     下面经过一张图来展现:


    椭圆表明了二次函数的各个等高线,变量数为2,起始坐标是(2,-2)。图中的直线式迭代优化的路径,能够看到每一步都会向最优值前进一步,并且前进路线是平行于坐标轴的,由于每一步只优化一个变量。

2.8 SMO优化算法

      SMO(Sequential Minimal Optimization)算法由Microsoft Research的John C. Platt在1998年提出,并成为最快的二次规划优化算法,特别针对线性SVM和数据稀疏时性能更优。关于SMO最好的资料就是他本人写的《Sequential Minimal Optimization A Fast Algorithm for Training Support Vector Machines》了。

     首先回到咱们前面一直悬而未解的问题,对偶函数最后的优化问题:

   

   要解决的是在参数上求最大值W的问题,至于都是已知数。C由咱们预先设定,也是已知数。

   按照坐标上升的思路,咱们首先固定除之外的全部参数,而后在上求极值。若是直接使用此方法,则有问题,由于若是固定之外的全部参数,那么将再也不是变量(能够由其余值推出),由于问题中规定了:

    

    所以,咱们须要一次选取两个参数作优化,好比,此时能够由和其余参数表示出来。这样回带到W中,W就只是关于的函数了,可解。
    这样,SMO的主要步骤以下:

     1)选取一对,选取方法使用启发式方法(后面讲)。

     2)固定除以外的其余参数,肯定W极值条件下的表示。

    SMO之因此高效就是由于在固定其余参数后,对一个参数优化过程很高效。

2.8.1 SMO算法推导

     假设咱们选取了初始值知足了问题中的约束条件。接下来,咱们固定,这样W就是的函数。而且知足条件:

    

    因为都是已知固定值,为了方便,可将等式右边标记成实数值

    

    注:因为的值是+1或-1,因此只取其符号便可。

    1)把代入W(),可得:

    

    2)为方便推导,设置以下变量:

    

    3)则W()为:

    

     3)如今要对求极值,需对求导,则W()必须先变为只有变量的等式,把代入W()可得:

     

     4)对求偏导,可得:

     

   5)为便后面的递归运算,上面的等式必须变为只含的形式,且不能再含有变量,则的值为:

   

   6)上面的等式可变为:

   

   则为:

   

   6)结论

   

2.8.2 求的取值范围

     

     当异号时, 即一个为+1, 另外一个为-1,则此方程变为:

     

     即它是一条斜率为1的一条直线,以下图所示:


    横轴是,纵轴是既要在矩形方框内,也要在直线上,所以

      

   同理,同号时:

      

2.8.3的新值

    

2.8.4 求b的新值

     1)设在界内(注:界上就是等于0或C), 则有:

   

     2)为求得,需先把替换掉:

     

   3)代入1)中的等可得:

   

   4)b的新值

     (1)在界内 

              

     ( 2) 在界内

            

     ( 3) 都在界内

            则状况(1)和状况(2)值相等,任取一个便可。

      ( 4) 都不在界内

            则取值为状况(1)和状况(2之间的任意值

2.8.5 启发式选择方法(选择i和j)

       所谓的启发式选择方法主要思想是每次选择拉格朗日乘子的时候,优先选择样本前面系数作优化(论文中称为无界样例),由于在界上(为0或C)的样例对应的系数通常不会更改。

       这条启发式搜索方法是选择第一个拉格朗日乘子用的,好比前面的。那么这样选择的话,是否最后会收敛。可幸的是Osuna定理告诉咱们只要选择出来的两个中有一个违背了KKT条件,那么目标函数在一步迭代后值会减少。违背KKT条件不表明,在界上也有可能会违背。是的,所以在给定初始值=0后,先对全部样例进行循环,循环中碰到违背KKT条件的(无论界上仍是界内)都进行迭代更新。等这轮事后,若是没有收敛,第二轮就只针对的样例进行迭代更新。

       在第一个乘子选择后,第二个乘子也使用启发式方法选择,第二个乘子的迭代步长大体正比于,选择第二个乘子可以最大化。即当为正时选择负的绝对值最大的,反之,选择正值最大的

       最后的收敛条件是在界内()的样例都可以遵循KKT条件,且其对应的只在极小的范围内变更。

3. 寻找最大间隔(线性不可分)

     第2章已经把线性可分的状况讨论清楚了,本章讨论如何解决线性不可分的状况。直观的想法就是把线性不可分的状况转换成线性可分的状况,真的可行吗?


      若是数据线性不可分的时候,咱们就将低维的数据映射为高维的数据,以此使数据从新线性可分。这转化的关键即是核函数。

3.1 问题分析


       对于上图描述的问题,找不到一个超平面(二维空间:直线)将其分割开来,而很天然的想到能够用一个椭圆将数据分为两类,则有以下推导过程:

           

      即将2维空间映射到了5维空间。

      此时,总能找到一个超平面使数据获得很好的分类。映射以后的空间为:

     

    则对于样本:

   

   其内积结果为:

   

   咱们注意到:

   

   若令:

   

   则有:

   

   两者的区别在如下三方面:

   1)一个是将低维空间数据映射到高维空间中,而后再根据内积的公式进行计算; 
   2)另外一个则直接在原来的低维空间中进行计算,而不须要显式地写出映射后的结果
   3)当样本空间处于高维度时,第一种方法将引起维度灾难,第二种方法仍然可以从容计算


3.2 核函数

3.2.1 核函数定义    

    , X属于空间,非线性函数实现输入空间X到特征空间Y的映射,其中Y属于,m<<n。核函数技术接收2个低维空间的向量,可以计算出经某变换后高维空间的向量内积值。 

    定义核函数为:

        

   其中,K(x,z)为核函数,<,> 为向量的内积。

   例如:

   在加入核函数之后,分类函数变为:

   

3.2.2 核函数的优点

     核函数的优点:

     1)核函数的引入避免了“维数灾难”,大大减少了计算量。而输入空间的维数n对核函数矩阵无影响,所以,核函数方法能够有效处理高维输入。

     2)无需知道非线性变换函数的形式和参数

     3)核函数的形式和参数的变化会隐式地改变从输入空间到特征空间的映射,进而对特征空间的性质产生影响,最终改变各类核函数方法的性能。

     4)核函数方法能够和不一样的算法相结合,造成多种不一样的基于核函数技术的方法,且这两部分的设计能够单独进行,并能够为不一样的应用选择不一样的核函数和算法。

3.2.3 经常使用的核函数

      经常使用的核函数有:

     1)多项式核函数

          

     2)线性核函数

         

     3)高斯核函数

       

       若是x和z很相近(),那么核函数值为1,若是x和z相差很大(),那么核函数值约等于0。因为这个函数相似于高斯分布,所以称为高斯核函数,也叫作径向基函数(Radial Basis Function 简称RBF)。它可以把原始特征映射到无穷维。

      既然高斯核函数可以比较x和z的类似度,并映射到0到1,回想logistic回归,sigmoid函数能够,所以还有sigmoid核函数等等。

      下图说明在低维线性不可分时,映射到高维后就可分了,使用高斯核函数。

      

3.2.4 核函数的有效性

     问题:给定一个函数K,咱们可否使用K来替代计算,也就说,是否可以找出一个,使得对于全部的x和z,都有

     好比给出了,是否可以认为K是一个有效的核函数?

     给定m个训练样本,每个对应一个特征向量。那么,咱们能够将任意两个带入K中,计算获得。i能够从1到m,j能够从1到m,这样能够计算出m*m的核函数矩阵(Kernel Matrix)。为了方便,咱们将核函数矩阵和都使用K来表示。

     若是假设K是有效地核函数,那么根据核函数定义,则有:

     

    可见,矩阵K应该是个对称阵。让咱们得出一个更强的结论,首先使用符号来表示映射函数的第k维属性值。那么对于任意向量z,可得:

   

       最后一步和前面计算时相似。从这个公式咱们能够看出,若是K是个有效的核函数(即等价),那么,在训练集上获得的核函数矩阵K应该是半正定的(

       这样咱们获得一个核函数的充分必要条件:
       K是有效的核函数 <==> 核函数矩阵K是对称半正定的。

4. 总结

4.1 线性可分

      1)求解使得超平面具备最大内间间隔的w,b参数。
      2)将问题转化为对偶问题进行快速求解。
      3)改进:加入松弛变量和惩罚因子C的SVM
      4)松弛变量容许实际分类中必定的不许确性存在,引入松弛变量后原先的约束条件变为:

           

      5)惩罚因子C则是为了不系统轻易放弃一些重要的数据,减少系统损失。引入C后目标函数变为:
           

4.2 线性不可分

      1)将数据空间映射到高维空间,使本来线性不可分变为线性可分。
      2)引入核函数,简化映射空间中的内积运算。它避开了直接在高维空间中进行计算,而表现形式却等价于高维空间。
      3)不一样的样本结构与不一样的核函数结合,达到很好的分割效果

参考:http://www.cnblogs.com/jerrylead/archive/2011/03/18/1988419.html



</div>