序列最小最优化算法(SMO算法)

前面三篇我已经谈了谈我对支持向量机的理解,推到了各类支持向量机的对偶算法,我们有很多最优化算法来求解这个问题,但是样本容量很大时,这些算法会变得非常低效。人们就提出了很多快速实现算法,SMO算法就是其中之一,主要是用来解这个对偶问题:

                             _{\alpha }^{min}\textrm{}\: \frac{1}{2}\sum_{i=1}^{N}\sum_{j=1}^{N}\alpha _{i}\alpha _{j}y_{i}y_{j}\left ( \phi \left ( x_{i} \right )\cdot\phi \left ( x_{j} \right ) \right )-\sum_{i=1}^{N} \alpha _{i}

                     s.t.                  \sum_{i=1}^{N}\alpha _{i}y_{i}= 0

                                      0\leq \alpha _{i}\leq C,i=1,2,\cdots ,N

这个问题中变量是拉格朗日乘子,一个变量对应一个样本点,变量的总数即为样本容量N,也就是说我们现在要求的这个函数是N元函数。

在介绍SMO之前,大家可以先了解下坐标上升算法,这两个算法类似。


坐标上升算法

坐标上升算法每次更新多元函数中的一维,经过多次迭代直到收敛达到优化函数的目的。

下图中从A点到F*红色线所示就是这个过程。

这里写图片描述


SMO算法

上面已经提到了我们需要优化N个变量,SMO算法就是将N个参数的二次规划问题分成了多个二次规划问题,每个子问题只需要求解两个参数。

为什么要两个两个求?

我们要选择一对变量,因为在SVM中变量是相互关联的:\sum_{i=1}^{N}\alpha _{i}y_{i}= 0,若只固定一个\alpha _{1},当我们对\alpha _{1}修正后,等号将不再成立。我们至少需要两个来保证等式成立。

我们先选取两个需要优化的参数为\alpha _{1}\alpha _{2}(参数的选取不是随意的,在最后会介绍),其他变量是固定的,

\alpha _{1}\alpha _{2}带入上述对偶问题式子:

                         _{\alpha }^{min}\textrm{}\: \frac{1}{2}\sum_{i=1}^{N}\sum_{j=1}^{N}\alpha _{i}\alpha _{j}y_{i}y_{j}\left ( \phi \left ( x_{i} \right )\cdot\phi \left ( x_{j} \right ) \right )-\sum_{i=1}^{N} \alpha _{i}

我们可以得到SMO的最优化问题的子问题:

_{\alpha _{1}\, \alpha _{2}}^{min}\textrm{}\, \, w\left ( \alpha _{1}\, \alpha _{2} \right )=\frac{1}{2}K_{11}\alpha _{1}^{2}+\frac{1}{2}K_{22}\alpha _{2}^{2}+y_{1}y_{2}K_{12}\alpha _{1}\alpha _{2}-\left ( \alpha _{1}+\alpha _{2} \right )+y_{1}\alpha _{1}\sum_{i=3}^{N}y_{i}\alpha _{i}K_{i1}+\, \, \, \, y_{2}\alpha _{2}\sum_{i=3}^{N}y_{i}\alpha _{i}K_{i2}

                        s.t.        \alpha _{1}y_{1}+\alpha _{2}y_{2}=-\sum_{i=3}^{N}\alpha _{i}y_{i}

                                        0\leq \alpha _{i}\leq C,i=1,2,\cdots ,N

 我们可以借助\alpha _{1}y_{1}+\alpha _{2}y_{2}=-\sum_{i=3}^{N}\alpha _{i}y_{i},为了方便书写,我们令-\sum_{i=3}^{N}\alpha _{i}y_{i}=\varsigma

  可得:\alpha _{1}y_{1}+\alpha _{2}y_{2}=\varsigma

            \alpha _{1}y_{1}^{2}=\left ( \varsigma -\alpha _{2} y_{2}\right )y_{1}       推出:\alpha _{1}=\left ( \varsigma -\alpha _{2} y_{2}\right )y_{1}

    为了方便书写,我们令v_{i}=\sum_{i=3}^{N}\alpha _{i}y_{i}K\left ( x_{i} \, ,x_{j}\right )

\alpha _{1}=\left ( \varsigma -\alpha _{2} y_{2}\right )y_{1}代入上式,变成只有\alpha _{2}的二次函数:

