Kalzn
文章20
标签13
分类7
SMO算法流程

SMO算法流程

SMO 算法流程

python代码见github

问题简介

SMO(Sequential Minimal Optimization)用于解决支持向量机中的对偶问题的最优化求解过程,该问题为:

而此问题也满足KKT条件要求

流程

该问题是一种凸二次规划问题,但是如果当作一般情况处理,计算过于繁琐。好在我们可以利用该问题特殊情况,得以特殊处理以简化流程。

SMO算法的核心思想是利用这一条件,进行特殊处理。由于一次性确定所有的最优化取值是十分困难,所谓我们不妨每次只考虑变更两个变量,然后唯一确定剩下的变量为。这里为什么选择两个变量,每次只选择一个不应该更容易吗?这里我们要注意,我们是通过迭代的方式每次选取一组的值进行更改。鉴于条件,我们是无法对单一进行修改的,换句话说,如果我们更改了一个变量,则必须有另一个变量跟随发生改变以满足

以下,为了表述方便,我们每次选择的变量定为,此时目标函数可以写成: 这里我们把与无关的常数项都简写为,因为这部分在接下来的求导过程中无用。

这里引入我们之前的条件,并设定

带入消去

其中

我们需要对其最大化,这里进行求导,赋值0求极值

至此,问题似乎得以解决,我们似乎只需要通过该等式解出即可。但是,请再次注意,我们是通过迭代的方式每次选取一组进行优化的。而注意到变量,它的取值为:,其中其他的变量我们无法获悉。我们只知道在之前的迭代中确定的旧值。

所以,这里我们考虑如何调整的数值。即,如何通过旧值推定出新值。我们假定,在之前的迭代中已经确定了一个拟定分隔超平面

这里为上一次迭代中的旧的值。这里我们明确,在此轮迭代中,改变的只有,所以有

所以我们将带入

将其带入

其中为误差函数

但此时,我们还没有考虑到条件:

由于,故,上式无非就四种情况

其中(2)(3)可以归为一种情况 其中可以归结为。 满足线性规划

在这里插入图片描述

在这种情况下,应满足 。定义

此外,(1)(4)可以归为另一种情况

在这里插入图片描述

在这种情况下,应满足。定义

所以最后更新

至此我们确定了得更新值,然后的值也随之推出。这里我们设 则有

这里我们需要明确一件事情,到目前为止,我们所作的事情就是求这个目标函数得极值,通过分析可以发现是一个二次多项式函数,而二次项的系数为。所以目前来说,上述结论仅在时成立,因为此时是个开口向下的二次函数,存在极值为最小值。这种情况实际上可以应对大部分情况。但是在一部分情况,此时函数极小值在定义域边界出现。当然,在算法的实际实现中,我们可以直接求出定义域的两端值和极值,然后取三者中的最小值即可。

接下来,我们将讨论偏置的值如何求出。根据KKT条件可得,即有

带入误差函数 其中为旧的偏置值,将该式子代入替换上式的前两项 同理可以得出 而最终的要取两者的中间值,即

最后,我们来讨论,如何进行变量的选取。首先我们应该确定第一个变量,此时,我们变量样本集,选取第一个不满足KKT条件的样本。这里写作KKT条件为:

然后依照规则选取第二个变量,执行优化。当完成后,我们开始遍历非边界样例集(即满足的样例),同样选择第一个不满足KKT条件的变量,然后依照一定规则选择出第二个变量进行优化。完成后,我们再次选择整个样本集进行以上操作。总得来说,我们交替选择整个样本集和非边界样本集进行优化,直至整个样本集全部满足KKT条件。

关于选取第二个变量的规则,我们的原则是让尽可能大的发生变化,由于依赖所以当为正,则要尽量小,否则要尽量大。 有时按照上述的启发式选择第二个变量,不能够使得函数值有足够的下降,这时按下述步骤: > 首先在非边界集上选择能够使函数值足够下降的样本作为第二个变量,
如果非边界集上没有,则在整个样本集上选择第二个变量,
如果整个样本集依然不存在,则重新选择第一个变量。

参考

1.https://blog.csdn.net/luoshixian099/article/details/51227754

2.https://www.cnblogs.com/jerrylead/archive/2011/03/18/1988419.html

3.https://www.jianshu.com/p/0c433f6f4141

4.https://zhuanlan.zhihu.com/p/257866920

5.John Platt.Sequential Minimal Optimization: A Fast Algorithm for Training Support Vector Machines (https://www.microsoft.com/en-us/research/publication/sequential-minimal-optimization-a-fast-algorithm-for-training-support-vector-machines/)

本文作者:Kalzn
本文链接:http://kalzncc.github.io/2022/11/19/smo/
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可
除此之外,本文不做正确性担保,本人不对产生的问题负责。
×