引入

  给定训练集样本 D=(x1,y1),(x2,y2),...,(xm,ym),yi{1,+1},支持向量机的核心思想就是基于训练集D在样本空间中找到一个划分超平面,将不同类别的样本分开。但是能将训练样本分开的划分超平面可能有很多,例如下图:
【机器学习】支持向量机原理(一)线性支持向量机


函数间隔与几何间隔

  为了找出泛化能力最好的分隔超平面,我们需要了解一下函数间隔和几何间隔的概念。
  我们首先将分隔超平定义为 wTx+b=0
  在超平面 wTx+b=0确定的情况下, |wTx+b|可以相对地表示点距离超平面的远近。对于二分类问题,如果 wTx+b>0,则 x的类别被判定为1;否则判定为-1。如下图:
  【机器学习】支持向量机原理(一)线性支持向量机
  
  所以如果 y(wTx+b)>0,则认为 x的分类结果是正确的,否则是错误的。且 y(wTx+b)的值越大,分类结果的确信度越大。反之亦然。
  所以样本点 (xi,yi)与超平面 (w,b)之间的函数间隔定义为:

  γi=yi(wTx+b)

  但是该定义存在问题:即和同时缩小或放大M倍后,超平面并没有变化,但是函数间隔却变化了。所以,需要将 w的大小固定,如 ||w||=1,使得函数间隔固定。这时的间隔也就是几何间隔 。
  几何间隔的定义如下
  γi=yi(wTx+b)||w||=γi||w||

  实际上,几何间隔就是点到超平面的距离。想像下中学学习的点 (xi,yi)到直线 ax+by+c=0的距离公式
d(xi,yi)=|axi+byi+c|a2+b2

  所以在二维空间中,几何间隔就是点到直线的距离。在三维及以上空间中,就是点到超平面的距离。而函数距离,就是上述距离公式中的分子,即未归一化的距离。


SVM的核心思想

   在感知机模型中,我们可以找到多个可以分类的超平面将数据分开,并且优化时希望所有的点都离超平面远。但是实际上离超平面很远的点已经被正确分类,我们让它离超平面更远并没有意义。反而我们最关心是那些离超平面很近的点,这些点很容易被误分类。如果我们可以让离超平面比较近的点(这些点称为支持向量)尽可能的远离超平面,那么我们的分类效果会好有一些。SVM的思想起源正起于此。
   根据数学上的转换(具体查看博文 通俗直观地解释为什么svm支持向量机可以假设离判决面最近的点在wx+b=±1上),我们总能找到一个分隔超平面 wTx+b=0,使得离它最近的点和分割超平面 wTx+b=0的函数距离为1,即这些点在超平面 wTx+b=+1或超平面 wTx+b=1上。而这些在超平面 wTx+b=+1或超平面 wTx+b=1上的点我们称为支持向量,如下图圈出来的点。
   【机器学习】支持向量机原理(一)线性支持向量机
   支持向量到超平面的距离为 1||w||,不同类的支持向量之间的距离为 2||w||。为了找出泛化能力好的分割超平面,SVM的目标就是要找出一个分割超平面,使得 2||w||最大。因此SVM的目标函数为:

(1)  maxγ=2||w||s.t.yi(wTx+b)1(i=1,2,...m)
 


SVM目标函数的优化

   上面的式子(1)可以等价于:

(2)  min12||w||2s.t.yi(wTx+b)1(i=1,2,...m)
 
   由于目标函数 12||w||2是凸函数,同时约束条件不等式是仿射的,根据凸优化理论,我们可以通过拉格朗日函数将我们的优化目标转化为无约束的优化函数,拉格朗日函数如下:
(3) L(w,b,α)=12||w||2i=1mαi[yi(wTxi+b)1]αi0

   由于引入了朗格朗日乘子,我们的优化目标变成:
(4) minw,bmaxαi0L(w,b,α) 

   根据拉格朗日对偶这篇博文,式子(4)等价于求解下面式子:
(5) maxαi0minw,bL(w,b,α) 
  
   式子(5)表示我们可以先求优化函数对于w和bw和b的极小值。接着再求拉格朗日乘子 α 的极大值。
   首先我们来求 w b和b的极小值,即 minw,bL(w,b,α)。这个极值我们可以通过对w和b分别求偏导数得到:
Lw=0w=i=1mαiyixi Lb=0i=1mαiyi=0 

   好了,既然我们已经求出 w α的关系,就可以带入优化函数 L(w,b,α)消去 w了。我们定义:
φ(α)=minw,bL(w,b,α)

   现在我们来看将 w替换为 α的表达式以后的优化函数 φ(α)的表达式:
