从零到精通SVM之SMO算法原理
嗯哼将求最大值转化为最小值
本期目标是寻找一个α向量 是的上述函数取得最大值
回顾下α是什么
α是拉格朗日因子
其中α>=0看下 为什么要这样子
首先
我们先回顾下原始约束
其中 KTT条件 是要
我们来看下 这条件在分类时具体的意义
嗯哼哼
首先 ab区域的点
其都满足 到超平面的函数间隔 大于1也就是说
那么这些点对应的α = 0
嗯哼 以此类推
嗯哼哼 马上有人就看出来了
在c区域上的点呢
其
其是不满足KKT条件的
而我们正是要利用这一点
让其不断的向我么的约束区域运动
而 α 正是这样的一个存在
因为一旦w,b确定其函数间隔就是已经确定了
只能通过改变α的值
来调整w,b使得函数间隔发生变化
也就是说整个过程就是
对不满足KKT的条件的点 对其α不断迭代更新使得其满足KTT条件
嗯哼哼
而满足KTT条件的点
也就是使得上述函数
W(α)取得最大值
故只要函数不断变大即可
说得有点迷糊了,总结下
SMO
就是找到不满KKT的点 使其更新迭代使其满足条件,而自然而然函数的值也就不断增大
其实在SMO迭代只要中有一个违背了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