w\left ( \alpha _{2} \right )=\frac{1}{2}K_{11}\left ( \varsigma -\alpha _{2}y_{2} \right )^{2}+\frac{1}{2}K_{22}\alpha _{2}^{2}+y_{2}K_{12}\left ( \varsigma -\alpha _{2}y_{2} \right )\alpha _{2}-\left ( \varsigma -\alpha _{2}y_{2} \right )y_{1}-\alpha _{2}+v_{1}\left ( \varsigma -\alpha _{2}y_{2} \right )+y_{2}v_{2}\alpha _{2} 

 对\alpha _{2}求导数:

          \frac{\partial W}{\partial \alpha _{2}}=K_{11}\alpha _{2}-K_{11}\varsigma y_{2}+K_{22}\alpha _{2}+y_{2}K_{12}\varsigma-2K_{12}\alpha _{2}+y_{1}y_{2}-1-v_{1}y_{2}+y_{2}v_{2}=0

将所有带\alpha _{2}的移到等式的同一侧

 

 这里我们引入E_{i}

                 E_{i}=g\left ( x_{i} \right )-y_{i}   其中g\left ( x_{i} \right )x_{i}的预测值,y_{i}是真实值

                 g\left ( x_{i} \right )=w^{T}x+b=\sum_{i=1}^{N}\alpha _{i}y_{i}K\left ( x_{i} \, x\right )+b

    由此式也可得出:v_{i}=\sum_{i=3}^{N}\alpha _{i}y_{i}K\left ( x_{i} \, ,x_{j}\right )=g\left ( x_{i} \right )-\sum_{i=1}^{2}\alpha _{i}y_{i}K\left ( x_{i} x_{j} \right)-b

                 i=1时:v_{1}=g\left ( x_{1} \right )-\sum_{i=1}^{2}\alpha _{i}y_{i}K\left ( x_{i} x_{j} \right)-b

                 i=2时:v_{2}=g\left ( x_{2} \right )-\sum_{i=1}^{2}\alpha _{i}y_{i}K\left ( x_{i} x_{j} \right)-b

补充一点:我们将优化后的\alpha _{1} \: \alpha _{2}记为\alpha _{1}^{new}\alpha _{2}^{new},均满足:

                                                        \alpha _{1}^{old}y_{1}+\alpha _{2}^{old}y_{2}=\varsigma = \alpha _{1}^{new}y_{1}+\alpha _{2}^{new}y_{2}

将上边求导得到的式子中的v和\varsigma换掉:

序列最小最优化算法(SMO算法)_第1张图片

 到了这一步我们已经得到了优化后的\alpha _{2},但是还有一个要注意的点!!!要判断\alpha _{2}^{new}是否满足定义域,我们管这一步叫对原始解进行裁剪:

                  将      \alpha _{1}y_{1}+\alpha _{2}y_{2}=\varsigma两边同时乘上y_{1}

                             得:\alpha _{1}+\alpha _{2}y_{1}y_{2}=\varsigma y_{1}  这个式子对应两种情况:

                                                                                                         y_{1}=y_{2} : \alpha _{1}+\alpha _{2}=\varsigma

                                                                                                         y_{1}\neq y_{2} : \alpha _{1}-\alpha _{2}=\varsigma

     当 \alpha _{1}+\alpha _{2}=\varsigma时:

序列最小最优化算法(SMO算法)_第2张图片

   当 \alpha _{1}-\alpha _{2}=\varsigma时:

序列最小最优化算法(SMO算法)_第3张图片

  综上:

                               \alpha_{2}^{new=} \begin{Bmatrix}L\: \: \:\: \: \: \: \: \: \:\alpha _{2}< L & \\ \alpha _{2} \, \: \: L\leq \alpha \leq H & \\ H\, \: \: \: \: \: \: \: \alpha _{2}> H & \end{Bmatrix} 

求解\alpha _{1}^{new}:

                      \alpha _{1}^{new}=\alpha _{1}^{old}+y_{1}y_{2}\left ( \alpha _{2}^{old} -\alpha _{2}^{new}\right )

完成\alpha _{1}\; \alpha _{2}的优化后,需要重新计算b,E_{i}^{}(为了进行变量的选择):

   序列最小最优化算法(SMO算法)_第4张图片  变量的选择:

序列最小最优化算法(SMO算法)_第5张图片

 最后,我们就得到了SMO算法:

序列最小最优化算法(SMO算法)_第6张图片

你可能感兴趣的:(笔记,算法,支持向量机,机器学习)