支持向量机的SMO算法

1. SVM优化目标函数

优化目标函数表达式为:

支持向量机的SMO算法

支持向量机的SMO算法
其中,支持向量机的SMO算法是SVM核函数的通用表示方法,如果使用的是线性核函数,也就是两个向量的内积。

函数的解要满足KKT条件的对偶互补条件为:

支持向量机的SMO算法

根据这个KKT条件的对偶互补条件,则有:

支持向量机的SMO算法

支持向量机的SMO算法

支持向量机的SMO算法

由于

支持向量机的SMO算法

我们令

支持向量机的SMO算法

则有
支持向量机的SMO算法
支持向量机的SMO算法
支持向量机的SMO算法

2. SMO算法的基本思想

上面的优化式子比较复杂,里面有m个变量组成的向量α需要在目标函数极小化的时候求出。直接优化是很难的。SMO算法采用了一种启发式的方法。它每次只优化两个变量,将其它变量都视为常数。由于支持向量机的SMO算法,假如将支持向量机的SMO算法固定,那么支持向量机的SMO算法之间的关系也确定了。这样SMO算法将一个复杂的优化算法转化为一个比较简单的两个变量的优化问题。

为了后面表示方便,我们定义支持向量机的SMO算法

由于支持向量机的SMO算法都成了常量,所有的常量我们都从目标函数中去除,这样前面的优化目标函数变成了:

支持向量机的SMO算法

支持向量机的SMO算法

3. SMO算法目标函数的优化

为了求解上面含有两个变量的目标优化问题,我们首先分析约束条件,所有的支持向量机的SMO算法都要满足约束条件,然后在约束条件下求最小。

根据上面的约束条件支持向量机的SMO算法,又由于支持向量机的SMO算法均只能取值为1或者-1, 这样支持向量机的SMO算法在[0,C]和[0,C]形成的盒子里面,并且两者的关系直线的斜率只能为1或者-1,也就是说支持向量机的SMO算法的关系直线平行于[0,C]和[0,C]形成的盒子的对角线,如下图所示:

支持向量机的SMO算法

由于支持向量机的SMO算法的关系被限制在盒子里的一条线段上,所以两个变量的优化问题实际上仅仅是一个变量的优化问题。不妨我们假设最终是支持向量机的SMO算法的优化问题。由于我们采用的是启发式的迭代法,假设我们上一轮迭代得到的解是支持向量机的SMO算法,假设沿着约束方向支持向量机的SMO算法未经剪辑的解是支持向量机的SMO算法。本轮迭代完成后的解为支持向量机的SMO算法

由于支持向量机的SMO算法必须满足上图中的线段约束。假设L和H分别是上图中支持向量机的SMO算法所在的线段的边界。那么很显然我们有:L≤支持向量机的SMO算法≤H

而对于L和H,我们也有限制条件。如果是上面左图中的情况,则有

支持向量机的SMO算法
支持向量机的SMO算法

如果是上面右图中的情况,则有:

支持向量机的SMO算法
支持向量机的SMO算法

也就是说,假如我们通过求导得到的支持向量机的SMO算法,则最终的支持向量机的SMO算法应该为:

支持向量机的SMO算法

那么如何求出支持向量机的SMO算法呢?很简单,我们只需要将目标函数对支持向量机的SMO算法求偏导数即可。

首先我们整理下我们的目标函数。

为了简化叙述,我们令

支持向量机的SMO算法

其中g(x)就是我们在第一节里面提到的

支持向量机的SMO算法

我们令

支持向量机的SMO算法
这样我们的优化目标函数进一步简化为:

支持向量机的SMO算法
由于支持向量机的SMO算法,并且支持向量机的SMO算法,可以得到用支持向量机的SMO算法表示支持向量机的SMO算法的式子为:

支持向量机的SMO算法

将上式带入我们的目标优化函数,就可以消除支持向量机的SMO算法,得到仅仅包含支持向量机的SMO算法的式子。

支持向量机的SMO算法
接下来我们终于可以开始求支持向量机的SMO算法了,现在我们通过求偏导数来得到支持向量机的SMO算法

支持向量机的SMO算法
整理上式有:

支持向量机的SMO算法

支持向量机的SMO算法带入上式,则:

支持向量机的SMO算法

上面推导过程中用到了支持向量机的SMO算法,在第2节我们定义了支持向量机的SMO算法

因此有支持向量机的SMO算法支持向量机的SMO算法,又因为支持向量机的SMO算法支持向量机的SMO算法进行点乘得到的是数值,所以支持向量机的SMO算法
我们终于得到了支持向量机的SMO算法的表达式:

支持向量机的SMO算法
利用上面讲到的支持向量机的SMO算法支持向量机的SMO算法的关系式,我们就可以得到新的支持向量机的SMO算法了。利用支持向量机的SMO算法支持向量机的SMO算法的线性关系,我们也可以得到新的支持向量机的SMO算法

 

4. SMO算法两个变量的选择

SMO算法需要选择合适的两个变量做迭代,其余的变量做常量来进行优化,那么怎么选择这两个变量呢?

 

4.1 第一个变量的选择

SMO算法称选择第一个变量为外层循环,这个变量需要选择在训练集中违反KKT条件最严重的样本点。对于每个样本点,要满足的KKT条件我们在第一节已经讲到了: 

支持向量机的SMO算法
支持向量机的SMO算法
支持向量机的SMO算法

一般来说,我们首先选择违反支持向量机的SMO算法这个条件的点。如果这些支持向量都满足KKT条件,再选择违反支持向量机的SMO算法支持向量机的SMO算法的点。

 

4.2 第二个变量的选择

SMO算法称选择第二个变量为内层循环,假设我们在外层循环已经找到了支持向量机的SMO算法, 第二个变量支持向量机的SMO算法的选择标准是让支持向量机的SMO算法有足够大的变化。由于支持向量机的SMO算法定了的时候,支持向量机的SMO算法也就确定了,所以要想支持向量机的SMO算法最大,只需要在支持向量机的SMO算法为正时,选择最小的支持向量机的SMO算法作为支持向量机的SMO算法, 在支持向量机的SMO算法为负时,选择最大的支持向量机的SMO算法作为支持向量机的SMO算法,可以将所有的支持向量机的SMO算法保存下来加快迭代。

如果内层循环找到的点不能让目标函数有足够的下降, 可以采用遍历支持向量点来作支持向量机的SMO算法,直到目标函数有足够的下降, 如果所有的支持向量作支持向量机的SMO算法都不能让目标函数有足够的下降,可以跳出循环,重新选择支持向量机的SMO算法。 

 

4.3 计算阈值b和差值支持向量机的SMO算法

在每次完成两个变量的优化之后,需要重新计算阈值b。当支持向量机的SMO算法时,我们有

支持向量机的SMO算法
于是新的支持向量机的SMO算法为:

支持向量机的SMO算法
计算出支持向量机的SMO算法为:

支持向量机的SMO算法
可以看到上两式都有支持向量机的SMO算法,因此可以将支持向量机的SMO算法支持向量机的SMO算法表示为:

支持向量机的SMO算法
支持向量机的SMO算法

同样的,如果支持向量机的SMO算法,那么有:

支持向量机的SMO算法
最终的支持向量机的SMO算法为:

支持向量机的SMO算法
得到了支持向量机的SMO算法我们需要更新支持向量机的SMO算法:

支持向量机的SMO算法
其中,S是所有支持向量支持向量机的SMO算法的集合。

好了,SMO算法基本讲完了,我们来归纳一下SMO算法。

 

5. SMO算法总结

输入是m个样本支持向量机的SMO算法,其中x为n维特征向量,y为二元输出,值为1或者-1,精度为e。

输出是近似解α

    1) 取初值支持向量机的SMO算法

    2) 按照4.1节的方法选择支持向量机的SMO算法,接着按照4.2节的方法选择支持向量机的SMO算法,求出新的支持向量机的SMO算法

支持向量机的SMO算法

    3) 按照下式求出支持向量机的SMO算法

支持向量机的SMO算法
    4) 利用支持向量机的SMO算法支持向量机的SMO算法的关系求出支持向量机的SMO算法

    5) 按照4.3节的方法计算支持向量机的SMO算法支持向量机的SMO算法

    6) 在精度支持向量机的SMO算法范围内检查是否满足如下的终止条件:

          支持向量机的SMO算法
          支持向量机的SMO算法
          支持向量机的SMO算法
          支持向量机的SMO算法
          支持向量机的SMO算法

    7) 如果满足则结束,返回支持向量机的SMO算法,否则转到步骤2)。