您的位置:首页 > 其它

机器学习技法 笔记四 Soft-Margin Support Vector Machine

2016-02-24 12:02 393 查看
上面一章我们看完了kernel,通过合并转换和内积两个步骤来加速,这样我们可以通过dual SVM来解决很多问题。

但是正如上一章最好说的,我们现在的要求都是基于在Z空间里线性可分的,但是过度强求每个点都分正确,是有可能带来overfit的,比如有noise的点。

今天,我们就要来解这样一个问题。

其实,这样的思想,我们在学习机器学习基石的时候,已经有过了,当时讲PLA和pocket的时候,pocket的其实就是寻找错误最少的那条线。



如图所示,对于pocket,我们就是找到错误数量最少的那条线,而对于以前的SVM,相对于今天的soft,其实就是hard-margin,要求严格的在Z空间线性可分,

为了完成我们今天的母的,我们做一个combine,也就是说我们可以允许犯错误,但是犯错误也是会有代价的,就是会在以前的结果上增加数值,所以就形成了如图的表达式,可以这样想,以前要求很严格,要求全部都大于等于1,然后找到了对应的w,现在不要求都大于1了,条件变宽松了,我们可以找到更小的w,但是同时,错误会带来代价,就是错误的个数会加在w上,所以不能错太多。而参数C就是来调节这两方面的重要程度。

这样看上去,我们上面这个新的式子似乎挺不错的。

but



我们仔细看这个式子,最右边是一bool运算,y和sign(wz+b)不等就是1,相等就是0,所以下面这半边的式子,在正确的时候,即y和sign(wz+b)相等的时候,就还是y(wz+b)>=1,否则是>=负无穷

我们可以看到就是这个bool运算不是一个线性运算,不满足我们的二次规划了,但是想想我们前几天学习的,我们的dual和kernel都基于二次规划的。同时这个式子还有另外一个需要推敲的地方,比如对于一个点,正确的分类是圈圈,但是我们的预测把它弄到XX了,但是同样是XX,在去sign之前,肯定有个计算的power,即wz+b。显然如果wz+b和边界差得越远,说明错得越离谱,所以我们应该考虑的不仅仅是错误的次数,还有考虑错误的大小。

下面看一个新的式子,在上面的式子上进行改进的


引入了一个新的参数叫ξ,怎么理解呢?=。=

我自己的理解

如果按照以前的hard-svm来看,我们的ξ对于所有的n都是0,那么我们直接得到w,而后面那一堆就没有了

但是这个条件比较严格,因为为了满足这个严格的条件,我们可能会使得w会很大,但是如果我们可以付出一点错误的代价,比如y(wz+b)不>=1,而是像刚才前面那个有点错误,而这个错误的大小就是ξ,我们也许允许有了一点错误,使得后面那一堆变大了,但是如果可以使得我们找到的margin更加宽,也就是w更小,那么我们总的和还是更小了,所以说我们的思想其实就是允许一些错误,来换取更宽的margin,防止比如noise带来的错误,但是在允许错误的同时,也会考虑错误的大小,我们更欢迎错误差距更小的错误,而不是更大的错误。等等刚才看了一个


其实可以看到,那一个在margin中间的点,就是一个被放弃忽略的点,显然如果我们要强行线性可分,也可以做到,那就是做一条很细的margin,但是考虑到放弃仅仅一个点,却可以大量增大margin的宽度,而这个宽度就是这个被放弃的点到边界的距离。

接下来,我们再利用以前处理hard问题的dual 来处理soft问题

再解决hard 的dual 问题的时候,我们引入了α这个参数,但是现在对于soft问题我们有了两个条件,y(wz+b)>=1-ξ是一个ξ>=0是一个

前者我们依然可以用α来做,后者我们则需要引入β



根据我们在dual那一部分学习的内容,我们可以可以写成这样,

接着就是和以前求偏微分了

这个过程比较简单,可以直接写结论了



先对ξ求偏微分,可以得到上面的等式,自然可以得到α<C,然后把替换掉,发现可以直接消掉很大一部分,ξ直接被我们消掉了,真是666

那么得到下面的式子



其实我们就可以发现,和hard问题比起来,其实就是在α上加上了C这个上界

只不过在回解b的时候,soft要麻烦一些,由以前讲的伏地魔我们可以清楚知道,找一个SV,那么α>0,那么最初式子后面那一坨等于0

即1-ξ-y(wz+b)=0,但是这个式子里面有ξ,那么最简单的方式就是令ξ=0,而由伏地魔,我们知道β(-ξ)=0,因为ξ=0,那么β>0

即C-α>0,α<C,所以就是找过一个α<C的SV,这样的SV叫做free SV,如果一个SVM问题没有free SV,那就用不等式夹=。=

下面我们看看用不同的C做出来的分类效果



C过大还是可能overfit

其实总结一下,soft问题中,点一般来说可以分成3类

1.0<α<C

就是free SV

2.α=C ,错误的点

3.α=0,普通的点

当然有一些特殊的点,但是由于实践经验太少,对于这些点没有一个太清楚的认识,埋个坑=。=

至于模型选择,还是可以cross validation =。=

同时可以通过support vector的数量,来控制错误的上界

一般来说 leave one out 的错误 <= SVs/点的个数

因为不是sv的点不会影响margin,不会影响最佳解

当然这个只是一个上界,并不是准确的。

=。=
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: