4. 松弛向量与软间隔

前面讨论的情况都是样本分布都可以被超平面完美分割的情况,但是在现实任务中,经常会有难以完美划分的情况,就算正好完美划分了样本点,也很难判断这个结果是不是过拟合造成的。
支持向量机(SVM)和python实现(二)
(图来自https://blog.csdn.net/zouxy09/article/details/17291543
上左图中如果我们要考虑点A,得到的超平面就是红线那样,上右图中若是要考虑在class2中的红点,得到的超平面就是蓝线那样,如此精确的划分每个点很容易导致模型过拟合,为了缓解这个问题,我们引入软间隔的概念,软间隔允许某些样本不满足约束:

(4.1)yi(ωTxi+b)1

于是我们修改了优化目标:
(4.2)min.12ω2+Ci=1ml0/1(yi(ωTxi+b)1)

其中C>0是一个常数,l0/1(z)是“0/1损失函数”
l0/1(z)={1,if z<00,otherwise

当C无穷大时,式(4.2)后面的部分迫使所有样本均满足式(4.1)的约束条件,式(4.2)则等价于(1.2),也就是说C越大,拟合非线性的能力越强,同时过拟合的风险也越高。引入l0/1(z)的目的是,我们只希望那些不满足(4.1)约束条件的点被算入优化目标中,但是l0/1(z)非凸,非连续,导致这样的目标函数不容易求解,我们可以使用近似的曲线替代,常用的损失函数为hinge函数:
lhinge(z)=max(0,1z)

若采用hinge损失函数,则式(4.2)变成了:
(4.3)min.12ω2+Ci=1mmax(0,1yi(ωTxi+b))

引入松弛变量ξi0后,原来的约束条件就变为:
(4.4){yi(ωTxi+b)1ξiξi0

同时式(4.3)也可以改写为
(4.5)min.12ω2+Ci=1mξi

我们重新引入拉格朗日乘子αi0    i=1,2,...,m,可得:
L(ω,b,α,ξ,β)=12ω2+Ci=1mξi+i=1mαi(1ξi+yi(ωTφ(xi)+b))i=1mβiξi

ω,b,ξi分别求偏导,得:
{ω=i=1mαiyiφ(xi)0=i=1mαiyiC=αi+βi

将结果带入原式得对偶问题:
(4.6)max.i=1mαi12i=1,y=1mαiαjyiyjκ(xi,xj)s.t.  i=1mαiyi=0     0αiC

和前面说的KKT条件类似,这个对偶问题同样需要满足以下KKT条件:
(4.7){αi0βi0yif(xi)1+ξi0αi(yif(xi)1+ξi)=0ξi0βiξi=0

5. SMO算法

SMO(Sequential Minimal Optimization)被用来求解SVM问题,该算法的思想是先固定αi以外的参数,然后求αi上的极值,由于存在(4.6)中的约束,我们可以先固定2个变量αiαj,然后利用约束条件i=1mαiyi=0可以用αi代表αj,然后更新αiαj,再重新选择2个参数,直到收敛。
注意到只需选取的αiαj中有一个不满足KKT(4.7)条件,目标函数(4.6)就会在迭代后变大,因此我们要根据KKT条件来选择要更新的αiαj,下面我们分析一下如何选取:

  • αi=0时,βi=C,则ξi=0,得yif(xi)1
  • αi=C时,βi=0,则ξi0,且yif(xi)1+ξi=0,得yif(xi)1
  • 0<αi<C时,0<βi<C,则ξi=0,且yif(xi)1+ξi=0,得yif(xi)=1

我们在编程时只需要选择的αi对应的yi,xi违背上面的约束就可以让目标函数变大。

假如我们根据违背KKT条件选择了α1,α2,则:

(5.1)y1α1+y2α2=NN=i1,2myiαi

因为yiyi=1,则有:
(5.2)α1=Ny1y1y2α2

αiαj代入式(4.6),得:
(5.3)W(α1,α2)=α1+α212α12y12κ1112α22y22κ22i=3mα1αiy1yiκ(1,i)i=3mα2αiy2yiκ(2,i)+C

C为一些常数的和
我们令v1=i=3mα1αiy1yiκ(1,i),v2=i=3mα2αiy2yiκ(2,i),则式(5.3)改为:
W(α1,α2)=α1+α212α12y12κ1112α22y22κ22α1y1v1α2y2v2+C

代入式(5.2)得
(5.4)W(α2)=12y12(Ny1y1y2α2)2κ1,112α22y22κ2,2(Ny1y1y2α2)α2y1y2κ1,2(Ny1y1y2α2)y1v1α2y2v2+α1+α2+C=12(Ny2α2)2κ1,212α22κ1,2(y2Nα2α22)κ1,2(Ny2α2)v1α2y2v2+Ny1y1y2α2+α2+C

对(5.4)求导得0:
(5.5)W(α2)α2=Ny2κ1,1α2κ1,1α2k2,2y2Nκ1,2+2α2κ1,2+y2v1y2v2y1y2+1=(κ1,1+κ2,22κ1,2)α2+κ1,1Ny2κ1,2Ny2+v1y2v2y2y1y2+1=0

由于f(x)=i=1mαiyiκ(xi,x)+b,则有:
v1=i=3mαiyiκi,1=f(x1)α1oldy1κ1,1α2oldy2κ1,2bv2=f(x2)α1oldy1κ1,2α2oldy2κ2,2b

又因为α1old=(Nα2oldy2)y1,则:
v1v2=f(x1)f(x2)κ1,1N+κ1,2N+(κ1,1+κ2,22κ1,2)α2oldy2

代入(5.5):
(5.6)W(α2)α2=(κ1,1+κ2,22κ1,2)α2new+(κ1,1+κ2,22κ1,2)α2old+y2(y2y1+f(x1)f(x2))

η=κ1,1+κ2,22κ1,2E=f(x)y,则:
W(α2)α2=ηα2new+ηα2old+y2(E2E1)=0

(5.7)α2new=α2old+y2(E1E2)η

这样我们就获得了新的α2值,但是不要忘记,α是存在约束的:0αC
支持向量机(SVM)和python实现(二)
(图来自https://blog.csdn.net/u011734144/article/details/81233553
y1y2α2的上下界为:

  • 下界:L=max(0,α2oldα1old)
  • 上界:H=min(C,C+α2oldα1old)

y1=y2α2的上下界为:

  • 下界:L=max(0,α1old+α2oldC)
  • 上界:H=max(C,α1old+α2old)
    这样我们就能获得约束后的α2new
    α2new/constraint={Hα2new>Hα2newLα2newHLα2new<L

    然后我们就可以根据α1oldy1+α2oldy2=α1newy1+α2newy2计算α1new了:
    α1new=alpha1old+y1y2(alpha2oldalpha2new)

    现在我们获取了新的α1new,α2new,那么就可以更新b了,而我们只能根据yi(ωTxi+b)=1来求b,这个等式成立的条件为xi是支持向量,即0<αi<C,将α1new代入上面的等式,两边同时乘以y1,有:
    i=1mαiyiκi,1+b=y1

    则b的值为:
    b1new=y1i=3mαiyiκi,1α1newy1κ1,1α2newy2κ1,2

    其中等式后面前两部分可以表示为:
    y1i=3mαiyiκi,1=E1+α1oldy1κ1,1+α2oldy2κ1,2+bold

    那么最终b1new可以表示为:
    b1new=boldE1y1κ1,1(α1newα1old)y2κ1,2(α2newα2old)

    同理b2new可以表示为
    b2new=boldE2y1κ1,2(α1newα1old)y2κ2,2(α2newα2old)

    b1b2都有效时他们是相等的,即b1new=b2new=bnew,当α1,2new=0或C时SMO选择他们的中点作为新的阈值:
    bnew=b1new+b2new2

传送门

支持向量机(SVM)和python实现(一)https://blog.csdn.net/z962013489/article/details/82499063
支持向量机(SVM)和python实现(三)https://blog.csdn.net/z962013489/article/details/82622036

相关文章:

  • 2021-11-30
  • 2021-11-30
  • 2021-11-30
  • 2021-11-19
  • 2021-12-05
  • 2021-05-04
猜你喜欢
  • 2021-06-28
  • 2021-07-05
  • 2021-10-20
  • 2022-12-23
  • 2021-10-17
  • 2021-08-20
相关资源
相似解决方案