西瓜书学习(三)—SVM(上)

注:本篇参考了大牛pluskid的博客。有兴趣的童鞋可以去观摩一下,深入浅出。回复后台“pluskid”,得到地址。
1)基本概念
(1)间隔(margin)和支持向量(SV)

如图这些点散落在不同的地方,我们的目的是将不同类别的东西分开。那么用什么分类呢?我们可以用好多个超平面(hyper plane)将这些不同的点分开。但是哪个超平面是最合适的呢?从感觉上来看,我们似乎应该将红线作为我们的划分平面。因为它看起来“容忍度”更高,换句话这个超平面的鲁棒性最强。当对一个未知点来分类时,这条线可以相对来说不会对结果有“偏爱”。那么这个超平面怎么描述呢?如下:

这里的w是超平面的法向量,决定方向,b是位移,决定了超平面到原点的距离。这个就类似于一元一次函数的k和b。有了超平面方程,我们就可以求出任一一点到超平面的距离。那么什么是支持向量呢?如图:


假设,有两条直线WTx+b=1和WTx+b=-1分别穿过两类距离超平面最近的点。那么,这两条线间的距离我们将其称之为margin。这些被穿过的点,我们叫做支持向量,为什么起这个名字呢?这些点像柱子一样将这两条线支撑起来,形成了margin。而且, 这些点的坐标形式与该点到原点的向量形式一致。所以将其称之为,支持向量。好了,到这里你可能要提问了。我们如何找出这个超平面呢?这就是本章的核心内容!
我们的 终极目的:找出一个能划分类别的超平面,使间隔(margin)最大!这句话用数学公式来表达就是如下:

将其换种形式:

注意:这里我们将 margin定为1
以下分三种情况来说:
2)简单线性可分
 这种情况就是本文开头给出的那种形式,我们可以用一条直线将其完全分开,不会有干扰点。这种情况是最简单的情况,我们就从这种情况先下手。我们回头看一下式子6.6,其实这是一个标准凸(二次)优化问题。我们可以采用常见的QP(quadratic programing)优化包来求解。但是,我们有一种更加高效的方法来求,就是lagrange multiplier方法。将式6.6转化成对偶(dual problem)问题。类似于高等数学中,lagrange法求极值, 将约束条件融入到目标函数中。如下:

再将L()分别对w,b求偏导数,得到如下:

再令偏导数为0,得到如下:

将式6.9和式6.10带入6.8消去w,b得:


即:

这里的αi是拉格朗日乘子。到了这里,你可能迷糊了。再回想一下我们要干什么?没错,要找出超平面函数。此时,我们已经有了6.9,6.10和6.11三个关系式,其中我们的6.9似乎看起来是能用的。我们把它带入超平面函数,得到如下:


看起来,我们只需要再知道拉格朗日乘子α和偏移量b就能写出超平面方程了。那么问题来了,我们怎么求这两个参数呢?其中有一种SMO(Sequential Minimal Optimization)算法可以用来求α的。这里我们先不讲这个算法,我们回到式子6.11。我们知道6.11式子是一个最优化问题。这又是一个知识点,后面会讲到。于是得到以下三个约束条件下的KKT条件:


当这三个条件要同时满足时,会出现一种很有趣的现象。由于第三个条件,αi和(yif(xi)-1)必定有一个为0,假设现在有一个样本要分类,如果它是支持向量的话,也就是说yif(xi)-1=0时,式6.8的右边为0。当该样本是非支持向量时,即α=0时,这意味着该样本不会在式6.12中出现。这也就是支持向量机的好处, 只关注支持向量。       
总结:
好,再回忆一下我们之前的目标:找到超平面函数。我们根据拉格朗日乘子法(6.8)和偏导数关系式(6.9)(6.10)找到了超平面函数(6.6)的对偶问题(6.11)。很明显,这是一个最优化问题。这里涉及到最优化理论问题,用到了KKT条件,这里我们得到了为什么支持向量机只专注于支持向量。我们将找超平面函数问题最后转化成了求拉格朗日乘子a和位移偏b的问题。这里可以用SMO方法来求a,用均值法求偏差b。
3)非线性可分(核方法)
之前我们讨论的是线性可分的情况,如果我们碰到以下情况呢?

我们可以看到,很难找到一条直线来直接划分这两类。但是,我们可以将它“升维”,从二维转到三维:


我们可以看到一个很有趣的现象,我们可以在空间中找一个平面(hyper plane)将这四个点分开。再将其投影到二维中去,我们就得到一条曲线将这两类分开了。到这里,我们就找到了非线性数据的划分方法,这也是 kernel方法的基本思想。我们通过映射Φ(x)将二维映射到三维中。其超平面可以如下表示:

类似于上个小节的流程,我们将最终将其转化为对偶问题:

这里,我们可以看到这个式子和我们之前的式(6.11)唯一区别就是式子的最后。看起来,我们只要计算出Φ(x)的转置和Φ (x)的内积就可以了。但是遗憾的是, 由于特征空间的维数可能很高,直接计算内积是很困难的。于是,我们需要找到一个函数,让他与内积相等。在我们开始进行升维映射的时候,就让这个函数和升维映射函数的内积相等。最后,我们只要求这个函数就可以了。我们把这个函数叫做“核函数”。如下:

然后我们用核函数代替式(6.21)中的内积。如下:

同样,我们得到如下,超平面函数:


好了,我们现在的问题归结于找一个合适的核函数。好了,我们再回忆我们的目标是什么:找出超平面函数。请原谅我的啰嗦,因为,这些公式推着推着就不知道自己在干什么了。。。我是谁?我在干什么?。。
为了求超平面函数,我们现在积攒了三个问题了:
如何用SMO算法求lagrange乘子和用均值求偏位移b。
什么是最优化问题,KKT条件是怎么来的?
核函数怎么找?
先解决本节的问题。核函数怎么找?
先给出方法: 只要一个对称函数所对应的核矩阵是半正定的,就能作为核函数。完毕!好了,我们只要找到一个这样的对称函数,就可以了。看起来核函数的选择有很大的空间,但是,什么样的核函数是最合适的核函数呢?很明显,不合适的核函数会对我们的分类产生不良的影响。遗憾的是,西瓜书中没有给出解释。只是给了几种常用的核函数形式和几个核函数性质:

线性组合:


直积:


函数变换:


根据先验知识,比如图像分类,通常使用RBF,文字不使用RBF尝试不同的kernel,根据结果准确度而定

今天,就到这里。我们,还有两个遗留问题,我打算下篇解决,不然心里不爽!对了祝大家节日快乐!

希望有志同道合的小伙伴关注我的公众平台,欢迎您的批评指正,共同交流进步。


猜你喜欢

转载自blog.csdn.net/quinn1994/article/details/80159497
今日推荐