支持向量机与SMO算法详解

一、支持向量机基本型

  在一个二维平面上划分两种类型的样本点可能有多种方案,那么如何选择最优的划分方案呢?最直观的方法是选择一条距离两种样本点“最远的”直线。例如下图中的加粗分割线:
多个可行超平面
  拓展到高纬空间,划分不同样本的超平面则可以表示为: w T x + b = 0 w^Tx+b=0 wTx+b=0。那么如何寻找到距离两种样本最远的超平面呢,可以将平面 w T x + b = 0 w^Tx+b=0 wTx+b=0进行平移得到平面 w T x + b = ξ w^Tx+b=\xi wTx+b=ξ w T x + b = − ξ w^Tx+b=-\xi wTx+b=ξ使这两个平面正好与两种样本点相切。对平面的表达式进行变形:
{ w T x + b = + ξ w T x + b = − ξ ⇒ { w T ξ x + b ξ = + 1 w T ξ x + b ξ = − 1 \begin{cases} w^Tx+b=+\xi\\w^Tx+b=-\xi \end{cases} \Rightarrow \begin{cases} \frac{w^T}{\xi}x+\frac{b}{\xi}=+1\\\frac{w^T}{\xi}x+\frac{b}{\xi}=-1 \end{cases} {wTx+b=+ξwTx+b=ξ{ξwTx+ξb=+1ξwTx+ξb=1
  令 w T = w T ξ w^T=\frac{w^T}{\xi} wT=ξwT b = b ξ b=\frac{b}{\xi} b=ξb,则有下图:
支持向量
  其中,与超平面 w T x + b = 1 w^Tx+b=1 wTx+b=1 w T x + b = − 1 w^Tx+b=-1 wTx+b=1相切的样本点被称为支持向量,这两个平面我简称为支持平面,那么 r = 2 ∥ w ∥ r=\frac{2}{\|w\|} r=w2则为两个支持平面之间的间隔。
  想要使超平面 w T x + b = 0 w^Tx+b=0 wTx+b=0正确划分样本点,同时尽量使 r r r最大,则可以建立如下数学模型:
arg max ⁡ w , b 2 ∥ w ∥ s . t .    { w T x i + b ≥ + 1 , y i = + 1 w T x i + b ≤ − 1 , y i = − 1 \argmax_{w,b}\frac{2}{\|w\|}\\ s.t.\; \begin{cases} w^Tx_i+b≥+1,\qquad y_i=+1\\ w^Tx_i+b≤-1,\qquad y_i=-1 \end{cases} w,bargmaxw2s.t.{wTxi+b+1,yi=+1wTxi+b1,yi=1
  其中 s t st st条件可以简化为: y i ( w T x i + b ) ≥ 1 y_i(w^Tx_i+b)≥1 yi(wTxi+b)1。整个问题则可以简化为:
arg min ⁡ w , b ∥ w ∥ 2 2 s . t .    y i ( w T x i + b ) ≥ 1 , i = 1 , 2 , 3... , m \argmin_{w,b}\frac{\|w\|^2}{2}\\ s.t.\;y_i(w^Tx_i+b)≥1,i=1,2,3...,m w,bargmin2w2s.t.yi(wTxi+b)1,i=1,2,3...,m
  这便是支持向量机的基本数学模型。

二、问题求解
2.1 对偶问题

  通过对偶问题往往能有效解决一些复杂的问题,这里可以通过拉格朗日乘数法求出支持向量机基本型的对偶问题。
L ( w , b , α ) = ∥ w ∥ 2 2 + ∑ i = 1 m α i ( 1 − y i ( w T x i + b ) ) , α i ≥ 0 L(w,b,\alpha)=\frac{\|w\|^2}{2}+\sum_{i=1}^m{\alpha_i(1-y_i(w^Tx_i+b))},\alpha_i≥0 L(w,b,α)=2w2+i=1mαi(1yi(wTxi+b)),αi0
使拉格朗日函数 L L L分别对 w , b w,b w,b求偏导,可得:
∂ L ∂ w = w − ∑ i = 1 m α i y i x i ∂ L ∂ b = − ∑ i = 1 m α i y i \frac{\partial L}{\partial w}=w-\sum_{i=1}^m{\alpha_iy_ix_i}\qquad \frac{\partial L}{\partial b}=-\sum_{i=1}^m{\alpha_iy_i} wL=wi=1mαiyixibL=i=1mαiyi
令值为0,可得:
w = ∑ i = 1 m α i y i x i ∑ i = 1 m α i y i = 0 w=\sum_{i=1}^m{\alpha_iy_ix_i}\qquad \sum_{i=1}^m{\alpha_iy_i}=0 w=i=1mαiyixii=1mαiyi=0
代入拉格朗日函数:
L = 1 2 ∑ i = 1 m α i y i x i T ∑ i = 1 m α i y i x i + ∑ i = 1 m α i ( 1 − y i ( ∑ j = 1 m α j y j x j T x i + b ) ) = 1 2 ∑ i = 1 m ∑ j = 1 m α i y i x i T α j y j x j + ∑ i = 1 m α i − ∑ i = 1 m α i y i ( ∑ j = 1 m α j y j x j T x i + b ) = − 1 2 ∑ i = 1 m ∑ j = 1 m α i y i x i T α j y j x j + ∑ i = 1 m α i \begin{aligned} L &=\frac{1}{2}\sum^{m}_{i=1}{\alpha_iy_ix_i^T}\sum^{m}_{i=1}{\alpha_iy_ix_i}+\sum_{i=1}^m{\alpha_i(1-y_i( \sum_{j=1}^m{\alpha_jy_jx_j^T}x_i+b))}\\ &=\frac{1}{2}\sum^{m}_{i=1}\sum^{m}_{j=1}{\alpha_iy_ix_i^T\alpha_jy_jx_j}+\sum_{i=1}^m\alpha_i-\sum_{i=1}^m{\alpha_iy_i}(\sum_{j=1}^m{\alpha_jy_jx_j^Tx_i}+b)\\ &=-\frac{1}{2}\sum^{m}_{i=1}\sum^{m}_{j=1}{\alpha_iy_ix_i^T\alpha_jy_jx_j}+\sum_{i=1}^m\alpha_i \end{aligned} L=21i=1mαiyixiTi=1mαiyixi+i=1mαi(1yi(j=1mαjyjxjTxi+b))=21i=1mj=1mαiyixiTαjyjxj+i=1mαii=1mαiyi(j=1mαjyjxjTxi+b)=21i=1mj=1mαiyixiTαjyjxj+i=1mαi
固定 w , b w,b w,b,设 L ( w , b ) = max ⁡ L ( w , b , α ) L(w, b)=\max L(w,b,\alpha) L(w,b)=maxL(w,b,α),则有:
arg ⁡ min ⁡ w , b L ( w , b ) = arg ⁡ min ⁡ w , b max ⁡ α L ( w , b , α ) = arg ⁡ max ⁡ α min ⁡ w , b L ( w , b , α ) = arg max ⁡ α L ( α ) \arg\min_{w,b}L(w,b)=\arg\min_{w,b}\max_{\alpha}L(w,b,\alpha)=\arg\max_{\alpha}\min_{w,b}L(w,b,\alpha)=\argmax_{\alpha}L(\alpha) argw,bminL(w,b)=argw,bminαmaxL(w,b,α)=argαmaxw,bminL(w,b,α)=αargmaxL(α)

即,原问题可以转换为如下的对偶问题:
arg min ⁡ α ( 1 2 ∑ i = 1 m ∑ j = 1 m α i y i x i T α j y j x j − ∑ i = 1 m α i ) s . t . ∑ i = 1 m α i y i = 0 \argmin_{\alpha}(\frac{1}{2}\sum^{m}_{i=1}\sum^{m}_{j=1}{\alpha_iy_ix_i^T\alpha_jy_jx_j}-\sum_{i=1}^m\alpha_i)\\ s.t.\sum_{i=1}^m{\alpha_iy_i}=0 αargmin(21i=1mj=1mαiyixiTαjyjxji=1mαi)s.t.i=1mαiyi=0
由KKT条件第三条定理可得:
{ α ≥ 0 y i ( w T x i + b ) ≥ 1 ∑ i = 1 m α i ( 1 − y i ( w T x i + b ) ) = 0 \begin{cases} \alpha≥0\\ y_i(w^Tx_i+b)≥1\\ \sum_{i=1}^m{\alpha_i(1-y_i(w^Tx_i+b))}=0 \end{cases} α0yi(wTxi+b)1i=1mαi(1yi(wTxi+b))=0

2.2 使用SMO算法

  SMO算法,即序列最小优化算法,这是一种针对SVM的高效优化算法。其基本思想如下:
  想要优化整个 α \alpha α序列,则可以考虑先固定其余的 α \alpha α,剩余一个 α i \alpha_i αi,并通过求函数在 α i \alpha_i αi上的极值点来更新 α i \alpha_i αi,从而可以依次求解出所有的 α \alpha α
  然而,由于约束 ∑ i = 1 m α i y i = 0 \sum_{i=1}^m{\alpha_iy_i}=0 i=1mαiyi=0的存在,一旦固定 m − 1 m-1 m1 α \alpha α,那么剩下的那个 α i \alpha_i αi也将被固定。所以实际上SMO算法通常选取两个 α \alpha α,即 α i \alpha_i αi α j \alpha_j αj。通过不断地迭代选取和更新 α i \alpha_i αi α j \alpha_j αj直至收敛,即可完成优化。
  以上是通过SMO算法优化2.1中提出的对偶问题的基本思路,其具体数学推导过程将在四、SMO算法中详细介绍。

三、处理线性不可分的情况

  设想有如下情况:数据集中出现异常数据,导致少量样本点远离其同类样本点群,如果SVM还按照原本的规则进行划分,则可能找到一个狭窄的超平面导致过拟合,甚至还可能根本找不到可行的超平面,例如:
线性不可分
为了防止这种情况的产生,SVM采用了一些新的技巧。

3.1 软间隔与正则化

  引入软间隔的目的是为了允许SVM在一些样本上出错,即允许部分样本不服从以下约束:
y i ( w T x i + b ) ≥ 1 y_i(w^Tx_i+b)≥1 yi(wTxi+b)1
但是,不满足条件的样本应当尽可能少,所以优化函数可以改写为:
arg min ⁡ w , b 1 2 ∥ w ∥ 2 + λ ∑ i = 1 m l ( y i ( w T x i + b ) − 1 ) \argmin_{w,b}\frac{1}{2}\|w\|^2+\lambda\sum^{m}_{i=1}{l(y_i(w^Tx_i+b)-1)} w,bargmin21w2+λi=1ml(yi(wTxi+b)1)
l ( x ) = { 1 , if   x < 0 ; 0 , otherwise. l(x)= \begin{cases} 1,\qquad\text{if}\,x<0;\\0,\qquad\text{otherwise.} \end{cases} l(x)={1,ifx<0;0,otherwise.
  通过这样的“罚分”技巧以及正则化,可以有效控制SVM对错误样本的容忍度。但是函数 l ( x ) l(x) l(x)是一个阶跃函数,数学性质不好,所以一般使用如下函数来进行代替:

  • hinge损失函数: l h i n g e ( x ) = max ⁡ ( 0 , 1 − x ) l_{hinge}(x)=\max(0,1-x) lhinge(x)=max(0,1x)
  • 指数损失函数: l e x p ( x ) = e − x l_{exp}(x)=e^{-x} lexp(x)=ex
  • 对率损失函数: l l o g ( x ) = log ⁡ ( 1 + e − z ) l_{log}(x)=\log(1+e^{-z}) llog(x)=log(1+ez)
    代替损失函数
      根据上面的罚分函数,可以引入一个松弛变量 ξ i ≥ 0 \xi_i≥0 ξi0,然后将优化函数简写为:
    arg min ⁡ w , b 1 2 ∥ w ∥ 2 + C ∑ i = 1 m ξ i s . t .    y i ( w T x i + b ) ≥ 1 − ξ i ξ i ≥ 0 \argmin_{w,b}\frac{1}{2}\|w\|^2+C\sum^{m}_{i=1}\xi_i\\s.t.\;y_i(w^Tx_i+b)≥1-\xi_i\quad\xi_i≥0 w,bargmin21w2+Ci=1mξis.t.yi(wTxi+b)1ξiξi0
      同样使用拉格朗日乘数法,写出上述优化函数的拉格朗日函数:
    L ( w , b , ξ , α , μ ) = 1 2 ∥ w ∥ 2 + C ∑ i = 1 m ξ i + ∑ i = 1 m α i ( 1 − ξ i − y i ( w T x i + b ) ) − ∑ i = 1 m μ i ξ i α ≥ 0 ,    μ ≥ 0 L(w,b,\xi,\alpha,\mu)=\frac{1}{2}\|w\|^2+C\sum^{m}_{i=1}\xi_i+\sum^{m}_{i=1}{\alpha_i(1-\xi_i-y_i(w^Tx_i+b))-\sum^{m}_{i=1}{\mu_i\xi_i}}\\\alpha≥0,\;\mu≥0 L(w,b,ξ,α,μ)=21w2+Ci=1mξi+i=1mαi(1ξiyi(wTxi+b))i=1mμiξiα0,μ0
    令上式分别对 w w w b b b ξ \xi ξ的偏导为0可得:
    w = ∑ i = 1 m α i y i x i 0 = ∑ i = 1 m α i y i C = α i + μ i w=\sum^{m}_{i=1}{\alpha_iy_ix_i}\qquad0=\sum^{m}_{i=1}{\alpha_iy_i}\qquad C=\alpha_i+\mu_i w=i=1mαiyixi0=i=1mαiyiC=αi+μi
    将上面的三个式子代入原式可得原问题的对偶问题:
    arg min ⁡ α ( 1 2 ∑ i = 1 m ∑ j = 1 m α i α j y i y j x i T x j − ∑ i = 1 m α i ) s . t . ∑ i = 1 m α i y i = 0 ,    0 ≤ α ≤ C \argmin_\alpha(\frac{1}{2}\sum^{m}_{i=1}\sum^{m}_{j=1}{\alpha_i\alpha_jy_iy_jx_i^Tx_j}-\sum^{m}_{i=1}\alpha_i)\\ s.t. \sum^{m}_{i=1}{\alpha_iy_i}=0,\;0≤\alpha≤C αargmin(21i=1mj=1mαiαjyiyjxiTxji=1mαi)s.t.i=1mαiyi=0,0αC
    由KKT条件可得:
    { ξ ≥ 0 α ≥ 0 , μ ≥ 0 α i + μ i = C y i ( w T x i + b ) ≥ 1 − ξ i ∑ i = 1 m α i ( y i ( w T x i + b ) − 1 + ξ i ) = 0 ∑ i = 1 m μ i ξ i = 0 \begin{cases} \xi≥0\\ \alpha≥0,\quad\mu≥0\\ \alpha_i+\mu_i=C\\ y_i(w^Tx_i+b)≥1-\xi_i\\ \sum_{i=1}^m\alpha_i(y_i(w^Tx_i+b)-1+\xi_i)=0\\ \sum_{i=1}^m\mu_i\xi_i=0 \end{cases} ξ0α0,μ0αi+μi=Cyi(wTxi+b)1ξii=1mαi(yi(wTxi+b)1+ξi)=0i=1mμiξi=0
      通过观察可以发现,软间隔SVM的对偶问题和硬间隔的在形式上一致,只是约束条件由 α ≥ 0 \alpha≥0 α0变成了 0 ≤ α ≤ C 0≤\alpha≤C 0αC,其求解方法和硬间隔SVM一致。
3.2 核函数

  对于一个线性不可分的数据集,可以考虑通过函数映射将其映射到更高维度的空间内使之线性可分,例如:
空间映射
  事实上,只要原始空间是有限维,即特征数量有限,那么便一定存在一个更高维度的特征空间使样本线性可分。假设映射后的样本为 x ∗ x^* x,那么对偶问题就变成了:
arg min ⁡ α ( 1 2 ∑ i = 1 m ∑ j = 1 m α i α j y i y j x i ∗ T x j ∗ − ∑ i = 1 m α i ) s . t . ∑ i = 1 m α i y i = 0 ,    0 ≤ α ≤ C \argmin_\alpha(\frac{1}{2}\sum^{m}_{i=1}\sum^{m}_{j=1}{\alpha_i\alpha_jy_iy_jx_i^{*T}x_j^*}-\sum^{m}_{i=1}\alpha_i)\\ s.t. \sum^{m}_{i=1}{\alpha_iy_i}=0,\;0≤\alpha≤C αargmin(21i=1mj=1mαiαjyiyjxiTxji=1mαi)s.t.i=1mαiyi=0,0αC
  这里涉及了 x ∗ T x ∗ x^{*T}x^* xTx的运算,由于映射后的空间维度可能很高从而导致计算的代价极大,这里可以设计一个函数:
κ ( x i , x j ) = x i ∗ T x i ∗ \kappa(x_i,x_j)=x^{*T}_ix^*_i κ(xi,xj)=xiTxi
这个函数就叫做核函数。通过核函数,可以避免计算映射后的高维空间内积,这种方法叫做核技巧。于是对偶问题可以改写为:
arg min ⁡ α ( 1 2 ∑ i = 1 m ∑ j = 1 m α i α j y i y j κ ( x i , x j ) − ∑ i = 1 m α i ) s . t . ∑ i = 1 m α i y i = 0 ,    0 ≤ α ≤ C \argmin_\alpha(\frac{1}{2}\sum^{m}_{i=1}\sum^{m}_{j=1}{\alpha_i\alpha_jy_iy_j\kappa(x_i,x_j)}-\sum^{m}_{i=1}\alpha_i)\\ s.t. \sum^{m}_{i=1}{\alpha_iy_i}=0,\;0≤\alpha≤C αargmin(21i=1mj=1mαiαjyiyjκ(xi,xj)i=1mαi)s.t.i=1mαiyi=0,0αC
  下面列举一些常用的核函数:

名称表达式参数
线性核 κ ( x i , x j ) = x i T x j \kappa(x_i,x_j)=x_i^Tx_j κ(xi,xj)=xiTxj
多项式核 κ ( x i , x j ) = ( x i T x j ) d \kappa(x_i,x_j)=(x_i^Tx_j)^d κ(xi,xj)=(xiTxj)dd≥1为多项式的次数
高斯核(RBF核) κ ( x i , x j ) = exp ⁡ ( − ∥ x i − x j ∥ 2 2 σ 2 ) \kappa(x_i,x_j)=\exp(-\frac{\|x_i-x_j\|^2}{2\sigma^2}) κ(xi,xj)=exp(2σ2xixj2) σ > 0 \sigma>0 σ>0为高斯核的带宽
拉普拉斯核 κ ( x i . x j ) = exp ⁡ ( − ∥ x i − x j ∥ σ ) \kappa(x_i.x_j)=\exp(-\frac{\|x_i-x_j\|}{\sigma}) κ(xi.xj)=exp(σxixj) σ > 0 \sigma>0 σ>0
Sigmoid核 κ ( x i , x j ) = tanh ⁡ ( β x i T x j + θ ) \kappa(x_i,x_j)=\tanh(\beta x_i^Tx_j+\theta) κ(xi,xj)=tanh(βxiTxj+θ) β > 0 ,    θ < 0 \beta>0,\;\theta<0 β>0,θ<0

  除此之外,对于核函数 κ 1 , κ 2 \kappa_1,\kappa_2 κ1,κ2,有以下结论:

  • 核函数的线性组合也是核函数: κ 3 = α κ 1 + β κ 2 \kappa_3=\alpha\kappa_1+\beta\kappa_2 κ3=ακ1+βκ2
  • 核函数的直积也是核函数: κ 3 ( x , y ) = κ 1 ( x , y ) κ 2 ( x , y ) \kappa_3(x,y)=\kappa_1(x,y)\kappa_2(x,y) κ3(x,y)=κ1(x,y)κ2(x,y)
  • 对于任意函数 g g g,有: κ 3 ( x , y ) = g ( x ) κ 1 ( x , y ) g ( y ) \kappa_3(x,y)=g(x)\kappa_1(x,y)g(y) κ3(x,y)=g(x)κ1(x,y)g(y)
四、SMO算法

  先给出带核函数的软间隔SVM待优化问题:
arg min ⁡ α ( 1 2 ∑ i = 1 m ∑ j = 1 m α i α j y i y j κ ( x i , x j ) − ∑ i = 1 m α i ) s . t . ∑ i = 1 m α i y i = 0 ,    0 ≤ α ≤ C \argmin_\alpha(\frac{1}{2}\sum^{m}_{i=1}\sum^{m}_{j=1}{\alpha_i\alpha_jy_iy_j\kappa(x_i,x_j)}-\sum^{m}_{i=1}\alpha_i)\\ s.t. \sum^{m}_{i=1}{\alpha_iy_i}=0,\;0≤\alpha≤C αargmin(21i=1mj=1mαiαjyiyjκ(xi,xj)i=1mαi)s.t.i=1mαiyi=0,0αC
KKT条件如下:
{ ξ ≥ 0 α ≥ 0 , μ ≥ 0 α i + μ i = C y i ( w T x i + b ) ≥ 1 − ξ i ∑ i = 1 m α i ( y i ( w T x i + b ) − 1 + ξ i ) = 0 ∑ i = 1 m μ i ξ i = 0 \begin{cases} \xi≥0\\ \alpha≥0,\quad\mu≥0\\ \alpha_i+\mu_i=C\\ y_i(w^Tx_i+b)≥1-\xi_i\\ \sum_{i=1}^m\alpha_i(y_i(w^Tx_i+b)-1+\xi_i)=0\\ \sum_{i=1}^m\mu_i\xi_i=0 \end{cases} ξ0α0,μ0αi+μi=Cyi(wTxi+b)1ξii=1mαi(yi(wTxi+b)1+ξi)=0i=1mμiξi=0
  下面对 α i \alpha_i αi进行讨论:

  • α i = 0 \alpha_i=0 αi=0
    α i = 0 , α i + μ i = C ⇒ μ i > 0 μ i > 0 , ∑ i = 1 m μ i ξ i = 0 ⇒ ξ i = 0 ξ i = 0 , y i ( w T x i + b ) ≥ 1 − ξ i ⇒ y i ( w T x i + b ) ≥ 1 \begin{aligned} \alpha_i=0,\alpha_i+\mu_i=C\Rightarrow&\mu_i>0\\ \mu_i>0,\sum_{i=1}^m{\mu_i\xi_i}=0\Rightarrow&\xi_i=0\\ \xi_i=0,y_i(w^Tx_i+b)≥1-\xi_i\Rightarrow&y_i(w^Tx_i+b)≥1 \end{aligned} αi=0,αi+μi=Cμi>0,i=1mμiξi=0ξi=0,yi(wTxi+b)1ξiμi>0ξi=0yi(wTxi+b)1
  • α i = C \alpha_i=C αi=C
    α i = C , α i + μ i = C ⇒ μ i = 0 μ i = 0 , ∑ i = 1 m μ i ξ i = 0 ⇒ ξ i ≥ 0 α i = C , ∑ i = 1 m α i ( y i ( w T x i + b ) − 1 + ξ i ) = 0 ⇒ y i ( w T x i + b ) = 1 − ξ i ξ i ≥ 0 , y i ( w T x i + b ) = 1 − ξ i ⇒ y i ( w T x i + b ) ≤ 1 \begin{aligned} \alpha_i=C,\alpha_i+\mu_i=C\Rightarrow&\mu_i=0\\ \mu_i=0,\sum_{i=1}^m{\mu_i\xi_i}=0\Rightarrow&\xi_i≥0\\ \alpha_i=C,\sum_{i=1}^m\alpha_i(y_i(w^Tx_i+b)-1+\xi_i)=0\Rightarrow&y_i(w^Tx_i+b)=1-\xi_i\\ \xi_i≥0,y_i(w^Tx_i+b)=1-\xi_i\Rightarrow&y_i(w^Tx_i+b)≤1 \end{aligned} αi=C,αi+μi=Cμi=0,i=1mμiξi=0αi=C,i=1mαi(yi(wTxi+b)1+ξi)=0ξi0,yi(wTxi+b)=1ξiμi=0ξi0yi(wTxi+b)=1ξiyi(wTxi+b)1
  • 0 < α i < C 0<\alpha_i<C 0<αi<C
    0 < α i < C , α i + μ i = C ⇒ 0 < μ i < C 0 < μ i < C , ∑ i = 1 m μ i ξ i = 0 ⇒ ξ i = 0 0 < α i < C , ∑ i = 1 m α i ( y i ( w T x i + b ) − 1 + ξ i ) = 0 ⇒ y i ( w T x i + b ) = 1 − ξ i ξ i = 0 , y i ( w T x i + b ) = 1 − ξ i ⇒ y i ( w T x i + b ) = 1 \begin{aligned} 0<\alpha_i<C,\alpha_i+\mu_i=C\Rightarrow&0<\mu_i<C\\ 0<\mu_i<C,\sum_{i=1}^m{\mu_i\xi_i}=0\Rightarrow&\xi_i=0\\ 0<\alpha_i<C,\sum_{i=1}^m\alpha_i(y_i(w^Tx_i+b)-1+\xi_i)=0\Rightarrow&y_i(w^Tx_i+b)=1-\xi_i\\ \xi_i=0,y_i(w^Tx_i+b)=1-\xi_i\Rightarrow&y_i(w^Tx_i+b)=1 \end{aligned} 0<αi<C,αi+μi=C0<μi<C,i=1mμiξi=00<αi<C,i=1mαi(yi(wTxi+b)1+ξi)=0ξi=0,yi(wTxi+b)=1ξi0<μi<Cξi=0yi(wTxi+b)=1ξiyi(wTxi+b)=1
    总结出新的KKT条件如下:
    { y i ( w T x i + b ) ≥ 1 , α i = 0 y i ( w T x i + b ) = 1 , 0 < α i < C y i ( w T x i + b ) ≤ 1 , α i > C \begin{cases} y_i(w^Tx_i+b)≥1,\quad\alpha_i=0\\ y_i(w^Tx_i+b)=1,\quad0<\alpha_i<C\\ y_i(w^Tx_i+b)≤1,\quad\alpha_i>C \end{cases} yi(wTxi+b)1,αi=0yi(wTxi+b)=1,0<αi<Cyi(wTxi+b)1,αi>C
4.1 参数选择

  SMO算法需要从 α \alpha α序列中选择出合适的 α i \alpha_i αi α j \alpha_j αj进行迭代更新。由于只要有一个选中的 α \alpha α不满足KKT条件,目标函数就会减小,所以可以从 α \alpha α中选择出一个不满足KKT条件的作为 α i \alpha_i αi,然后再选择一个和 α i \alpha_i αi对应样本差距最大的 α \alpha α作为 α j \alpha_j αj。这个所谓“差距”的衡量方法是计算 ∣ y i ∗ − y i − ( y j ∗ − y j ) ∣ |y_i^*-y_i-(y_j^*-y_j)| yiyi(yjyj),原因通过后面的公式推导可以知道。

4.2 更新 α i , α j \alpha_i,\alpha_j αi,αj

  假设选择出的两个 α \alpha α分别为 α 1 , α 2 \alpha_1,\alpha_2 α1,α2,则原目标函数可以简化为:
arg min ⁡ α 1 , α 2 f ( α 1 , α 2 ) = 1 2 α 1 2 κ 11 + 1 2 α 2 2 κ 22 + α 1 α 2 y 1 y 2 κ 12 + α 1 y 1 u 1 + α 2 y 2 u 2 − α 1 − α 2 − u 3 s . t . α 1 y 1 + α 2 y 2 = c \argmin_{\alpha_1,\alpha_2}f(\alpha_1,\alpha_2)=\frac{1}{2}\alpha_1^2\kappa_{11}+\frac{1}{2}\alpha_2^2\kappa_{22}+\alpha_1\alpha_2y_1y_2\kappa_{12}+\alpha_1y_1u_1+\alpha_2y_2u_2-\alpha_1-\alpha_2-u_3\\ s.t.\alpha_1y_1+\alpha_2y_2=c α1,α2argminf(α1,α2)=21α12κ11+21α22κ22+α1α2y1y2κ12+α1y1u1+α2y2u2α1α2u3s.t.α1y1+α2y2=c
其中,
u 1 = ∑ i = 3 m α i y i κ 1 i u 2 = ∑ i = 3 m α i y i κ 2 i u 3 = ∑ i = 3 m α i c = − ∑ i = 3 m α i y i u_1=\sum_{i=3}^m{\alpha_iy_i\kappa_{1i}}\quad u_2=\sum_{i=3}^m{\alpha_iy_i\kappa_{2i}}\quad u_3=\sum_{i=3}^m\alpha_i\quad c=-\sum_{i=3}^m{\alpha_iy_i} u1=i=3mαiyiκ1iu2=i=3mαiyiκ2iu3=i=3mαic=i=3mαiyi
α 1 y 1 + α 2 y 2 = c \alpha_1y_1+\alpha_2y_2=c α1y1+α2y2=c两边乘 y 1 y_1 y1,可得: α 1 = y 1 c − α 2 y 1 y 2 \alpha_1=y_1c-\alpha_2y_1y_2 α1=y1cα2y1y2,代入目标函数:
arg min ⁡ α 2 f ( α 2 ) = 1 2 α 1 2 κ 11 + 1 2 α 2 2 κ 22 + α 1 α 2 y 1 y 2 κ 12 + α 1 y 1 u 1 + α 2 y 2 u 2 − α 1 − α 2 − u 3 = 1 2 κ 11 c 2 + 1 2 α 2 2 κ 11 − α 2 y 2 κ 11 c + 1 2 α 2 2 κ 22 + α 2 y 2 κ 12 c − α 2 2 κ 12 + u 1 c − α 2 y 2 u 1 + α 2 y 2 u 2 − y 1 c + α 2 y 1 y 2 − α 2 − u 3 = 1 2 ( κ 11 + κ 22 − 2 κ 12 ) α 2 2 + ( y 2 κ 12 c − y 2 κ 11 c − y 2 u 1 + y 2 u 2 + y 1 y 2 − 1 ) α 2 + c o n s t \begin{aligned} \argmin_{\alpha_2}f(\alpha_2)=&\frac{1}{2}\alpha_1^2\kappa_{11}+\frac{1}{2}\alpha_2^2\kappa_{22}+\alpha_1\alpha_2y_1y_2\kappa_{12}+\alpha_1y_1u_1+\alpha_2y_2u_2-\alpha_1-\alpha_2-u_3\\ =&\frac{1}{2}\kappa_{11}c^2+\frac{1}{2}\alpha_2^2\kappa_{11}-\alpha_2y_2\kappa_{11}c+\frac{1}{2}\alpha_2^2\kappa_{22}+\alpha_2y_2\kappa_{12}c-\alpha_2^2\kappa_{12}+u_1c-\alpha_2y_2u_1\\&+\alpha_2y_2u_2-y_1c+\alpha_2y_1y_2-\alpha_2-u_3\\ =&\frac{1}{2}(\kappa_{11}+\kappa_{22}-2\kappa_{12})\alpha_2^2+(y_2\kappa_{12}c-y_2\kappa_{11}c-y_2u_1+y_2u_2+y_1y_2-1)\alpha_2+const \end{aligned} α2argminf(α2)===21α12κ11+21α22κ22+α1α2y1y2κ12+α1y1u1+α2y2u2α1α2u321κ11c2+21α22κ11α2y2κ11c+21α22κ22+α2y2κ12cα22κ12+u1cα2y2u1+α2y2u2y1c+α2y1y2α2u321(κ11+κ222κ12)α22+(y2κ12cy2κ11cy2u1+y2u2+y1y21)α2+const
将函数 f ( α 2 ) f(\alpha_2) f(α2) α 2 \alpha_2 α2求导,
∂ f ∂ α 2 = ( κ 11 + κ 22 − 2 κ 12 ) α 2 + y 2 κ 12 c − y 2 κ 11 c − y 2 u 1 + y 2 u 2 + y 1 y 2 − 1 \frac{\partial f}{\partial\alpha_2}=(\kappa_{11}+\kappa_{22}-2\kappa_{12})\alpha_2+y_2\kappa_{12}c-y_2\kappa_{11}c-y_2u_1+y_2u_2+y_1y_2-1 α2f=(κ11+κ222κ12)α2+y2κ12cy2κ11cy2u1+y2u2+y1y21
设更新后的 α \alpha α α ∗ \alpha^* α,最终学得的SVM模型为 f ( x ) = w T x + b = ∑ i = 1 m α i y i κ ( x i , x ) + b f(x)=w^Tx+b=\sum_{i=1}^m\alpha_iy_i\kappa(x_i,x)+b f(x)=wTx+b=i=1mαiyiκ(xi,x)+b,误差则为 E i = f ( x i ) − y i E_i=f(x_i)-y_i Ei=f(xi)yi。同时,还有:
c = α 1 y 1 + α 2 y 2 = α 1 ∗ y 1 + α 2 ∗ y 2 u 1 = ∑ i = 3 m α i y i κ ( x i , x 1 ) = f ( x 1 ) − ∑ i = 1 2 α i y i κ i 1 − b u 2 = ∑ i = 3 m α i y i κ ( x i , x 2 ) = f ( x 2 ) − ∑ i = 1 2 α i y i κ i 2 − b c=\alpha_1y_1+\alpha_2y_2=\alpha_1^*y_1+\alpha_2^*y_2\\ u_1=\sum_{i=3}^m{\alpha_iy_i\kappa(x_i,x_1)}=f(x_1)-\sum_{i=1}^2{\alpha_iy_i\kappa_{i1}}-b\\ u_2=\sum_{i=3}^m{\alpha_iy_i\kappa(x_i,x_2)}=f(x_2)-\sum_{i=1}^2{\alpha_iy_i\kappa_{i2}}-b c=α1y1+α2y2=α1y1+α2y2u1=i=3mαiyiκ(xi,x1)=f(x1)i=12αiyiκi1bu2=i=3mαiyiκ(xi,x2)=f(x2)i=12αiyiκi2b
E i , c , u 1 , u 2 E_i,c,u_1,u_2 Ei,c,u1,u2代入导数,同时令导数为0,可得:
( κ 11 + κ 22 − 2 κ 12 ) α 2 ∗ = 1 − y 2 κ 12 c + y 2 κ 11 c + y 2 f ( x 1 ) − y 2 ∑ i = 1 2 α i y i κ i 1 − y 2 b − y 2 f ( x 2 ) + y 2 ∑ i = 1 2 α i y i κ i 2 + y 2 b − y 1 y 2 ⇒ ( κ 11 + κ 22 − 2 κ 12 ) α 2 ∗ = ( κ 11 + κ 22 − 2 κ 12 ) α 2 + y 2 ( f ( x 1 ) − y 1 − ( f ( x 2 ) − y 2 ) ) ⇒ ( κ 11 + κ 22 − 2 κ 12 ) α 2 ∗ = ( κ 11 + κ 22 − 2 κ 12 ) α 2 + y 2 ( E 1 − E 2 ) ⇒ α 2 ∗ = α 2 + y 2 E 1 − E 2 κ 11 + κ 22 − 2 κ 12 \begin{aligned} (\kappa_{11}+\kappa_{22}-2\kappa_{12})\alpha_2^*=&1-y_2\kappa_{12}c+y_2\kappa_{11}c+y_2f(x_1)-y_2\sum_{i=1}^2{\alpha_iy_i\kappa_{i1}}-y_2b-y_2f(x_2)+y_2\sum_{i=1}^2{\alpha_iy_i\kappa_{i2}}\\&+y_2b-y_1y_2\\ \Rightarrow(\kappa_{11}+\kappa_{22}-2\kappa_{12})\alpha_2^*=&(\kappa_{11}+\kappa_{22}-2\kappa_{12})\alpha_2+y_2(f(x_1)-y_1-(f(x_2)-y_2))\\ \Rightarrow(\kappa_{11}+\kappa_{22}-2\kappa_{12})\alpha_2^*=&(\kappa_{11}+\kappa_{22}-2\kappa_{12})\alpha_2+y_2(E_1-E_2)\\ \Rightarrow\alpha_2^*=&\alpha_2+y_2\frac{E_1-E_2}{\kappa_{11}+\kappa_{22}-2\kappa_{12}} \end{aligned} (κ11+κ222κ12)α2=(κ11+κ222κ12)α2=(κ11+κ222κ12)α2=α2=1y2κ12c+y2κ11c+y2f(x1)y2i=12αiyiκi1y2by2f(x2)+y2i=12αiyiκi2+y2by1y2(κ11+κ222κ12)α2+y2(f(x1)y1(f(x2)y2))(κ11+κ222κ12)α2+y2(E1E2)α2+y2κ11+κ222κ12E1E2
η = κ 11 + κ 22 − 2 κ 12 \eta=\kappa_{11}+\kappa_{22}-2\kappa_{12} η=κ11+κ222κ12,则有如下更新公式:
α 2 ∗ = α 2 + y 2 E 1 − E 2 η \alpha_2^*=\alpha_2+y_2\frac{E_1-E_2}{\eta} α2=α2+y2ηE1E2
从这个更新公式不难看出,之所以第二个参数要选择使 ∣ E 1 − E 2 ∣ |E_1-E_2| E1E2最大的,是为了让参数更新得更快。
  此时计算的参数没有考虑约束,下面讨论参数的范围:

  • y 1 = y 2 y_1=y_2 y1=y2:则有 α 1 + α 2 = α 1 ∗ + α 2 ∗ = c \alpha_1+\alpha_2=\alpha_1^*+\alpha_2^*=c α1+α2=α1+α2=c,进一步讨论:
    • i f : α 1 ∗ = 0 ⇒ α 2 m a x ∗ = min ⁡ ( C , α 1 + α 2 ) if:\alpha_1^*=0\Rightarrow\alpha_{2max}^*=\min(C,\alpha_1+\alpha_2) if:α1=0α2max=min(C,α1+α2)
    • i f : α 1 ∗ = C ⇒ α 2 m i n ∗ = max ⁡ ( 0 , α 1 + α 2 − C ) if:\alpha_1^*=C\Rightarrow\alpha_{2min}^*=\max(0,\alpha_1+\alpha_2-C) if:α1=Cα2min=max(0,α1+α2C)
  • y 1 ≠ y 2 y_1≠y_2 y1=y2:则有 α 1 − α 2 = α 1 ∗ − α 2 ∗ = c \alpha_1-\alpha_2=\alpha_1^*-\alpha_2^*=c α1α2=α1α2=c,进一步讨论:
    • i f : α 1 ∗ = 0 ⇒ α 2 m i n ∗ = max ⁡ ( 0 , α 2 − α 1 ) if:\alpha_1^*=0\Rightarrow\alpha_{2min}^*=\max(0,\alpha_2-\alpha_1) if:α1=0α2min=max(0,α2α1)
    • i f : α 1 ∗ = C ⇒ α 2 m a x ∗ = min ⁡ ( C , C + α 2 − α 1 ) if:\alpha_1^*=C\Rightarrow\alpha_{2max}^*=\min(C,C+\alpha_2-\alpha_1) if:α1=Cα2max=min(C,C+α2α1)

上面便是 α 2 ∗ \alpha_2^* α2的参数范围,进行修正后通过下述公式便可以计算出 α 1 ∗ \alpha_1^* α1
α 1 ∗ = α 1 y 1 + α 2 y 2 − α 2 ∗ y 2 y 1 \alpha_1^*=\frac{\alpha_1y_1+\alpha_2y_2-\alpha_2^*y_2}{y_1} α1=y1α1y1+α2y2α2y2

4.3 计算 w , b w,b w,b

   w w w的计算很简单,由于之间已经推导出公式: w = ∑ i = 1 m α i y i x i w=\sum^{m}_{i=1}{\alpha_iy_ix_i} w=i=1mαiyixi直接计算即可。

   b b b的计算通过KKT条件: y i ( w T x i + b ) = 1 ⇒ w T x i + b = y i ⇒ b = y i − w T x i y_i(w^Tx_i+b)=1\Rightarrow w^Tx_i+b=y_i\Rightarrow b=y_i-w^Tx_i yi(wTxi+b)=1wTxi+b=yib=yiwTxi可以计算得到。此KKT条件要求 0 < α i < C 0<\alpha_i<C 0<αi<C,所以 b b b的取值一般为:
b ∗ = { b 1 ∗ , 0 < α 1 < C b 2 ∗ , 0 < α 2 < C ( b 1 ∗ + b 2 ∗ ) / 2 , o t h e r s b^*= \begin{cases} b_1^*,0<\alpha_1<C\\ b_2^*,0<\alpha_2<C\\ (b_1^*+b_2^*)/2,others\\ \end{cases} b=b1,0<α1<Cb2,0<α2<C(b1+b2)/2,others

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值