机器学习第6章SVM

总结一下SVM的原理,主要参考了几位大牛的博客知乎,以及李航的《统计学习导论》

SVM是一种二分类模型,它的基本模型是定义在特征空间上的间隔最大的线性分类器。主要分为线性可分SVM,线性SVM,非线性SVM。

SVM主要目的是找到具有最大间隔的分隔超平面

一、线性可分SVM

  

如上图a所示是分为红、蓝两类的已有数据,图1(b)和(c)分别给出了A、B两种不同的分类方案,其中黑色实线为分界线,术语称为“超平面”。SVM算法认为图1中的分类器A在性能上优于分类器B,其依据是A的分类间隔比B要大。图中两条虚线之间的垂直距离就是这个最优超平面对应的分类间隔。显然每一个可能把数据集正确分开的方向都有一个最优超平面(有些方向无论如何移动超平面的位置也不可能将两类样本完全分开),而不同方向的最优超平面的分类间隔通常是不同的,那个具有“最大间隔”的超平面就是SVM要寻找的最优解。而这个真正的最优解对应的两侧虚线所穿过的样本点,就是SVM中的支持样本点,称为“支持向量”。

1. 线性SVM的数学建模

一个最优化问题通常有两个最基本的因素:1)目标函数,也就是你希望什么东西的什么指标达到最好;2)优化对象,你期望通过改变哪些因素来使你的目标函数达到最优。在线性SVM算法中,目标函数显然就是那个“分类间隔”,而优化对象则是超平面。所以要对SVM问题进行数学建模,首先要对上述两个对象(“分类间隔”和“超平面”)进行数学描述。按照一般的思维习惯,我们先描述超平面。

(1)超平面方程

  二维空间中的直线方程:

      y=ax+b 

  如果让x轴变为x1,y轴变为x2,移项后得:

      ax_1+(-1)x_2+b=0

  写成向量形式为:

      [a,-1]\left[ \begin{array}{c}x_1\\x_2\end{array} \right] +b=0

  写成更一般的向量形式为:

      \boldsymbol{\omega}^T\boldsymbol{x}+\gamma=0

  其中\boldsymbol{\omega}=[\omega_1,\omega_2]^T\boldsymbol{x}=[x_1,x_2]^T。W为法向量,决定了超平面的方程,标量γ为截距,它控制了超平面的位置。

  推广到n维空间,超平面方程为:

      \boldsymbol{\omega}^T\boldsymbol{x}+\gamma=0

      

 

(2)分类间隔计算

  如下图所示,分类间隔为W,两倍的支持向量到超平面的距离d。

  图2

          图2

  由点到直线距离可知:

  其中,是支持向量的坐标,求W的最大化,相当于求d的最大化

(3)约束条件

  需要解决的还有以下几个问题:

    1).怎样判断超平面是否将所有的样本点都正确分类?

    2).即使找到了超平面的方向,还要注意超平面的位置应该在间隔区域的中轴线上,所以用来确定超平面位置的截距\gamma 也不能自由的优化,而是受到超平面方向和样本点分布的约束

    3).要求d的最大值,首先需要找到支持向量上的点,怎样在众多样本中找到支持向量?

  SVM算法通过一些巧妙的小技巧,将这三条约束条件融合在了一个不等式里面。

   给图2中的红蓝两类球设置标签y,则:

      

  如果我们的超平面方程能够完全正确地对上图的样本点进行分类,就会满足下面的方程:

      

  如果我们要求再高一点,假设决策面正好处于间隔区域的中轴线上,并且相应的支持向量对应的样本点到决策面的距离为d,那么上面的公式就可以进一步写成:

      

  对这个公式的解释为任何一个样本点到超平面的距离都大于等于d。

  公式左右两边同时除以d:

      

   其中,

  我们可以发现直线\boldsymbol{\omega}^T\boldsymbol{x}+\gamma=0和直线其实是一条直线。因此我们将wd和\gamma d分别表示为w和\gamma ,最后将上述方程表示成如下形式,方便计算:

      

(4)线性SVM优化问题基本描述

  我们的目标函数为:

      

  优化的目标是d的最大化,我们已经说过,我们是用支持向量上的样本点求解d的最大化的问题的。那么支持向量上的样本点有什么特点呢?

      

  因此  

      

  求d的最大化,相当于求\frac{1}{2}||\boldsymbol{\omega}||^2的最小化,加上系数1/2以及平方是为了方便后面的计算。

  好了,到这里我们可以给出线性SVM最优化问题的数学描述了:

      \begin{array}{l} \min_{\boldsymbol{\omega},\gamma}\frac{1}{2}||\boldsymbol{\omega}||^2\\ ~\\ \textrm{s. t.}~ ~y_i(\boldsymbol{\omega}^T\boldsymbol{x}_i+\gamma)\geq 1,~~i = 1,2,...,m \end{array}  

  

 (5)拉格朗日函数

  它将约束条件放到目标函数中,从而将有约束优化问题转换为无约束优化问题。

  随后,人们又发现,使用拉格朗日获得的函数,使用求导的方法求解依然困难。进而,需要对问题再进行一次转换,即使用一个数学技巧:拉格朗日对偶。

所以,显而易见的是,我们在拉格朗日优化我们的问题这个道路上,需要进行下面二个步骤:

  • 将有约束的原始目标函数转换为无约束的新构造的拉格朗日目标函数
  • 使用拉格朗日对偶性,将不易求解的优化问题转化为易求解的优化

下面,进行第一步:将有约束的原始目标函数转换为无约束的新构造的拉格朗日目标函数

  公式变形如下:

      

  其中αi是拉格朗日乘子,αi大于等于0,是我们构造新目标函数时引入的系数变量(我们自己设置)

接下来我们构造一个基于广义拉格朗日函数的新目标函数,记为:

     

当样本不满足约束条件时:,我们将αi设置为正无穷,此时θ(w)显然也是正无穷。

当样本点满足约束条件时,即在可行解区域内:机器学习实战教程(八):支持向量机原理篇之手撕线性SVM,此时θ(w)为原目标本身。我们将上述两种情况结合一下,就得到了新的目标函数:

      机器学习实战教程(八):支持向量机原理篇之手撕线性SVM

现在,我们的问题变成了求新目标函数的最小值,即:

    机器学习实战教程(八):支持向量机原理篇之手撕线性SVM

这里用p*表示这个问题的最优值,且和最初的问题是等价的。

接下来,我们进行第二步:将不易求解的优化问题转化为易求解的优化(对偶问题)

     

d*为对偶问题的值。

交换以后的新问题是原始问题的对偶问题,这个新问题的最优值用d*来表示。而且d*<=p*。我们关心的是d=p的时候,这才是我们要的解。需要什么条件才能让d=p呢?

  • 首先必须满足这个优化问题是凸优化问题。
  • 其次,需要满足KKT条件。

凸优化问题的定义是:求取最小值的目标函数为凸函数的一类优化问题。目标函数是凸函数我们已经知道,这个优化问题又是求最小值。所以我们的最优化问题就是凸优化问题。

这里探讨是否满足KKT条件,即要求:

  1. L(a, b, x)对x求导为零;

  2. a*g(x) = 0;

  3. ai>=0

  4. h(x) =0;

   即 ,经验证满足条件

 

(6)对偶问题的求解

  根据前面的推导已知:

    

  1)求

  拉格朗日函数L(w,b,a)分别对w,b求偏导并令其等于0

    

  将w代入原式得到:

      

  即

      

  2)求外侧的最大值

      

  转化成求极小:

      

  现在问题转化成了求a使对偶问题达到最大值。

  解出a后,求出w和b之后,即可得到超平面:

        

  以及分类决策函数:

        

二、线性支持向量机

  第一部分中的线性可分支持向量机只适用于线性可分数据,但不支持线性不可分数据,线性不可分意味着某些样本点不能满足几何间隔大于等于d的约束,因此对每个样本都引入一个松弛变量。对线性支持向量机的原始问题转化成对偶问题之后,目标函数没有改变,约束条件有些变化:

      

      

  解出a后,求出w和b之后,即可得到超平面:

        

  以及分类决策函数:

        

三、SMO算法

  1996年,John Platt发布了一个称为SMO的强大算法,用于训练SVM。SM表示序列最小化(Sequential Minimal Optimizaion)。Platt的SMO算法是将大优化问题分解为多个小优化问题来求解的。这些小优化问题往往很容易求解,并且对它们进行顺序求解的结果与将它们作为整体来求解的结果完全一致的。在结果完全相同的同时,SMO算法的求解时间短很多

  SMO算法的目标是求出一系列alpha和b,一旦求出了这些alpha,就很容易计算出权重向量w并得到分隔超平面。

  SMO算法的工作原理是:每次循环中选择两个alpha进行优化处理。一旦找到了一对合适的alpha,那么就增大其中一个同时减小另一个。这里所谓的"合适"就是指两个alpha必须符合以下两个条件,条件之一就是两个alpha必须要在间隔边界之外,而且第二个条件则是这两个alpha还没有进行过区间化处理或者不在边界上。

 

让我们梳理下SMO算法的步骤:

  • 步骤1:计算误差:

    机器学习实战教程(八):支持向量机原理篇之手撕线性SVM

  • 步骤2:计算上下界L和H:

    机器学习实战教程(八):支持向量机原理篇之手撕线性SVM

  • 步骤3:计算η:

    机器学习实战教程(八):支持向量机原理篇之手撕线性SVM

  • 步骤4:更新αj:

    

 

  • 步骤5:根据取值范围修剪αj:

    机器学习实战教程(八):支持向量机原理篇之手撕线性SVM

  • 步骤6:更新αi:

    机器学习实战教程(八):支持向量机原理篇之手撕线性SVM

  • 步骤7:更新b1和b2:

    机器学习实战教程(八):支持向量机原理篇之手撕线性SVM

  • 步骤8:根据b1和b2更新b:

   机器学习实战教程(八):支持向量机原理篇之手撕线性SVM

 

参考博客:

http://cuijiahua.com/blog/2017/11/ml_8_svm_1.html

https://zhuanlan.zhihu.com/p/24638007

   

posted @ 2018-08-12 11:43  weiququ  阅读(343)  评论(0编辑  收藏  举报