评论

收藏

[python] SVM——(七)SMO(序列最小最优算法)

编程语言 编程语言 发布于:2021-12-31 13:41 | 阅读数:487 | 评论:0

在说SMO (Sequential minimal optimization)之前,先介绍一种与之类似的算法,坐标上升(下降)算法.
1.Coordinate ascent
所谓坐标上升(下降)指的是同一个算法,只是若实际问题是求极大值则是上升,反之为下降。我们知道梯度下降算法在每次迭代过程中都是沿着梯度的(反)方向进行的;而坐标下降算法则是在每次迭代中分步沿着你n个(n为特征维度)方向进行的。下图是2维情况下,两者求解的示意图。
DSC0000.png

具体的就是每次只把第i个变量看做是未知数,其他看做常数进行求导,令为0解出第i个变量。求出所有参数的表达式后,利用旧的参数一次更新得到每一个新的参数。也就是:梯度下降强调所有参数同时(simultaneously)更新,而坐标下降则是每个参数分别更新
下面是一个两者的一个代码片段:
% gradient descent
for i = 1:200
  grad(1)=4*x1-2*x2-4;
  grad(2)=-2*x1+10*x2-24;% 都是用旧的参数得到梯度
  x = x-alpha*grad;% 同时更新得到新的参数
  f1 = f(x(1),x(2));
end
% coordinate descent 
for i = 200
  x1=1+0.5*x2;
  x2=2.4+0.2*x1;% 用上一步更新的参数,来更新另外一个参数,未同时
  f2 = f(x1,x2);
end

2.SMO算法
如下我们要之前推导出来要优化的目标函数:
                                                                                                                                                        max                                                 ⁡                                                              α                                                                                                                                           W                                              (                                              α                                              )                                              =                                                               ∑                                                                   i                                                    =                                                    1                                                                  m                                                                               α                                                 i                                                              −                                                               1                                                 2                                                                               ∑                                                                   i                                                    ,                                                    j                                                    =                                                    1                                                                  m                                                                               y                                                                   (                                                    i                                                    )                                                                                                y                                                                   (                                                    j                                                    )                                                                                                α                                                 i                                                                               α                                                 j                                                              ⟨                                                               x                                                                   (                                                    i                                                    )                                                                               ,                                                               x                                                                   (                                                    j                                                    )                                                                               ⟩                                                                                                                                                  s                                              .                                              t                                              .                                                                                                                                           0                                              ≤                                                               α                                                 i                                                              ≤                                              C                                              ,                                              i                                              =                                              1                                              ,                                              .                                              .                                              .                                              ,                                              m                                                                                                                                                                                                                                                  ∑                                                                   i                                                    =                                                    1                                                                  m                                                                               α                                                 i                                                                               y                                                                   (                                                    i                                                    )                                                                               =                                              0                                                                                                                           (2.1)                                                  \begin{aligned} \max_{\alpha} &W(\alpha)=\sum_{i=1}^m\alpha_i-\frac{1}{2}\sum_{i,j=1}^my^{(i)}y^{(j)}\alpha_i\alpha_j\langle x^{(i)},x^{(j)}\rangle\\[1ex] s.t. &0\leq\alpha_i\leq C,i=1,...,m\\[1ex] &\sum_{i=1}^m\alpha_iy^{(i)}=0\tag{2.1} \end{aligned}                   αmax​s.t.​W(α)=i=1∑m​αi​−21​i,j=1∑m​y(i)y(j)αi​αj​⟨x(i),x(j)⟩0≤αi​≤C,i=1,...,mi=1∑m​αi​y(i)=0​(2.1)
