1. 目标

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

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

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

     数据分类类别:

     1)线性可分

     2)线性不可分

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

1.1 SVM特点

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

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

          由于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 求带松驰变量的超平面流程

非线性数据的支持向量机_机器学习_02


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

2.1 点到平面的距离

非线性数据的支持向量机_机器学习_03

2.2 点到超平面的距离

非线性数据的支持向量机_SVM_04

    在上图中,分隔超平面为:f(x) = wTx + 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||单调,为方便后面求极值时求偏导,则求 

非线性数据的支持向量机_机器学习_05

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

非线性数据的支持向量机_核函数_06

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

    我们把所有样本点中间隔最小的那一点的间隔定为1,也就意味着集合中的其他点间隔都不会小于1,于是有下列不等式总成立:

     wTxi + b≥+1, yi=+1

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

     

非线性数据的支持向量机_SVM_07

   

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

2.4 求解极小值

2.4.1 原问题描述   

    1)样本集合

   

非线性数据的支持向量机_约束条件_08

 

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

    2)优化目标

非线性数据的支持向量机_SVM_09

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

非线性数据的支持向量机_约束条件_10

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

2.4.2 生成拉格朗日函数

    现在要求解如下的最小值:

  

非线性数据的支持向量机_机器学习_11

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

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

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

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


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

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

  

非线性数据的支持向量机_机器学习_12

     然后令:

               

非线性数据的支持向量机_机器学习_13

     容易验证,当某个约束条件不满足时,例如

非线性数据的支持向量机_机器学习_14

,那么显然有θ(w)为无穷大(只要令

非线性数据的支持向量机_核函数_15

为无穷大即可);而当所有约束条件都满足时,则最优值为

非线性数据的支持向量机_核函数_16

,亦即最初要最小化的量。      因此,在要求约束条件得到满足的情况下最小化

非线性数据的支持向量机_SVM_17

,实际上等价于直接最小化

非线性数据的支持向量机_约束条件_18

(当然,这里也有约束条件,就是

非线性数据的支持向量机_约束条件_19

)   ,因为如果约束条件没有得到满足,

非线性数据的支持向量机_约束条件_18

会等于无穷大,自然不会是我们所要求的最小值。

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


非线性数据的支持向量机_核函数_21

     这里用

非线性数据的支持向量机_核函数_22

表示这个问题的最优值,且和最初的问题是等价的。如果直接求解,那么一上来便得面对w和b两个参数,而

非线性数据的支持向量机_约束条件_19

又是不等式约束,这个求解过程不好做。不妨把最小和最大的位置交换一下,变成:

非线性数据的支持向量机_核函数_24


      交换以后的新问题是原始问题的对偶问题,这个新问题的最优值用

非线性数据的支持向量机_非线性数据的支持向量机_25

来表示。而且有

非线性数据的支持向量机_非线性数据的支持向量机_25


非线性数据的支持向量机_核函数_22

,在满足KKT条件的情况下,这两者相等,这个时候就可以通过求解对偶问题来间接地求解原始问题。        换言之,之所以从minmax的原始问题

非线性数据的支持向量机_核函数_22

,转化为maxmin的对偶问题

非线性数据的支持向量机_非线性数据的支持向量机_25

,一者因为

非线性数据的支持向量机_非线性数据的支持向量机_25


非线性数据的支持向量机_核函数_22

的近似解,二者,转化为对偶问题后,更容易求解。      下面可以先求L 对w、b的极小,再求L 对

非线性数据的支持向量机_核函数_32

的极大。

2.4.4 什么是KKT条件?

     一般地,一个最优化数学模型能够表示成下列标准形式:

非线性数据的支持向量机_约束条件_33

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

    同时,得明白以下两点:

  • 凸优化的概念: 为一凸集,  为一凸函数。凸优化就是要找出一点  ,使得每一  满足  。
  • KKT条件的意义:它是一个非线性规划(Nonlinear Programming)问题能有最优化解法的必要和充分条件。

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


非线性数据的支持向量机_非线性数据的支持向量机_34

      经过论证,我们这里的问题是满足 KKT 条件的(首先已经满足Slater Condition,再者f和gi也都是可微的,即L对w和b都可导),因此现在我们便转化为求解第二个问题。

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

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

   2)然后求对

非线性数据的支持向量机_核函数_32

的极大;

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

2.5 求解对偶问题  

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

       对L(w, b, α)分别求w和b的极值。也就是L(w, b,α)对w和b的梯度(偏导)为0:∂L/∂w=0和∂L/∂b=0,还需要满足

非线性数据的支持向量机_约束条件_19

>=0。求解这里导数为0的式子可以得到:

非线性数据的支持向量机_机器学习_37

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

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

非线性数据的支持向量机_非线性数据的支持向量机_38

即:

   

非线性数据的支持向量机_核函数_39

   此拉格朗日函数中只含有未知量

非线性数据的支持向量机_核函数_15

,然后对其求极大值。

 2.5.2 求对

非线性数据的支持向量机_核函数_32

的极大

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

非线性数据的支持向量机_核函数_32

。从上面的式子得到:     

非线性数据的支持向量机_SVM_43

     根据以上公式求出

非线性数据的支持向量机_核函数_32

之后,则可求出w和b,如下所式:

非线性数据的支持向量机_SVM_45

(即可求出w(也是非线性数据的支持向量机_约束条件_46,原问题的解))

非线性数据的支持向量机_SVM_47


2.5.3 分类函数

非线性数据的支持向量机_核函数_48

    也就是说,以前新来的要分类的样本首先根据w和b做一次线性运算,然后看求的结果是大于0还是小于0,来判断正例还是负例。现在有了非线性数据的支持向量机_核函数_49,我们不需要求出w,只需将新来的样本和训练数据中的所有样本做内积和即可。那有人会说,与前面所有的样本都做运算是不是太耗时了?其实不然,我们从KKT条件中得到,只有支持向量的

非线性数据的支持向量机_机器学习_50

,其他情况

非线性数据的支持向量机_约束条件_51

。因此,我们只需求新来的样本和支持向量的内积,然后运算即可。这种写法为下面要提到的核函数(kernel)做了很好的铺垫。

2.6 松驰变量(Slack Variable)

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

  

非线性数据的支持向量机_SVM_52

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

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

      

非线性数据的支持向量机_非线性数据的支持向量机_53

      引入非负参数

非线性数据的支持向量机_约束条件_54

后(称为松弛变量),就允许某些样本点的函数间隔小于1,即在最大间隔区间里面,或者函数间隔是负数,即样本点在对方的区域中。而放松限制条件后,我们需要重新调整目标函数,以对离群点进行处罚,目标函数后面加上的

非线性数据的支持向量机_核函数_55

就表示离群点越多,目标函数值越大,而我们要求的是尽可能小的目标函数值。这里的C是离群点的权重,C越大表明离群点对目标函数影响越大,也就是越不希望看到离群点。我们看到,目标函数控制了离群点的数目和程度,使大部分样本点仍然遵守限制条件。


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

非线性数据的支持向量机_约束条件_56

      上式中的

非线性数据的支持向量机_核函数_15


非线性数据的支持向量机_约束条件_58

都是拉格朗日乘子,回想我们在拉格朗日对偶中提到的求法,先写出拉格朗日公式,然后将其看作是变量w、b和

非线性数据的支持向量机_机器学习_59

的函数,分别对其求偏导,其值为0,则可得:得到w和b的表达式。     

非线性数据的支持向量机_约束条件_60

      由于

非线性数据的支持向量机_核函数_15


非线性数据的支持向量机_约束条件_58

都大于0,且

非线性数据的支持向量机_机器学习_63

,所以

非线性数据的支持向量机_机器学习_64

。然后代入拉格朗日公式,其结果如下:     

非线性数据的支持向量机_核函数_65

     这就是我们最新的优化目标,参数只有

非线性数据的支持向量机_核函数_15

,我们只需要找到使W(

非线性数据的支持向量机_核函数_32

)最大的

非线性数据的支持向量机_核函数_15

即可。     此时,我们发现没有了参数

非线性数据的支持向量机_约束条件_54

,与之前模型唯一不同在于

非线性数据的支持向量机_核函数_15

又多了

非线性数据的支持向量机_机器学习_64

的限制条件。需要提醒的是b的求值公式也发生了改变,改变结果在SMO算法里面介绍。先看看KKT条件的变化:      

非线性数据的支持向量机_SVM_72

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

2.7 坐标上升法(Coordinate Ascent)

      在最后讨论W(

非线性数据的支持向量机_核函数_32

)的求解之前,我们先看看坐标上升法的基本原理。假设要求解下面的优化问题:

    

非线性数据的支持向量机_SVM_74

     这里W是

非线性数据的支持向量机_核函数_32

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

非线性数据的支持向量机_核函数_76

      最里面语句的意思是固定除

非线性数据的支持向量机_约束条件_77

之外的所有

非线性数据的支持向量机_机器学习_78

,这时W可看作只是关于

非线性数据的支持向量机_约束条件_77

的函数,那么直接对

非线性数据的支持向量机_约束条件_77

求导优化即可。这里我们进行最大化求导的顺序i是从1到m,可以通过更改优化顺序来使W能够更快地增加并收敛。如果W在内循环中能够很快地达到最优,那么坐标上升法会是一个很高效的求极值方法。 

     下面通过一张图来展示:

非线性数据的支持向量机_约束条件_81

    椭圆代表了二次函数的各个等高线,变量数为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》了。

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

   

非线性数据的支持向量机_核函数_65

   要解决的是在参数

非线性数据的支持向量机_机器学习_83

上求最大值W的问题,至于

非线性数据的支持向量机_SVM_84


非线性数据的支持向量机_机器学习_85

都是已知数。C由我们预先设定,也是已知数。   按照坐标上升的思路,我们首先固定除

非线性数据的支持向量机_非线性数据的支持向量机_86

以外的所有参数,然后在

非线性数据的支持向量机_非线性数据的支持向量机_86

上求极值。如果直接使用此方法,则有问题,因为如果固定

非线性数据的支持向量机_非线性数据的支持向量机_86

以外的所有参数,那么

非线性数据的支持向量机_非线性数据的支持向量机_86

将不再是变量(可以由其他值推出),因为问题中规定了:    

非线性数据的支持向量机_机器学习_90

    因此,我们需要一次选取两个参数做优化,比如

非线性数据的支持向量机_非线性数据的支持向量机_86


非线性数据的支持向量机_核函数_92

,此时

非线性数据的支持向量机_核函数_92

可以由

非线性数据的支持向量机_非线性数据的支持向量机_86

和其他参数表示出来。这样回带到W中,W就只是关于

非线性数据的支持向量机_非线性数据的支持向量机_86

的函数了,可解。

    这样,SMO的主要步骤如下:     1)选取一对

非线性数据的支持向量机_核函数_96


非线性数据的支持向量机_SVM_97

,选取方法使用启发式方法(后面讲)。     2)固定除

非线性数据的支持向量机_核函数_96


非线性数据的支持向量机_SVM_97

之外的其他参数,确定W极值条件下的

非线性数据的支持向量机_核函数_96


非线性数据的支持向量机_SVM_97


非线性数据的支持向量机_核函数_96

表示。

    SMO之所以高效就是因为在固定其他参数后,对一个参数优化过程很高效。

2.8.1 SMO算法推导

     假设我们选取了初始值

非线性数据的支持向量机_机器学习_83

满足了问题中的约束条件。接下来,我们固定

非线性数据的支持向量机_SVM_104

,这样W就是

非线性数据的支持向量机_非线性数据的支持向量机_86


非线性数据的支持向量机_核函数_92

的函数。并且

非线性数据的支持向量机_非线性数据的支持向量机_86


非线性数据的支持向量机_核函数_92

满足条件:    

非线性数据的支持向量机_约束条件_109

    由于

非线性数据的支持向量机_SVM_104

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

非线性数据的支持向量机_核函数_111

。    

非线性数据的支持向量机_约束条件_112

    注:由于

非线性数据的支持向量机_机器学习_113

的值是+1或-1,所以只取其符号即可。    1)把

非线性数据的支持向量机_机器学习_114

代入W(

非线性数据的支持向量机_核函数_32

),可得:    

非线性数据的支持向量机_约束条件_116

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

    

非线性数据的支持向量机_机器学习_117

    3)则W(

非线性数据的支持向量机_核函数_32

)为:    

非线性数据的支持向量机_SVM_119

     3)现在要对

非线性数据的支持向量机_核函数_92

求极值,需对

非线性数据的支持向量机_核函数_92

求导,则W(

非线性数据的支持向量机_核函数_32

)必须先变为只有变量

非线性数据的支持向量机_核函数_92

的等式,把

非线性数据的支持向量机_非线性数据的支持向量机_86

代入W(

非线性数据的支持向量机_核函数_32

)可得:     

非线性数据的支持向量机_非线性数据的支持向量机_126

     4)对

非线性数据的支持向量机_核函数_92

求偏导,可得:     

非线性数据的支持向量机_约束条件_128

   5)为便后面的递归运算,上面的等式必须变为只含

非线性数据的支持向量机_非线性数据的支持向量机_129

的形式,且不能再含有

非线性数据的支持向量机_非线性数据的支持向量机_86


非线性数据的支持向量机_非线性数据的支持向量机_131

变量,则

非线性数据的支持向量机_非线性数据的支持向量机_131

的值为:   

非线性数据的支持向量机_约束条件_133

   6)上面的等式可变为:

   

非线性数据的支持向量机_约束条件_134

   则

非线性数据的支持向量机_非线性数据的支持向量机_86

为:   

非线性数据的支持向量机_机器学习_136

   6)结论

   

非线性数据的支持向量机_SVM_137

2.8.2 求

非线性数据的支持向量机_非线性数据的支持向量机_86

非线性数据的支持向量机_核函数_92

的取值范围


     

非线性数据的支持向量机_机器学习_140


     当

非线性数据的支持向量机_约束条件_141


非线性数据的支持向量机_非线性数据的支持向量机_142

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

非线性数据的支持向量机_SVM_143

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

非线性数据的支持向量机_SVM_144

    横轴是

非线性数据的支持向量机_非线性数据的支持向量机_86

,纵轴是

非线性数据的支持向量机_核函数_92


非线性数据的支持向量机_非线性数据的支持向量机_86


非线性数据的支持向量机_核函数_92

既要在矩形方框内,也要在直线上,因此    

非线性数据的支持向量机_非线性数据的支持向量机_149

  

非线性数据的支持向量机_非线性数据的支持向量机_150

   同理,当

非线性数据的支持向量机_约束条件_141


非线性数据的支持向量机_非线性数据的支持向量机_142

同号时:    

非线性数据的支持向量机_非线性数据的支持向量机_153

  

非线性数据的支持向量机_非线性数据的支持向量机_154

2.8.3 求

非线性数据的支持向量机_非线性数据的支持向量机_86

非线性数据的支持向量机_核函数_92

的新值

    

非线性数据的支持向量机_非线性数据的支持向量机_157

2.8.4 求b的新值

     1)设

非线性数据的支持向量机_非线性数据的支持向量机_158

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

   

非线性数据的支持向量机_机器学习_159

     2)为求得

非线性数据的支持向量机_SVM_160

,需先把

非线性数据的支持向量机_核函数_161

替换掉:

     

非线性数据的支持向量机_核函数_162

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

   

非线性数据的支持向量机_SVM_163

   4)b的新值

     (1)

非线性数据的支持向量机_非线性数据的支持向量机_158

在界内 

              

非线性数据的支持向量机_SVM_165

     ( 2)

非线性数据的支持向量机_机器学习_166

 在界内            

非线性数据的支持向量机_非线性数据的支持向量机_167

     ( 3)

非线性数据的支持向量机_非线性数据的支持向量机_158


非线性数据的支持向量机_机器学习_166

 都在界内

            则情况(1)和情况(2)

非线性数据的支持向量机_核函数_170

值相等,任取一个即可。

       ( 4)

非线性数据的支持向量机_非线性数据的支持向量机_158


非线性数据的支持向量机_机器学习_166

 都不在界内

            则

非线性数据的支持向量机_约束条件_173

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

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

       所谓的启发式选择方法主要思想是每次选择拉格朗日乘子的时候,优先选择样本前面系数

非线性数据的支持向量机_约束条件_174


非线性数据的支持向量机_约束条件_175

做优化(论文中称为无界样例),因为在界上(

非线性数据的支持向量机_约束条件_175

为0或C)的样例对应的系数

非线性数据的支持向量机_约束条件_175

一般不会更改。       这条启发式搜索方法是选择第一个拉格朗日乘子用的,比如前面的

非线性数据的支持向量机_SVM_178

。那么这样选择的话,是否最后会收敛。可幸的是Osuna定理告诉我们只要选择出来的两个

非线性数据的支持向量机_约束条件_175

中有一个违背了KKT条件,那么目标函数在一步迭代后值会减小。违背KKT条件不代表

