林轩田之机器学习课程笔记( embedding numerous feature之 soft-margin support vector machine)(32之20)

欢迎转载,可以关注博客:http://blog.csdn.net/cqy_chen
题目可能不全,因为有字数限制,不好意思,可以参考:
https://www.csie.ntu.edu.tw/~htlin/course/ml15fall/

概要

上节讲到了kernel,目的就是将映射到高维然后求解,转换为了在低维度空间内积然后通过kernel函数解决。
上面也讲到了通过多项式或者高斯的核函数可能会导致过拟合,一方面是我们坚持必须要能完全分割,一方面是核函数复杂。这都导致了模型复杂度过高。
所以如果坚持必须要完全分割,可能导致过拟合,那么如何解决这个问题?本节讲解。

原问题及其动机

我们对比PLA算法,在无法分割的时候,我们是如何计算的呢?是采用的贪心的PLA演算法来做的。反正找一个手里面是最好的错误率最低的演算法,至于没有分开就不管了。
首先看看原问题的样子:

min12wTws.t:yn(wTxn+b)1;()

为了防止过拟合,我们会稍微的让SVM犯点错,不用真的全部完全分开。
min12wTw+Cn=1N[yn(wTxn+b)]s.t:yn(wTxn+b)1()yn(wTxn+b)()yn(wTxn+b)1([yn(wTxn+b)])

所以我们看到对于分错的点,就是不管状态,无所谓啦。但是要在我们的目标函数中加上限制,当然是希望分错的点少好了,这里为了调节原始的最小值以及分错点的个数添加了一个常数项C。
这样会带来两个问题:
1)这样的方程式没有考虑到一个犯错误的点犯错误的程度
2)不是一个QP问题了,所以求解救麻烦了。
所以我们这里稍微修改下,我们记录下犯错误的程度为, ξ ,得到方程式:
min12wTw+Cn=1Nξns.t:yn(wTxn+b)1ξn;ξn0;

所以我们看到,最开始我们是不在乎犯错点的程度,直接用无穷大来替换。现在关注了这个程度,用来度量错误的点偏离了本该靠近的那条分割线的距离,如下图:
这里写图片描述
同样我们看到通过C可以来调节到底我们是需要选择胖胖的边界呢还是犯错误点的个数,如果C越大,说明我们限制犯错误点的个数,就会导致胖胖的边界变瘦,如果C小,就说明我们不怎么关注犯错误点的个数,当C=0,就是原来的问题了。
大家可以对比下正则化的式子,正则化中其实也是一样,通过一个系数来调节,最小化目标和条件限制。
这个方程式有: d˜+1+N 个变量,有2N个限制条件。
所以我们有这么多的变量,可以通过对偶的方式来改变变量的个数。

对偶问题

上面我们允许SVM犯错误,得到了新的方程式,要求解这样的方程式,以前的流程,求解对偶问题,拉格朗日函数如下:

L(w,b,ξ,α,β)=12wTw+Cn=1Nξn+n=1nαn(1ξnyn(wTzn+b))+n=1Nβn(ξn)

同理根据对偶问题,得到:
maxαn0,βn0(minw,b,ξ(12wTw+Cn=1Nξn+n=1nαn(1ξnyn(wTzn+b))+n=1Nβn(ξn)))

所以这里对 w,b,ξ 求导:
Lξ=Cαβ=0

对于w,和b求导和原来是一样一样的。不要忘记我们还有条件: α0,β0 。我们可以限定其中一个在0到C之间,这里限定 α 得到:
max0αnC,βn=Cαn(minw,b,ξ(12wTw++n=1nαn(1yn(wTzn+b))))

看看这个式子和原来的对比:
max0αn(minw,b,ξ(12wTw++n=1nαn(1yn(wTzn+b))))

无非就是限定了 α 的一个上限,以前是没用上限的,现在加上了上限C。最后化简得到:
mina12n=1Nm=1NanamynymzTnzmn=1Nans.t:1)n=1Nynαn=02)0αnC3)w=n=1Nαnynzan4)βn=Cαn

所以对比以前的条件就是多了2N个。

软间隔的信息

通过这个对偶问题,我们就可以通过kernel的技巧来求解最后的结果。这个过程和以前的求解基本一致:
这里写图片描述
可以看到在原来的hard-margin中,只需要随便找一个支持向量就ok了。但是在soft-margin中呢?我们求得了 αn ,在求解b的过程中稍微麻烦点。
在支持向量中得到 b=ysysξswTzs ,但是要求解b需要求解 ξ ,根据 (Cαn)ξn=0 ,当 αs<C 的时候, ξs=0 得到 b=yswTzs .
所以找到任意一个支持向量,如果满足 αs<C 即可求解。
我们看看采用soft-margin得到的结果看看:
这里写图片描述
所以即使是使用soft-margin这样的SVM,如果参数没有调节好,也是会过拟合的。
最后再来看看soft-margin的支持向量:
在求解b的时候要满足:

αn(1ξnyn(wTzn+b))=0(Cαn)ξn=0

在求解的时候,说过随便下一个 αn<C 的支持向量就好了,同样我们可以说当 0<αn<C 的时候,表示该点是支持向量。如下图:
这里写图片描述
1)当 0<αn<C ,表示支持向量,如图中方块的点。
2)当 αn=0 ,那么表示 ξn=0 同时表示这些点没有违反条件。比如图中叉叉或者圆圈的点。
3)当 αn=C ,那么表示 ξn0 ,说明该点违反了条件。比如上面的三角图形。

一般来说我们会采用带kernel版本的soft-margin的SVM。

模型选择

现在已经学习了SVM模型,在使用的时候,会遇到如何选择超参数:C,选择哪个核函数,核函数的参数调整,如下图即使都采用了高斯核函数,只是调整了不同的C
这里写图片描述
结果也会不一样,这个时候如何做呢?当然是交叉验证啦。
这么多参数怎么交叉验证呢?可以参考下sklearn的网格搜索。
参考链接:
http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html
反正我是经常用的啦,就是运行慢啊。选择一个验证集上表现最好的那个模型。

这里说一个结论,在通过留一法进行交叉验证的时候

Eloocv=

因为对于那些非支持向量其实对于模型是没用任何贡献的。
所以在SVM中也可以通过支持向量点的个数来选择模型,但是由于这是个上限,一般只是用它来避免过于错误的模型。而不是模型选择,如果一个模型支持向量个数很大,说明可能有问题的。

欢迎转载,可以关注博客:http://blog.csdn.net/cqy_chen

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值