断断续续看了好多天,赶紧补上坑。
感谢july大神的 http://blog.csdn.net/v_july_v/article/details/7624837/
以及CSDN上淘的比较正规的SMO模板代码。
①最大化几何间隔。
如果数据能一道线切开的话,我们希望离这道线最近的点的距离越长越好,否则容易分类错误,这就是SVM的核心。
定义函数间隔di=y(wxi+b),其中y=1 or -1,问题在于2*di和di是等效的分隔平面,所以弃之。
所以又定义几何距离D=d/||w||。||w||=根号(w1^2+w2^2+...wn^2)
目标函数max D,约束条件di=y(wxi+b)>=d, 这里的d是取最小的函数间隔,保证离分割平面最近,且最大化距离。
化简处理:令w’=w/d, b’=b/d, 这样约束条件等式相当于两边被除了d,变成di=y(w’xi+b)>=1,
D也相当于变成1/||w||,为了方便,以后w’全部用w代替。
di=y(wxi+b)>=1, 这是个有趣的式子,由于y=±1,单独取出(wxi+b),那么±1的就是传说中里分隔平面最近的点了,称之为支持向量。
②探究规划问题
目标函数=max D=max 1/||w||,分式好讨厌,等效成min (数学原理不知道是啥=。=)
然后引入拉格朗日乘子α,把目标函数、约束条件捆在一起成一个式子。
这样有新的目标函数:
这个式子很容易被误解,它的max针对的是
min针对的是,注意看min/max底部,不要很矛盾地理解成对整个式子。
max部分是重点,引入变量α,成为拉格朗日乘子。max这部分的意义在于等效约束条件,
由于y(wxi+b)>=1,如果出现小于1的情况,那么减去的这部分就是一个负数,负负得正,会使前面的min黯然失色。至于大于1的情况,可以令α=0 踢掉它。
最理想的情况下,=min
然而这个式子还是比较麻烦的,min规划是先决条件,然后还要考虑不定的乘子部分。
利用拉格朗日对偶性大法,逆转下两个条件,变成对偶规划问题。,要满足KKT条件,就有d*<=p*。
KKT条件说白了就是0<=α<=C. (define C 100)
这样就可以先定住max求min,最后再求max了。
③大道至简
min部分化简很神奇,最后w、b不见了,变成了
加上max以及min部分的约束条件之后
max部分由SMO算法完成,SMO每次抽取确定两个乘子,然后更新w、b
更新w:。
更新b: