从零到精通SVM之SMO算法原理



嗯哼将求最大值转化为最小值



先来分析下

本期目标是寻找一个α向量 是的上述函数取得最大值

回顾下α是什么

α是拉格朗日因子

其中α>=0看下 为什么要这样子

首先

我们先回顾下原始约束

其中 KTT条件 是要


我们来看下 这条件在分类时具体的意义


嗯哼哼 

首先 ab区域的点

其都满足 到超平面的函数间隔 大于1也就是说


那么这些点对应的α = 0

嗯哼 以此类推

嗯哼哼 马上有人就看出来了

在c区域上的点呢


其是不满足KKT条件的 

而我们正是要利用这一点 

让其不断的向我么的约束区域运动 

而 α 正是这样的一个存在

因为一旦w,b确定其函数间隔就是已经确定了

 只能通过改变α的值

来调整w,b使得函数间隔发生变化

也就是说整个过程就是

对不满足KKT的条件的点 对其α不断迭代更新使得其满足KTT条件

嗯哼哼

而满足KTT条件的点

也就是使得上述函数

W(α)取得最大值

故只要函数不断变大即可

说得有点迷糊了,总结下

SMO

就是找到不满KKT的点 使其更新迭代使其满足条件,而自然而然函数的值也就不断增大

其实在SMO迭代只要\left( {{\alpha _i},{\alpha _j}} \right)中有一个违背了KKT条件,迭代完成后,目标函数的值必然会增大而且KKT条件违背的程度越大,迭代后的优化效果越明显,增幅越大。

而目的是全部点都满足KKT,并使函数值最大

SMO采取的策略是从这些不满足条件的点选择两个α出来,就假设为α1,α2吧,SMO先选取违背KKT条件程度最大的变量,那么第二个变量选择使目标函数值增大最快的变量.这和梯度下降算法思想类似。

在通过在更新两个α的时候 其他α是不变的 所以

等于一个常数

嗯哼哼 这就是说α1,α2有着约束,只要求出其中一个 另一个也就迎刃而解了

换而言之 就是说 W(α)会变成W(α1,α2)在变成W(α1)然后求其最大值即可


在通过约束 将α2去除

这就变成单一的W(α1)

然后在对其求导嗯哼 再重新计算w和b

在这之前我们必须要计算下是不是符合条件

嗯哼哼 我们要先要计算

的取值范围 计算出的要在合理范围

先看下约束条件

(1)



(2)


而y的标签取值为-1或者1

嗯哼哼  先往大的算

假设其中一个

y都设为1

那么 的取值为


同样也可以算出其他的上限和下限


其中L为LOW ,H为HIGH

最后


嗯哼 下面是具体计算过程

首先假设


嗯哼哼算不下去了 只能无耻的抄袭刘建平大佬的http://www.cnblogs.com/pinard/p/6111471.html


求导后整理的



最后


在根据其取值范围


最后 根据约束求出

嗯哼哼 然后在从新更新w


b呢

老规矩


可以求出b

你会发现有两个


先判断 其对应α是否满足约束


然后循环

最后附上知乎大佬一段参数选择的话

https://www.zhihu.com/question/40546280/answer/88539689?utm_medium=social&utm_source=qq


猜你喜欢

转载自blog.csdn.net/sibiantai555/article/details/80092951