(1)φ(α)=12||w||2i=1mαi[yi(wTxi+b)1](2)=12wTwi=1mαiyiwTxii=1mαiyib+i=1mαi(3)=12wTi=1mαiyixii=1mαiyiwTxii=1mαiyib+i=1mαi(4)=12wTi=1mαiyixiwTi=1mαiyixii=1mαiyib+i=1mαi(5)=12wTi=1mαiyixii=1mαiyib+i=1mαi(6)=12wTi=1mαiyixibi=1mαiyi+i=1mαi(7)=12(i=1mαiyixi)T(i=1mαiyixi)bi=1mαiyi+i=1mαi(8)=12i=1mαiyixiTi=1mαiyixibi=1mαiyi+i=1mαi(9)=12i=1mαiyixiTi=1mαiyixi+i=1mαi(10)=12i=1,j=1mαiyixiTαjyjxj+i=1mαi

   从上面可以看出,通过对 w,b极小化以后,我们的优化函数 φ(α)仅仅只有 α向量做参数。只要我们能够极大化 φ(α),就可以求出此时对应的 α,进而求出 w,b.
   对 φ(α)求极大化的数学表达式如下:
(1)maxα12i=1mj=1mαiαjyiyj(xixj)+i=1mαis.t.i=1mαiyi=0αi0i=1,2,...m

   可以去掉负号,即为等价的极小化问题如下:
(2)minα12i=1mj=1mαiαjyiyj(xixj)i=1mαis.t.i=1mαiyi=0αi0i=1,2,...m

   只要我们可以求出上式极小化时对应的 α向量就可以求出 w b了。具体怎么极小化上式得到对应的 α,一般需要用到 SMO 算法,这个算法比较复杂,我们后面会专门来讲。在这里,我们假设通过SMO算法,我们得到了对应的 α 的值 α
   那么我们根据 w=i=1maiyixi,可以求出对应的 w 的值:
(3)w=i=1maiyixi

   求 b 则稍微麻烦一点。注意到,对于任意支持向量 (xs,ys),都有
(4)ys(wTxs+b)=ys(i=1maiyixiTxs+b)=1

   假设我们有 S 个支持向量,则对应我们求出 S b ,理论上这些 b都可以作为最终的结果, 但是我们一般采用一种更健壮的办法,即求出所有支持向量所对应的 bs,然后将其平均值作为最后的结果。
   怎么得到支持向量呢?根据KKT条件中的对偶互补条件 ai(yi(wTxi+b)1)=0,我知道如果 αi>0,则有 yi(wTxi+b)=1,即该点 (xi,yi)就是支持向量。如果 αi=0,则有 yi(wTxi+b)1,即该点 (xi,yi)不是支持向量。
  


线性可分SVM的算法过程

   这里我们对线性可分SVM的算法过程做一个总结。
   输入是线性可分的m个样本 (x1,y1),(x2,y2),...,(xm,ym),其中 x为n为特征向量。 y为二元输出,值为1或者值为-1.
   输出是分割超平面的参数 w b、分类决策函数。
   算法过程如下:
   1) 构造约束优化问题

(5)minα12i=1mj=1mαiαjyiyj(xixj)i=1mαis.t.i=1mαiyi=0αi0i=1,2,...m

   2) 用SMO算法求出上式最小时对应的 α向量的值  α向量.
   3) 计算 w=i=1mαiyixi
   4) 找出所有的 S个支持向量,即满足  αs>0对应的样本 (xs,ys),通过 ys(i=1mαiyixiTxs+b)=1,计算出每个支持向量 (xs,ys)对应的 bs,计算出这些 bs=ysi=1mαiyixiTxs. 所有的 bs对应的平均值即为最终的 b=1Si=1Sbs.
   这样最终的分割超平面为: wx+b=0,最终的分类决策函数为: f(x)=sign(wx+b)
  


线性可分SVM的缺点

   线性可分SVM的学习方法对于非线性的数据集是没有办法使用的, 有时候不能线性可分的原因是线性数据集里面多了少量的异常点,由于这些异常点导致了数据集不能线性可分, 那么怎么可以处理这些异常点使数据集依然可以用线性可分的思想呢? 我们在下一节的线性SVM的软间隔最大化里继续讲。


帮助理解的相关链接 

1.通俗直观地解释为什么svm支持向量机可以假设离判决面最近的点在wx+b=±1上
2.拉格朗日对偶
3.支持向量机中的函数距离和几何距离怎么理解?
4.支持向量机原理(一) 线性支持向量机

相关文章: