今天是机器学习专题第35篇文章,我们继续SVM模型的原理,今天我们来讲解的是SMO算法。
公式回顾
在之前的文章当中我们对硬间隔以及软间隔问题都进行了分析和公式推导,我们发现软间隔和硬间隔的形式非常接近,只有少数几个参数不同。所以我们着重来看看软间隔的处理。
通过拉格朗日乘子法以及对原问题的对偶问题进行求解,我们得到了二次规划:
它应该满足的KTT条件如下:
也就是说我们要在这些条件下去求解(1)式的极值,在这个约束的情况下,虽然我们已经把式子化简成了只有一种参数 α \alpha α,但这个极值又应该怎么求呢?为了解决这个问题,我们需要引入一个新的算法,也是今天的文章的主要介绍的内容——SMO算法。
SMO算法简介
SMO的全写是Sequential Minimal Optimization,翻译过来是序列最小优化算法。算法的核心思想是由于我们需要寻找的是一系列的 α \alpha α值使得(1)取极值,但问题是这一系列的值我们很难同时优化。所以SMO算法想出了一个非常天才的办法,把这一系列的 α \alpha α中的两个看成是变量,其它的全部固定看成是常数。
这里有一个问题是为什么我们要选择两个 α \alpha α看成是变量而不选一个呢?选一个不是更加简单吗?因为我们的约束条件当中有一条是 ∑ y i α i = 0 \sum y_i\alpha_i=0 ∑yiαi=0,所以如果我们只选择一个 α \alpha α进行调整的话,那么显然会破坏这个约束。所以我们选择两个,其中一个变化,另外一个也随着变化,这样就可以保证不会破坏约束条件了。
为了方便叙述,我们默认选择的两个 α \alpha α分别是 α 1 , α 2 \alpha_1, \alpha_2 α1,α2。另外由于我们涉及 x i T x j x_i^Tx_j xiTxj的操作,我们令 K i j = x i T x j K_{ij}=x_i^Tx_j Kij=xiTxj。这样上面的(1)式可以写成:
其中由于 y 1 = ± 1 y_1 = \pm 1 y1=±1,所以 y i 2 = 1 y_i^2 = 1 yi2=1,上面的Constant表示除了 α 1 , α 2 \alpha_1, \alpha_2 α1,α2以外的常数项。我们假设 α 1 y 1 + α 2 y 2 = k \alpha_1y_1 + \alpha_2y_2 = k α1y1+α2y2=k,其中 α 1 , α 2 ∈ [ 0 , C ] \alpha_1, \alpha_2 \in [0, C] α1,α2∈[0,C],由于 y i y_i yi只有两个选项1或者-1,所以我们可以分情况讨论。
分情况讨论
首先我们讨论 y 1 y_1 y1和 y 2 y_2 y2不同号时,无非两种,第一种情况是 α 1 − α 2 = k \alpha_1 - \alpha_2 = k α1−α2=k,也就是 α 2 = α 1 − k \alpha_2 = \alpha_1 - k α2=α1−k,我们假设此时k > 0,第二种情况是 α 2 = α 1 + k \alpha_2 = \alpha_1 + k α2=α