非线性数据的支持向量机_约束条件_174

,在界上也有可能会违背。是的,因此在给定初始值

非线性数据的支持向量机_约束条件_175

=0后,先对所有样例进行循环,循环中碰到违背KKT条件的(不管界上还是界内)都进行迭代更新。等这轮过后,如果没有收敛,第二轮就只针对

非线性数据的支持向量机_约束条件_174

的样例进行迭代更新。       在第一个乘子选择后,第二个乘子也使用启发式方法选择,第二个乘子的迭代步长大致正比于

非线性数据的支持向量机_SVM_183

,选择第二个乘子能够最大化

非线性数据的支持向量机_SVM_183

。即当

非线性数据的支持向量机_非线性数据的支持向量机_185

为正时选择负的绝对值最大的

非线性数据的支持向量机_非线性数据的支持向量机_186

,反之,选择正值最大的

非线性数据的支持向量机_非线性数据的支持向量机_186

。       最后的收敛条件是在界内(

非线性数据的支持向量机_约束条件_174

)的样例都能够遵循KKT条件,且其对应的

非线性数据的支持向量机_约束条件_175

只在极小的范围内变动。

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

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

非线性数据的支持向量机_非线性数据的支持向量机_190

      如果数据线性不可分的时候,我们就将低维的数据映射为高维的数据,以此使数据重新线性可分。这转化的关键便是核函数。

3.1 问题分析

非线性数据的支持向量机_约束条件_191

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

     

非线性数据的支持向量机_核函数_192

     

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

      此时,总能找到一个超平面

非线性数据的支持向量机_非线性数据的支持向量机_193

使数据得到很好的分类。映射之后的空间为:     

非线性数据的支持向量机_核函数_194

    则对于样本:

   

非线性数据的支持向量机_SVM_195

   其内积结果为:

   

非线性数据的支持向量机_非线性数据的支持向量机_196

   我们注意到:

   

非线性数据的支持向量机_机器学习_197

   若令:

   

非线性数据的支持向量机_非线性数据的支持向量机_198

   则有:

   

非线性数据的支持向量机_约束条件_199

   二者的区别在以下三方面:

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


3.2 核函数

3.2.1 核函数定义    

    

非线性数据的支持向量机_机器学习_200

, X属于

非线性数据的支持向量机_非线性数据的支持向量机_201

空间,非线性函数

非线性数据的支持向量机_机器学习_202

实现输入空间X到特征空间Y的映射,其中Y属于

非线性数据的支持向量机_核函数_203

,m<<n。核函数技术接收2个低维空间的向量,能够计算出经某变换后高维空间的向量内积值。 

    定义核函数为:

   

非线性数据的支持向量机_非线性数据的支持向量机_204

     

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

   例如:

非线性数据的支持向量机_约束条件_205

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

   

非线性数据的支持向量机_约束条件_206

3.2.2 核函数的优势

     核函数的优势:

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

     2)无需知道非线性变换函数

非线性数据的支持向量机_机器学习_202

的形式和参数

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

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

3.2.3 常用的核函数

      常用的核函数有:

     1)多项式核函数

          

非线性数据的支持向量机_约束条件_208

     2)线性核函数

         

非线性数据的支持向量机_核函数_209

     3)高斯核函数

       

非线性数据的支持向量机_核函数_210

       如果x和z很相近(

非线性数据的支持向量机_非线性数据的支持向量机_211

),那么核函数值为1,如果x和z相差很大(

非线性数据的支持向量机_非线性数据的支持向量机_212

),那么核函数值约等于0。由于这个函数类似于高斯分布,因此称为高斯核函数,也叫做径向基函数(Radial Basis Function 简称RBF)。它能够把原始特征映射到无穷维。

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

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

      

非线性数据的支持向量机_SVM_213

3.2.4 核函数的有效性

     问题:给定一个函数K,我们能否使用K来替代计算

非线性数据的支持向量机_SVM_214

,也就说,是否能够找出一个

非线性数据的支持向量机_约束条件_215

,使得对于所有的x和z,都有

非线性数据的支持向量机_非线性数据的支持向量机_216

。     比如给出了

非线性数据的支持向量机_非线性数据的支持向量机_217

,是否能够认为K是一个有效的核函数?     给定m个训练样本

非线性数据的支持向量机_SVM_218

,每一个

非线性数据的支持向量机_核函数_219

对应一个特征向量。那么,我们可以将任意两个

非线性数据的支持向量机_核函数_220


非线性数据的支持向量机_核函数_221

带入K中,计算得到。i可以从1到m,j可以从1到m,这样可以计算出m*m的核函数矩阵(Kernel Matrix)。为了方便,我们将核函数矩阵和

非线性数据的支持向量机_非线性数据的支持向量机_222

都使用K来表示。

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

     

非线性数据的支持向量机_机器学习_223

    可见,矩阵K应该是个对称阵。让我们得出一个更强的结论,首先使用符号

非线性数据的支持向量机_约束条件_224

来表示映射函数

非线性数据的支持向量机_核函数_225

的第k维属性值。那么对于任意向量z,可得:   

非线性数据的支持向量机_非线性数据的支持向量机_226

       最后一步和前面计算

非线性数据的支持向量机_机器学习_227

时类似。从这个公式我们可以看出,如果K是个有效的核函数(即

非线性数据的支持向量机_SVM_228


非线性数据的支持向量机_非线性数据的支持向量机_229

等价),那么,在训练集上得到的核函数矩阵K应该是半正定的(

非线性数据的支持向量机_约束条件_230


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

4. 总结

4.1 线性可分

      1)求解使得超平面具有最大内间间隔的w,b参数。

      2)将问题转化为对偶问题进行快速求解。

      3)改进:加入松弛变量

非线性数据的支持向量机_机器学习_231

和惩罚因子C的SVM

      4)松弛变量允许实际分类中一定的不准确性存在,引入松弛变量后原先的约束条件变为:           

非线性数据的支持向量机_SVM_232



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

           

非线性数据的支持向量机_机器学习_233

4.2 线性不可分

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

参考:




<li class="tool-item tool-active is-like "><a href="javascript:;"><svg class="icon" aria-hidden="true">
                        <use xlink:href="#csdnc-thumbsup"></use>
                    </svg><span class="name">点赞</span>
                    <span class="count">10</span>
                    </a></li>
                    <li class="tool-item tool-active is-collection "><a href="javascript:;" data-report-click="{"mod":"popu_824"}"><svg class="icon" aria-hidden="true">
                        <use xlink:href="#icon-csdnc-Collection-G"></use>
                    </svg><span class="name">收藏</span></a></li>
                    <li class="tool-item tool-active is-share"><a href="javascript:;" data-report-click="{"mod":"1582594662_002"}"><svg class="icon" aria-hidden="true">
                        <use xlink:href="#icon-csdnc-fenxiang"></use>
                    </svg>分享</a></li>
                    <!--打赏开始-->
                                            <!--打赏结束-->
                                            <li class="tool-item tool-more">
                        <a>
                        <svg t="1575545411852" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5717" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M179.176 499.222m-113.245 0a113.245 113.245 0 1 0 226.49 0 113.245 113.245 0 1 0-226.49 0Z" p-id="5718"></path><path d="M509.684 499.222m-113.245 0a113.245 113.245 0 1 0 226.49 0 113.245 113.245 0 1 0-226.49 0Z" p-id="5719"></path><path d="M846.175 499.222m-113.245 0a113.245 113.245 0 1 0 226.49 0 113.245 113.245 0 1 0-226.49 0Z" p-id="5720"></path></svg>
                        </a>
                        <ul class="more-box">
                            <li class="item"><a class="article-report">文章举报</a></li>
                        </ul>
                    </li>
                                        </ul>
            </div>
                        </div>
        <div class="person-messagebox">
            <div class="left-message"><a href="">
                <img src="" class="avatar_pic" username="MyArrow">
                                        <img src="" class="user-years">
                                </a></div>
            <div class="middle-message">
                                    <div class="title"><span class="tit"><a href="" data-report-click="{"mod":"popu_379"}" target="_blank">Arrow</a></span>
                                        </div>
                <div class="text"><span>发布了350 篇原创文章</span> · <span>获赞 1100</span> · <span>访问量 503万+</span></div>
            </div>
                            <div class="right-message">
                                        <a href="" target="_blank" class="btn btn-sm btn-red-hollow bt-button personal-messageboard">他的留言板
                    </a>
                                                        <a class="btn btn-sm  bt-button personal-watch" data-report-click="{"mod":"popu_379"}">关注</a>
                                </div>
                        </div>
                </div>