机器学习技法 笔记四 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,不会影响最佳解
当然这个只是一个上界,并不是准确的。
=。=
但是正如上一章最好说的,我们现在的要求都是基于在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,不会影响最佳解
当然这个只是一个上界,并不是准确的。
=。=
相关文章推荐
- Yii框架Yiiapp()的理解
- 【CodeForces 626E】Simple Skewness
- How to get your very own RStudio Server and Shiny Server with DigitalOcean
- 根据IP地址获取真实IP所在地区 ,使用纯真IP库(纯真版20160215)
- 一个人的狂欢
- C语言字符串操作总结大全(超详细)
- Android 修改Menu字体颜色和背景
- 解决 ASP.NET Chart 控件出错 为 ChartImg.axd 执行子请求时出错
- jquery遮罩层
- MVP for Android: How to organize presentation layer
- Kth number (HDU_2665) 划分树
- python程序打包示例
- 网站嵌入百度地图API实例
- androidStudio添加.so文件正确姿势
- 【原创】2016年2月14日之后 打ipa包或者提交苹果AppStore失败 证书状态提示“此证书的签发者无效”的解决方法
- 在linux环境下搭建java web测试环境(非常详细!!)
- 如何获取 XAML 控件的模板代码
- horizon定位信息
- Hadoop集群搭建
- readonly(C# 参考)