SVM详细讲解

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

1. 目标

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

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

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

     数据分类类别:

     1)线性可分

     2)线性不可分

     下面首先分析线性可分的情况。

1.1 SVM特点

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

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

          由于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>
阅读更多
个人分类: AI 数据挖掘 分类
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

SVM详细讲解

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