求解SVM---SMO算法

 

支持向量机的学习可以形式化为凸二次规划问题,这种凸二次规划问题一般采用序列最小优化(sequential minimal optimization, SMO)算法. SMO算法解决SVM的对偶问题:

\underset{\alpha }{min} \: \: \frac{1}{2} \sum_{i=1}^{N}\sum_{j=1}^{N}\alpha _{i}\alpha_{j}y_iy_jK(x_i,x_j)-\sum_{i=1}^{N}\alpha_i

s.t.\: \: \sum_{i=1}^{N}\alpha _iy_i=0

        0\leq \alpha_i \leq C, \: i=1,2,...,N

SMO算法是一种启发式的算法,基本思路是:如果所有变量的解都满足此最优化问题的KKT条件,那么这个最优化为题的解就找到了。算法大致流程为:选择两个变量\alpha_1\alpha_2,固定其他变量,其中\alpha_1为违反KKT条件最严重的一个,另一个由约束条件自动确定;针对这两个变量构建一个二次规划问题,则\alpha_1\alpha_2可通过解析解直接求出;更新b;迭代上述过程直至满足条件。

每次迭代的算法流程如下所述:

1. 选择两个变量\alpha_1\alpha_2,其中\alpha_1违反KKT条件

  • 1.1 检验训练样本点(x_i, y_i)是否满足KKT条件,即:

             \alpha_i=0\Leftrightarrow y_ig(x_i)\geqslant 1

             0<\alpha_i<C \Leftrightarrow y_ig(x_i) = 1     

             \alpha_i =C \Leftrightarrow y_ig(x_i) \leqslant 1

             其中,

             g(x_i) = \sum_{j=1}^{N} \alpha_i y_j K(x_i,x_j)+b

  • 1.2 选择使得|E_1-E_2|最大的变量为\alpha_2

2. 求出\alpha_1^{new}\alpha_2^{new}

  • 2.1 计算\alpha_2^{new}的下限L和上限H

             if \: y_1 \neq y_2,L=max(0, \alpha_2^{old}-\alpha_1^{old}), H=min(C,C+\alpha_2^{old}-\alpha_1^{old})

             if \: y_1=y_2, L=max(0, \alpha_2^{old}+\alpha_1^{old}-C), H=min(C,\alpha_2^{old}+\alpha_1^{old})

  • 2.2 计算无上下限约束时的\alpha_2^{new,unc}

             \alpha_2^{new,unc} = \alpha_2^{old} + \frac{y_2(E_1-E_2)}{\eta }

             其中,

             E_i = g(x_i) - y_i = \left( \sum_{j=1}^{N}\alpha_jy_jK(x_j,x_i)+b) \right)-y_i, i=1,2

              \eta = K_{11} + K_{22} -2K^{12}

  • 2.3 更新\alpha_1^{new}\alpha_2^{new}

              \alpha_2^{new} = \begin{cases} H, & \alpha_2^{new, unc}>H \\ \alpha_2^{new, unc}, & L\leqslant \alpha_2^{new,unc}\leqslant H \\ L, & \alpha_2^{new,unc}<L \end{cases}.

              \alpha_1^{new} = \alpha_1^{old} + y_1y_2(\alpha_2^{old}-\alpha_2^{new})

3. 计算阈值b和差值E_i

  • 3.1 计算b

              if \; 0< \alpha_1^{new} <C:

                         b_1^{new} = -E_1 - y_1K_{11}(\alpha_1^{new}-\alpha_1^{old})-y_2K_{21}(\alpha_2^{new}-\alpha_2^{old})+b^{old}

              if \; 0< \alpha_2^{new} <C:

                         b_1^{new} = -E_2 - y_1K_{12}(\alpha_1^{new}-\alpha_1^{old})-y_2K_{22}(\alpha_2^{new}-\alpha_2^{old})+b^{old}

              如果\alpha_1^{new}, \alpha_2^{new}同时满足上述条件,则b_1^{new}=b_2^{new}

              如果\alpha_1^{new}, \alpha_2^{new}是0或者C,那么b_1^{new}b_2^{new}以及它们之间的数都是符合KKT条件的阈值,这时选择中点作为b^{new}

  • 3.2 更新E_i

             E_i^{new} = \sum_{j=1}^N \alpha_j y_jK(x_i, x_j) + b^{new} - y_i

对于线性可分支持向量机(硬间隔)、线性支持向量机(软间隔)、线性不可分支持向量机,SMO求解过程都是相同的,只不过KKT条件不同。SMO的特点是不断地将原来的二次规划问题分解为只有两个变量的二次规划子问题,并对子问题进行解析求解,直到所有变量都满足KKT条件位置。因为子问题有解析解,所以求解过程很快,总体也叫高效。

参考文献:《统计学习方法》 李航

 

 

 

 

  

 

 

你可能感兴趣的:(求解SVM---SMO算法)