好了,有了上两篇,svm和坐标上升法这两篇,终于可以说这篇smo算法了。
废话不说,我们当然想用坐标上升求这个只有r1,r2,r3,...rn的函数的最大值,但是问题是这个函数有个约束,就是sum(ri*yi)=0
你看,你要是按照坐标上升法,选定一个变量,比如r1,其它变量看成常数,这个时候r1就没法做变量了。因为:
sum(ri*yi)=r1*y1+sum(rj*yj) [j=2到n]
然后
r1*y1=-sum(rj*yj) 后面的就成了常数了 [因为其它变量是常数,yj是常数]
这怎么办呢?咬咬牙,一次选两个好了,比如ri和rj,然后用ri可以表示rj,然后带回到函数,就可以只关于ri了。
比如我们取r1和r2,图百度搜的,人家用的尔耳法,我打不出来:( 看图时把尔耳法转换成r就好,一样的,表示不同而已
201103182043073145.png
这样,右边是常数,则r1和r2成线性关系。根据直线的通式:AX+BY+C=0,我们很容易得到,当y1与y2异号与同号时的图形,值得注意的是加上了个折中经验风险和置信风险的C
201106012315132094.png 201106012315132585.png
我们可以看到两个ri和rj的选取必须同时满足直线与0到C的盒子这两个约束,所以可以给它们定义出范围来即:
L≤r≤H
chartafa.png
下面的就和坐标上升一致了。
另一个问题是怎么选取这两个ri和rj,smo使用的是启发式的方法选择
网友评论