机器学习总结(三)SVM

支持向量机(Support Vector machines) 简称SVM是机器学习里面很经典的一个算法,懂了支持向量机你就可以做很多项目了。

先通俗的讲述一下原理,不会提什么"函数间隔”,“几何间隔“”。从最简单的线性二分类问题入手。我们要找到一条直线,能把所有样本分为两类。这样的直线有很多,我们需要选取一条最优的,我们认为分类直线离样本最远就是最优的。因为离的越远,就越不容易误分类,为什么呢?想象一下,如果样本点紧贴着分类直线,新来一个样本略微不同于这个样本,它就很容易被分到另一类。我们怎么达到分类直线离样本最远这一效果呢,需要先找到两类中离分类直线最近的样本点,让它们与分类直线的距离最大来训练参数。这些离分类直线最近的样本点,我们叫它们支持向量,这也是支持向量机名字的由来。这段话看完了,可能还不是很理解,立即看图,你就豁然开朗。

其中红色直线是最优分割线,蓝色直线也可以分类,但不是最优,因为它距离B太近了。图中的A,B两个样本,就是支持向量,也就是离最优分类直线最近的点,怎么找到他们呢,下面会讲到。上面说离支持向量最远的直线就是最优分类直线,是这样理解的,要同时保证它离A和B最远,蓝色线虽然离A很远,但是它离B很近,不满足条件。只有当分类直线距离A,B是等距的时候,才能保证即离A最远,又离B最远。大致原理讲完了,接下来详述SVM的过程。

假定样本集T={(x1,y1),(x2,y2),...,(xn,yn)},其中x表示特征向量,y表示该特征属于的类别。当y=1,x属于正例,当y=-1,x属于负例。注意这里类别y不再是logistic回归里面的0和1了。原因随后你就会明白。这里x是一个向量,所以这里不再是分类直线了,而是分类超平面,什么是超平面呢,一维我们叫线,二维叫面,三维叫体,三维以上就叫超平面。我们仍然假设问题是线性可分的,我们要求的超平面为:

\omega ^{T}x+b=0,其中w={w1;w2;...;wn}

其实在机器学习中,向量有一个约定俗成的规矩,一个向量它初始状态就是列向量,这里w是列向量,转置之后是行向量,x也是列向量,相乘得到一个常数,加上常数b等于0;

那么样本空间中任意点到超平面的距离可写为:

r=\frac{|w^{T}x+b|}{||w||}                                (1)

就是初中学的点到直线距离公式。假设超平面能将训练样本正确分类。那么

在y=+1类别这边的点,一定可以使\omega ^{T}x+b>0

在y=- 1类别这边的点,一定可以使\omega ^{T}x+b<0

又由于同时扩大缩小w和b,仍是同一条直线,所以我们可以令:

\omega ^{T}x+b\geqslant 1,     y=+1;         (2)

\omega ^{T}x+b\leqslant -1,  y=-1  .           (3)

那么再结合上面讲得原理,我们的最优超平面所依赖的样本是,距离超平面最近的样本点,那这些样本点一定在

\omega ^{T}x+b=1或者\omega ^{T}x+b=-1上,这里细细品味一下。那这些支持向量到的超平面的距离公式也就可以从(1)式变为下式:

r=\frac{1}{||w||}                                     (4)

那么我们要做的就是最大化r,但是有约束条件的 y_{i}(\omega ^{T}x_{i}+b)\geqslant 1,就是样本点要满足这个条件,这个公式就是把类别信息与(2)(3)式融合得到的。

总上我们可以列出:

max_{(w,b)} \frac{1}{||w||}                                                                         (5)

s.t. y_{i}(\omega ^{T}x_{i}+b)\geqslant 1,     i=1,2,...,m.

这里看不懂的话建议复习一下微积分的拉格朗日乘子法。公式(5)形式,不是一个凸优化问题,不利于我们求解,所以我们稍作转换。

min_{(w,b)} \frac{1}{2}||w||^{2}                                                                      (6)

s.t. y_{i}(\omega ^{T}x_{i}+b)\geqslant 1,     i=1,2,...,m.

最大化分母等于最小化其倒数,加一个1/2是为了求导时约去2。因为w本来就是要训练出来的,所以它前面的系数不会影响到结果。

这个式子要怎么解,就用到拉格朗日乘子法。首先我们构建拉格朗日函数。为此为每个不等式约束条件引进拉格朗日乘子\alpha _{i}\geqslant 0,i=0,1,2,...,N,定义拉格朗日函数:

L(\omega ,b,\alpha )=\frac{1}{2}||\omega ||^{2}+\sum_{i=1}^{m}\alpha _{i}(1-y_{i}(\omega ^{T}x_{i}+b))                 (7)

然后令\theta (\omega )=max_{\alpha \geq 0}L(\omega ,b,\alpha ),这就是拉格朗日乘子法,可以这样理解,我们最大化L,如果y_{i}(\omega ^{T}x_{i}+b)不满足约束条件,那么maxL后它将是无穷大,我们无法再求它的最小值。我们最后得出结果的时候,它必须是满足约束条件的,即\theta (\omega )的最优值为\frac{1}{2}||w||^{2},接着min_{(w,b)} \theta (\omega )即为所求。我们这样直接求,过程很麻烦,所以我们要转化为拉格朗日对偶问题,这样做的优点,一是对偶问题往往更容易求解;二是自然引入核的函数,进而推广到非线性分类问题。事实上