照着上面的想法,我们是否也能将同样的思路用在此处呢?答案是否定的,因为此处多了一个约束条件。
例如,我们将                                       α                         1                                  \alpha_1               α1​看做是未知量,其它视为常量,那么由约束条件我们可以得到:
                                                                                                                                                        α                                                 1                                                                               y                                                                   (                                                    1                                                    )                                                                               =                                              −                                                               ∑                                                                   i                                                    =                                                    1                                                                  m                                                                               α                                                 i                                                                               y                                                                   (                                                    i                                                    )                                                                                   (                                              两边同乘以                                                               y                                                                   (                                                    1                                                    )                                                                               )                                                                                                                                                                   α                                                 1                                                              =                                              −                                                               y                                                                   (                                                    1                                                    )                                                                                                ∑                                                                   i                                                    =                                                    2                                                                  m                                                                               α                                                 i                                                                               y                                                                   (                                                    i                                                    )                                                                                                                                                            (2.2)                                                  \begin{aligned} \alpha_1y^{(1)}=-\sum_{i=1}^m\alpha_iy^{(i)} \;\;(\textrm{两边同乘以}y^{(1)})\\[1ex] \alpha_1=-y^{(1)}\sum_{i=2}^m\alpha_iy^{(i)}\tag{2.2} \end{aligned}                   α1​y(1)=−i=1∑m​αi​y(i)(两边同乘以y(1))α1​=−y(1)i=2∑m​αi​y(i)​(2.2)
由此我们可以看出                                       α                         1                                  \alpha_1               α1不可能是一个变量,因为它是右边一串常数的和;也就是说有了                              (                      2.1                      )                          (2.1)               (2.1)这个约束条件,就不可能将其中一个                                       α                         i                                  \alpha_i               αi视为变量,其余的视为常量。
那怎么办呢?既然一个不行,那就同时将两个视为变量,其余的视为常量。不失一般性,我们任选两个,记为                                       α                         1                              ,                               α                         2                                  \alpha_1,\alpha_2               α1​,α2​。由                              (                      2.1                      )                          (2.1)               (2.1)我们同样可以得到                              (                      2.2                      )                          (2.2)               (2.2)且还有:
                                                                                          α                                     1                                                           y                                                   (                                        1                                        )                                                           +                                               α                                     2                                                           y                                                   (                                        2                                        )                                                           =                                  −                                               ∑                                                   i                                        =                                        3                                                  m                                                           α                                     i                                                           y                                                   (                                        i                                        )                                                           =                                  ζ                                                                     (2.3)                                                 \alpha_1y^{(1)}+\alpha_2y^{(2)}=-\sum_{i=3}^m\alpha_iy^{(i)}=\zeta\tag{2.3}                  α1​y(1)+α2​y(2)=−i=3∑m​αi​y(i)=ζ(2.3)
此时我们再来看                              (                      2.3                      )                          (2.3)               (2.3),虽说                                       α                         1                                       y                                   (                            1                            )                                       +                               α                         2                                       y                                   (                            2                            )                                           \alpha_1y^{(1)}+\alpha_2y^{(2)}               α1y(1)+α2y(2)依旧等于一个常量,但是                                       α                         1                              ,                               α                         2                                  \alpha_1,\alpha_2               α1,α2确是可以自由变化的(注:两者事实上只有一个事变量,因为一个确定了,另一个也就确定了)。
由                              (                      2.3                      )                          (2.3)               (2.3)我们可以画出下面这条直线:
DSC0001.png

由此我们可以得到:




  • 根据约束条件                                   0                         ≤                                   α                            i                                  ≤                         C                              0\leq\alpha_i\leq C                  0≤αi≤C知,可行解位于‘盒子’                                   [                         0                         ,                         C                         ]                         ,                         [                         C                         ,                         0                         ]                              [0,C],[C,0]                  [0,C],[C,0]中;
  • 根据约束条件                                   (                         2.3                         )                              (2.3)                  (2.3)知,可行解同时又位于直线                                             α                            1                                            y                                       (                               1                               )                                            +                                   α                            2                                            y                                       (                               2                               )                                            =                         ζ                              \alpha_1y^{(1)}+\alpha_2y^{(2)}=\zeta                  α1y(1)+α2y(2)=ζ上;
  • 由2,3知,最优解位于盒子中的线段上;
  • 此图为                                             y                                       (                               1                               )                                            ,                                   y                                       (                               2                               )                                                 y^{(1)},y^{(2)}                  y(1),y(2)异号时的情况;



假设                              (                      2.1                      )                          (2.1)               (2.1)的初始可行解为                                       α                         1                                   o                            l                            d                                       ,                               α                         2                                   o                            l                            d                                           \alpha_1^{old},\alpha_2^{old}               α1old​,α2old​,最优解为                                       α                         1                                   n                            e                            w                                       ,                               α                         2                                   n                            e                            w                                           \alpha_1^{new},\alpha_2^{new}               α1new​,α2new​,并且假设在沿着约束(直线)方向未经剪切时                                       α                         2                                  \alpha_2               α2​的最优解为                                       α                         2                                   n                            e                            w                            ,                            u                            n                            c                                           \alpha_2^{new,unc}               α2new,unc​则有:
                                                                             L                                  ≤                                               α                                     2                                                   n                                        e                                        w                                                           ≤                                  H                                                                     (2.4)                                                 L\leq\alpha_2^{new}\leq H\tag{2.4}                  L≤α2new​≤H(2.4)
且当                                       y                                   (                            1                            )                                       ≠                               y                                   (                            2                            )                                           y^{(1)}\neq y^{(2)}               y(1)​=y(2)(即异号)时
                                                                             L                                  =                                  max                                  ⁡                                  (                                  0                                  ,                                               α                                     2                                                   o                                        l                                        d                                                           −                                               α                                     1                                                   o                                        l                                        d                                                           )                                  ,                                  H                                  =                                  min                                  ⁡                                  (                                  C                                  ,                                  C                                  +                                               α                                     2                                                   o                                        l                                        d                                                           −                                               α                                     1                                                   o                                        l                                        d                                                           )                                                                     (2.5)                                                 L = \max(0,\alpha_2^{old}-\alpha_1^{old}),H=\min(C,C+\alpha_2^{old}-\alpha_1^{old})\tag{2.5}                  L=max(0,α2old​−α1old​),H=min(C,C+α2old​−α1old​)(2.5)
当                                       y                                   (                            1                            )                                       =                               y                                   (                            2                            )                                           y^{(1)}=y^{(2)}               y(1)=y(2)时
                                                                             L                                  =                                  max                                  ⁡                                  (                                  0                                  ,                                               α                                     2                                                   o                                        l                                        d                                                           +                                               α                                     1                                                   o                                        l                                        d                                                           −                                  C                                  )                                  ,                                  H                                  =                                  min                                  ⁡                                  (                                  C                                  ,                                               α                                     2                                                   o                                        l                                        d                                                           +                                               α                                     1                                                   o                                        l                                        d                                                           )                                                                     (2.6)                                                 L = \max(0,\alpha_2^{old}+\alpha_1^{old}-C),H=\min(C,\alpha_2^{old}+\alpha_1^{old})\tag{2.6}                  L=max(0,α2old​+α1old​−C),H=min(C,α2old​+α1old​)(2.6)
举例:
DSC0002.png

                                                                                                                                              (                                                   α                                        1                                                       o                                           l                                           d                                                                ,                                                   α                                        2                                                       o                                           l                                           d                                                                )                                     =                                     (                                     4                                     ,                                     7                                     )                                                                                                                               ⟹                                                                                                               L                                     =                                     max                                     ⁡                                     0                                     ,                                     7                                     +                                     4                                     −                                     8                                     )                                     =                                     3                                     ;                                                                                                                               ⟹                                                                                                               H                                     =                                     min                                     ⁡                                     (                                     8                                     ,                                     7                                     +                                     4                                     )                                     =                                     8                                     ;                                                                                                                               ⟹                                                                                                               3                                     ≤                                                   α                                        2                                                       n                                           e                                           w                                                                ≤                                     8                                                                         \begin{aligned} &(\alpha_1^{old},\alpha_2^{old})=(4,7)\\[2ex] \implies &L = \max0,7+4-8)=3;\\[1ex] \implies &H =\min(8,7+4)=8;\\[1ex] \implies &3\leq \alpha_2^{new}\leq 8 \end{aligned}                   ⟹⟹⟹(α1old,α2old)=(4,7)L=max0,7+4−8)=3;H=min(8,7+4)=8;3≤α2new≤8
由                              (                      2.3                      )                          (2.3)               (2.3)知:
                                                                                          α                                     1                                              =                                  (                                  ζ                                  −                                               α                                     2                                                           y                                                   (                                        2                                        )                                                           )                                               y                                                   (                                        1                                        )                                                                                              (2.7)                                                 \alpha_1=(\zeta-\alpha_2y^{(2)})y^{(1)}\tag{2.7}                  α1​=(ζ−α2​y(2))y(1)(2.7)
因此,
                                                                             W                                  (                                  α                                  )                                  =                                  W                                  (                                               α                                     1                                              ,                                               α                                     2                                              ,                                  .                                  .                                  .                                  ,                                               α                                     m                                              )                                  =                                  W                                  (                                  (                                  ζ                                  −                                               α                                     2                                                           y                                                   (                                        2                                        )                                                           )                                               y                                                   (                                        1                                        )                                                           ,                                               α                                     2                                              ,                                  .                                  .                                  .                                               α                                     m                                              )                                                                     (2.8)                                                 W(\alpha)=W(\alpha_1,\alpha_2,...,\alpha_m)=W((\zeta-\alpha_2y^{(2)})y^{(1)},\alpha_2,...\alpha_m)\tag{2.8}                  W(α)=W(α1​,α2​,...,αm​)=W((ζ−α2​y(2))y(1),α2​,...αm​)(2.8)
由于我们是将                                       α                         3                              ,                      .                      .                      .                               α                         m                                  \alpha_3,...\alpha_m               α3,...αm视为常数的,所以此时                              W                      (                      α                      )                          W(\alpha)               W(α)实质上是一个仅关于                                       α                         2                                  \alpha_2               α2的二次函数                              W                      (                               α                         2                              )                          W(\alpha_2)               W(α2)。为什么是二次?由                              (                      2.1                      )                          (2.1)               (2.1)可知,其最高次数仅为2。所以                              W                      (                               α                         2                              )                          W(\alpha_2)               W(α2)又可以表示成                              a                      (                               α                         2                                       )                         2                              +                      b                               α                         2                              +                      c                          a(\alpha_2)^2+b\alpha_2+c               a(α2)2+bα2+c的形式。如果我们暂时先忽略条件                              (                      2.4                      )                          (2.4)               (2.4),然后令其导数为0,则很容易求得                                       α                         2                                  \alpha_2               α2未剪切的解                                       α                         2                                   n                            e                            w                            ,                            u                            n                            c                                           \alpha_2^{new,unc}               α2new,unc。
且剪切后的解为:
                                                                                               α                                        2                                                       n                                           e                                           w                                                                              {                                                                                                                             H                                                       ,                                                                                                                                                         i                                                       f                                                                             α                                                          2                                                                               n                                                             e                                                             w                                                             ,                                                             u                                                             n                                                             c                                                                                              >                                                       H                                                                                                                                                                                                       α                                                          2                                                                               n                                                             e                                                             w                                                             ,                                                             u                                                             n                                                             c                                                                                              ,                                                                                                                                                         i                                                       f                                                         L                                                       ≤                                                                           α                                                          2                                                                               n                                                             e                                                             w                                                             ,                                                             u                                                             n                                                             c                                                                                              ≤                                                       H                                                                                                                                                                                   L                                                       ,                                                                                                                                                         i                                                       f                                                                             α                                                          2                                                                               n                                                             e                                                             w                                                             ,                                                             u                                                             n                                                             c                                                                                              <                                                       L                                                                                                                                                                      \begin{aligned} \alpha_2^{new}\begin{cases}H,\;&if\;\alpha_2^{new,unc}>H\\[1ex] \alpha_2^{new,unc},\; &if\;L\leq\alpha_2^{new,unc}\leq H\\[1ex] L,\;&if\;\alpha_2^{new,unc}<L \end{cases} \end{aligned}                   α2new​⎩⎪⎪⎨⎪⎪⎧​H,α2new,unc​,L,​ifα2new,unc​>HifL≤α2new,unc​≤Hifα2new,unc​<L​​
最后,在计算得到                                       α                         2                                   n                            e                            w                                           \alpha_2^{new}               α2new​之后,就可以利用公式                              (                      2.3                      )                          (2.3)               (2.3)求得                                       α                         1                                   n                            e                            w                                           \alpha_1^{new}               α1new​
以上都是根据cs229-notes3.pdf整理的笔记,琢磨了很久还是没有彻底将SMO算法弄明白,姑且先放着,等到后续实在要用到再探究,因为在SVM这章着实停留得太久了,前前后后一个月。我相信一口气是吃不成一个胖子的,循序渐进。


关注下面的标签,发现更多相似文章