SMO算法推导

一、要解决什么问题

经过漫长的探索,我们建立了SVM模型,但是这个模型中还剩下一个未知参数需要求解,SMO就是求解这个参数的一种高效方法。

我们要解决的终极问题是:

     SMO算法推导_第1张图片

做个变型就是:

        SMO算法推导_第2张图片

这就是我们要解决的终极问题,后面所有的努力,都是为了寻找一组满足约束条件的a,让目标函数最小

二、算法解决问题的思路

其基本思想是:所有变量必须满足KKT条件,因为KKT条件是该优化问题的充分必要条件。固定其他变量,针对两个变量构建一个二次规划问题,因为这会使得原始二次规划问题的目标函数值变得更小,这个子问题可以通过解析方法求解。子问题有两个变量,一个是违反KKT条件最严重的那一个,另一个由约束条件自动确定,如此,SMO算法将原问题不断分解为子问题并对子问题求解,进而达到求解原始问题的目的。

2.1 坐标上升法

2.2 两个变量的二次规划的求解方法

1)得到关于a1和a2的二次规划问题

                             SMO算法推导_第3张图片

2)取极值时的a2的计算公式

到这里就可以发现,现在的优化目标就是一个关于a1和a2的二次函数,求极值的话求导看定义域就好。而且根据a1和a2的约束关系,我们可以把a1消去,然后求关于a2的导数,导数为0的点就是我们要找的极值点。推导过程如下图所示:

              SMO算法推导_第4张图片

                  SMO算法推导_第5张图片

3)考虑可行域

我们不能直接使用上述公式更新a2,因为还要考虑到a2的可行域。

就好比求最值问题,你求导,导数为0,就能找到最值点了?不是这样的,要时刻考虑到定义域。最值点通常要么在极值点处,要么在边界处。如果这个极值点都不在定义域里,我们怎么能直接把它作为最后的结果呢?

所以我们需要看这个问题的定义域,是什么

          SMO算法推导_第6张图片

这两个共同决定了a2的可行域,那么怎么求a2的可行域呢,通过画图可看

SMO算法推导_第7张图片

其它两种情况类似

SMO算法推导_第8张图片

4)二次项的系数也得考虑

注意上面这一切都是在我们假设(K11+K22-2*K12)大于0的时候。所以到这里这个最值问题,虽然我们已经考虑了可行域问题,但是我们还没有考虑原来的二次函数的二次项的系数问题。

所以我们还需要对(K11+K22-2*K12)进行讨论。我们可以分下面三种情况讨论:

SMO算法推导_第9张图片

2.3 选择两个a的启发式方法

我们在寻找a1和a2时,就是要找到违反KKT条件的。具体的过程分为寻找第一个要修改的参数,即外层循环;和寻找第二个要修改的参数,即内层循环。

所以SMO先选取违背KKT条件程度最大的变量,那么第二个变量应该选择使目标函数值增大最快的变量。

但是这个变量怎么找呢?比较各个变量优化后对应的目标函数值的变化幅度吗?

这样是不行的,复杂度太高了。

SMO使用了一个启发式的方法:当确定了第一个变量后,选择使两个变量对应样本之间最大的变量作为第二个变量。

直观来说,更新两个差别很大的变量,比较相似的变量,会给目标函数更大的变化。间隔的定义也可以用

                       SMO算法推导_第10张图片

 

你可能感兴趣的:(数学理论模型)