maxmin(...)<= minmax(...),这个式子你举个例子就可以证明,你举不出来反例的。另外只要满足KKT条件,等号就成立。我们这个优化函数是满足KKT条件的,可能是SVM的特性正好就满足KKT条件。说个题外话,这里初学者,不必在意为什么为什么KKT条件在这里是怎么用的,我们现在是要理解SVM,我们是要把SVM的过程梳理下来,所谓站在巨人的肩膀上,应该就是这样吧,前人的研究结论,我们拿来用就是了,比如我们写一个C++程序,总不能先要去学会如何编写一个编译器吧。为什么这么说,因为我在KKT条件上花了太多时间,到现在还没有完全明白这里KKT条件是怎么用的,每本书上的说法都不一样,所有关于它的博客也都讲的含糊其辞,研究它我觉得有点得不偿失,毕竟不是数学专业,如果有懂的朋友可以跟我讲讲。所以综上,我们这里的函数满足KKT条件,所以可以将原问题转化为对偶问题且一定有解:

max_{\alpha }min_{(w,b)}L(\omega ,b,\alpha )

接下来就开始我们牛逼的推导过程。

求L对w和b的极小值,就要分别对w和b求偏导,另其等于0。

\frac{\partial L(\omega ,b,\alpha)}{\partial \omega }=\omega -\sum_{i=1}^{m}\alpha _{i}y_{i}x_{i}=0                             (8)

\frac{\partial L(\omega ,b,\alpha)}{\partial b }=\sum_{i=1}^{m}\alpha _{i}y_{i}=0                                        (9)

得到\omega =\sum_{i=1}^{m}\alpha _{i}y_{i}x_{i}                                                     (10)

代入(7)式得

L(\omega ,b,\alpha )=\frac{1}{2}\omega ^{T}w-\sum_{i=1}^{m}\alpha _{i}y_{i}\omega ^{T}x_{i}-\sum_{i=1}^{m}\alpha _{i}y_{i}b+\sum_{i=1}^{m}\alpha _{i}

=\frac{1}{2}\omega ^{T}\sum_{i=1}^{m}\alpha _{i}y_{i}x_{i}-\omega ^{T}\sum_{i=1}^{m}\alpha _{i}y_{i}x_{i}-\sum_{i=1}^{m}\alpha _{i}y_{i}b+\sum_{i=1}^{m}\alpha _{i}

=-\frac{1}{2}(\sum_{i=1}^{m}\alpha _{i}y_{i}x_{i})^{T}\sum_{i=1}^{m}\alpha _{i}y_{i}x_{i}-b\sum_{i=1}^{m}\alpha _{i}y_{i}+\sum_{i=1}^{m}\alpha _{i}

=-\frac{1}{2}\sum_{i=1}^{m}\alpha _{i}y_{i}x_{i}^{T}\sum_{i=1}^{m}\alpha _{i}y_{i}x_{i}-b\sum_{i=1}^{m}\alpha _{i}y_{i}+\sum_{i=1}^{m}\alpha _{i}

=-\frac{1}{2}\sum_{i=1,j=1}^{m}\alpha _{i}\alpha _{j}y_{i}y_{j}(x_{i})^{T}x^{j}-b\sum_{i=1}^{m}\alpha _{i}y_{i}+\sum_{i=1}^{m}\alpha _{i}            (11)

再由公式9,化简11式,得

L(\omega ,b,\alpha )=\sum_{i=1}^{m}\alpha _{i}-\frac{1}{2}\sum_{i=1,j=1}^{m}\alpha _{i}\alpha _{j}y_{i}y_{j}(x_{i})^{T}x^{j}                   (12)

这里(x_{i})^{T}x^{j}是向量内积表示为<xi,xj>.

接着是极大化过程

 max_{\alpha }W(\alpha )=\sum_{i=1}^{m}\alpha _{i}-\frac{1}{2}\sum_{i=1,j=1}^{m}\alpha _{i}\alpha _{j}y_{i}y_{j}<x_{i},x^{j}>

s.t. \alpha _{i}\geqslant 0,i=1,...,m

      \frac{\partial L(\omega ,b,\alpha)}{\partial b }=\sum_{i=1}^{m}\alpha _{i}y_{i}=0

至于这个问题怎么求解,我们有一个很高效的方法叫序列求解法SMO,下下一篇讲,我们下一篇先引入核函数,将现行分类扩展到非线性分类。

我现在只需知道解出α后,就可以代入值求出w和b。然后新来的要分类的样本根据w和b做一次线性运算,然后看求得结果使否大于0,从而判断是正例还是负例。具体实现

首先我们上面得到  \omega ^{T}x+b=(\sum_{1=1}^{m}\alpha_{i}y_{i}x_{i})^{T}x+b=\sum_{1=1}^{m}\alpha_{i}y_{i}<x_{i},x>+b  因此在求出α后,新来一个样本的时候,我们和训练数据中所有的样本做内积即可。其实不用这么大的计算量,我们从KKT条件中得到,只有支持向量的α>0,其他情况α=0.因此,我们只需求新来的样本和支持向量的内积,然后运算即可。

 

 

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值