SMO要点总结:
SMO使用坐标上升的方法,求解SVM的最优解。和原始坐标上升方法的不同点在于:
1.
由于SVM的限制条件
,所以不能只使用一个坐标,改为更新两个
2.
采用启发式方法,找到每次更新的坐标,而不是按顺序来
SMO的终止条件即,所有参数都符合KKT条件:
对应在margin以外的点
对应在margin上的点
对应在margin内的点
其中
所以在伪代码中,使用如下代码判断,是否违反KKT条件
对于 的点,应该有,即,若起小于0,则判定为违反KKT条件;同样,对于的点,判定大于0为违反KKT条件
当所有点都没有违反KKT条件时,说明已经达到最优解
当选定第一个更新坐标后,根据以下规则选择
1.
首先在unbound()点中,选择使最大的
2.
若1失败,按随机顺序从unbound()点中开始尝试
3.
若2失败,随机顺序从所有点尝试
更新,时,可以计算得到的解析解,按以下公式更新:
由于a取值范围有限定,所以需要判断解析解是否在范围内
y1,y2异号
y1,y2同号
当新的a超过范围时,需要替换成对应的上下界
注意:
当是个大于0的数字,用以上公式更新$\alpha_2$;
当等于0时,原式变成一元一次式,在L或H处去的最小(>0时,函数单调降,取H,否则取L);
当小于0时,原式轮廓类似与$y=-x^2+1$,L和H谁离中间线(即)远,谁取得最小値
得到新的a2后,计算a1
更新玩a后,接着需要更新
b
如果为unbound,更新b为
如果为unbound,更新b为
如果两者都为bound
最后更新每个点上的错误(考虑到只变化了)