SVM笔记之SMO算法
目录
- SMO序列最小最优化算法
- 变量更新
- 更新变量的选取
- bbb和误差EiE_iEi的计算
SMO序列最小最优化算法
SMO算法实际上用于SVM对偶问题求解中α∗\boldsymbol{\alpha^*}α∗的确定。根据之前的推导,当求得α∗\boldsymbol{\alpha^*}α∗使得对偶问题取得最大值时,即对偶问题取得最优解,同样的也是原始问题的最优解。SMO方法事实上和坐标上升/梯度下降的方法有所相似,都是固定部分变量,更新所需要的变量,不断迭代直至收敛的一种方法。
变量更新
首先,需要更新参数。为方便,注意到maxL(w,b,ξ,α,β)=max∑i=1nαi−12∑i=1n∑j=1nαiαjyiyjxi⊤xj\max L(\boldsymbol{w}, b,\boldsymbol{\xi},\boldsymbol{\alpha},\boldsymbol{\beta}) = \max\sum_{i=1}^{n}\alpha_i -\frac{1}{2}\sum_{i=1}^{n}\sum_{j=1}^{n}\alpha_i\alpha_j y_i y_j \boldsymbol{x_i}^\top \boldsymbol{x_j}maxL(w,b,ξ,α,β)=max∑i=1nαi−21∑i=1n∑j=1nαiαjyiyjxi⊤xj中存在xi⊤xj\boldsymbol{x_i}^\top \boldsymbol{x_j}xi⊤xj在后续的算法过程中将其写成内积的形式,记为Ki,jK_{i, j}Ki,j(其实是前面提到过的核函数的形式…后续再进行引入)。
假设从(α1,α2)(\alpha_1, \alpha_2)(α1,α2)开始,将其他变量固定,因此需要保留与α1\alpha_1α1和α2\alpha_2α2有关的变量,设M为与α1\alpha_1α1和 α2\alpha_2α2无关的变量,由于固定,将其视作常数。此外,约束也要转换为对α1\alpha_1α1和α2\alpha_2α2的约束。得到如下的有约束的关于α1\alpha_1α1和 α2\alpha_2α2的函数:
W(α1,α2)=α1+α2−12α12y12K1,1−12α22y22K2,2−α1α2y1y2K1,2−α1y1∑i=3nαiyiK1,i−α2y2∑i=3nαiyiK2,i+∑i=3nαi−12∑i=3n∑j=3nαiαjyiyjKi,js.t.0≤α1≤C0≤α2≤C∑inαiyi=0(1)\begin{aligned} W(\alpha_1, \alpha_2)\ =&\alpha_1+\alpha_2-\frac{1}{2}\alpha_1^2y_1^2K_{1,1}- \frac{1}{2}\alpha_2^2y_2^2K_{2,2}-\alpha_1\alpha_2y_1y_2K_{1,2}-\alpha_1y_1\sum_{i=3}^{n}\alpha_iy_iK_{1,i}\\ &-\alpha_2y_2\sum_{i=3}^{n}\alpha_iy_iK_{2,i} + \sum_{i=3}^{n}\alpha_i - \frac{1}{2}\sum_{i=3}^{n}\sum_{j=3}^{n}\alpha_i\alpha_jy_iy_jK_{i, j}\\ s.t.\ \quad &0 \le \alpha_1 \le C\\ &0 \le \alpha_2 \le C\\ &\sum_{i}^{n}\alpha_iy_i=0\tag1 \end{aligned} W(α1,α2) =s.t. α1+α2−21α12y12K1,1−21α22y22K2,2−α1α2y1y2K1,2−α1y1i=3∑nαiyiK1,i−α2y2i=3∑nαiyiK2,i+i=3∑nαi−21i=3∑nj=3∑nαiαjyiyjKi,j0≤α1≤C0≤α2≤Ci∑nαiyi=0(1)
其中,为表示方便,将与α1\alpha_1α1和α2\alpha_2α2无关的部分用字母表示,即记:
v1=∑i=3nαiyiK1,iv2=∑i=3nαiyiK2,iM=∑i=3nαi−12∑i=3n∑j=3nαiαjyiyjKi,j\begin{aligned} v_1 &= \sum_{i=3}^{n}\alpha_iy_iK_{1,i}\\ v_2 &= \sum_{i=3}^{n}\alpha_iy_iK_{2,i}\\ M &= \sum_{i=3}^{n}\alpha_i - \frac{1}{2}\sum_{i=3}^{n}\sum_{j=3}^{n}\alpha_i\alpha_jy_iy_jK_{i, j} \end{aligned} v1v2M=i=3∑nαiyiK1,i=i=3∑nαiyiK2,i=i=3∑nαi−21i=3∑nj=3∑nαiαjyiyjKi,j
则函数1可写为:
W(α1,α2)=α1+α2−12α12y12K1,1−12α22y22K2,2−α1α2y1y2K1,2−α1y1v1−α2y2v2+M(2)\begin{aligned} W(\alpha_1, \alpha_2)\ =\alpha_1+\alpha_2-\frac{1}{2}\alpha_1^2y_1^2K_{1,1}- \frac{1}{2}\alpha_2^2y_2^2K_{2,2}-\alpha_1\alpha_2y_1y_2K_{1,2}-\alpha_1y_1v_1-\alpha_2y_2v_2 + M\tag2 \end{aligned} W(α1,α2) =α1+α2−21α12y12K1,1−21α22y22K2,2−α1α2y1y2K1,2−α1y1v1−α2y2v2+M(2)
此时存在α1\alpha_1α1和α2\alpha_2α2两个变量,需要根据两个变量之间的关系更新变量的值。设如公式1的优化问题初始的可行解为(α1old,α2old)(\alpha_1^{old},\alpha_2^{old})(α1old,α2old),最优解为α1new,α2new)\alpha_1^{new},\alpha_2^{new})α1new,α2new)需要确定可行解和最优解的范围。
而根据之前的约束,可以得到α1\alpha_1α1和α2\alpha_2α2之间的关系如公式3所示,并且可绘制出如下图所示的在定义域内的关系图。
α1y1+α2y2=−∑i=3nαiyi=ζ⇒α1y1y2+α2y22=y2ζ⇒α1=−y1y2α2+y1ζ(3)\begin{aligned} &\alpha_1y_1+\alpha_2y_2 = -\sum_{i=3}^{n}\alpha_iy_i = \zeta \\ &\Rightarrow \alpha_1y_1y_2+\alpha_2y_2^2 = y_2\zeta\\ &\Rightarrow \alpha_1 = -y_1y_2\alpha_2 + y_1\zeta\tag3 \end{aligned} α1y1+α2y2=−i=3∑nαiyi=ζ⇒α1y1y2+α2y22=y2ζ⇒α1=−y1y2α2+y1ζ(3)
由图可知,最优值位于正方形内的一条线段上,又因为α1\alpha_1α1和α2\alpha_2α2之间存在关系,优化问题可以从原来的多变量优化问题转换为单变量的最优化问题。并且假设在上述两种情况中下界为L,上界为H,则,最优解α1new\alpha_1^{new}α1new的取值范围为:
L≤α1new≤HL \le \alpha_1^{new} \le H L≤α1new≤H
其中,若y1y2=−1y_1y_2 = -1y1y2=−1,则L=max{0,yiζ},H=min{C,C+yiζ}L = \max\{0, y_i\zeta\}, H = \min\{C, C+y_i\zeta\}L=max{0,yiζ},H=min{C,C+yiζ},转换成用初始的可行解表示为L=max{0,α1old−α2old},H=min{C,C+α1old−α2old}L = \max\{0, \alpha_1^{old} - \alpha_2^{old}\}, H = \min\{C, C+\alpha_1^{old} - \alpha_2^{old}\}L=max{0,α1old−α2old},H=min{C,C+α1old−α2old};若y1y2=1y_1y_2 = 1y1y2=1,则L=max{0,α1old+α2old−C},H=min{C,α1old+α2old}L = \max\{0, \alpha_1^{old}+\alpha_2^{old}-C\}, H = \min\{C, \alpha_1^{old}+\alpha_2^{old}\}L=max{0,α1old+α2old−C},H=min{C,α1old+α2old}。
确定了最优值的上下界后,将α1=−y1y2α2+y1ζ\alpha_1 = -y_1y_2\alpha_2 + y_1\zetaα1=−y1y2α2+y1ζ代入原公式,将其转换为单变量的优化问题。
W(α2)=−y1y2α2+y1ζ+α2−12(−y1(y2α2−ζ)))2y12K1,1−12α22y22K2,2+(y1y2α2−y1ζ)α2y1y2K1,2+(y1y2α2−y1ζ)y1v1−α2y2v2+M=−y1y2α2+y1ζ+α2−12y12(y22α22−2y2ζ+ζ2)y12K1,1−12α22y2K2,2+y12y22α22K1,2−y12y2ζα2K1,2+y12y2α2v1−α2y2v2−y12ζv1+M=α22(−12K1,1−12K2,2+K1,2)+α2y2(y2−y1+ζK1,1−ζK1,2+v1−v2)−y12ζv1+M(4)\begin{aligned} W(\alpha_2) =&-y_1y_2\alpha_2+y_1\zeta+\alpha_2-\frac{1}{2}(-y_1(y_2\alpha_2-\zeta)))^2y_1^2K_{1,1}-\frac{1}{2}\alpha_2^2y_2^2K_{2,2}\\ &+(y_1y_2\alpha_2-y_1\zeta)\alpha_2y_1y_2K_{1,2}+(y_1y_2\alpha_2-y_1\zeta)y_1v_1-\alpha_2y_2v_2+M\\ =&-y_1y_2\alpha_2+y_1\zeta+\alpha_2-\frac{1}{2}y_1^2(y_2^2\alpha_2^2-2y_2\zeta+\zeta^2)y_1^2K_{1,1}-\frac{1}{2}\alpha_2^2y_2K_{2,2}\\ &+y_1^2y_2^2\alpha_2^2K_{1,2}-y_1^2y_2\zeta\alpha_2K_{1,2}+y_1^2y_2\alpha_2v_1-\alpha_2y_2v_2-y_1^2\zeta v1+M\\ =&\alpha_2^2(-\frac{1}{2}K_{1,1}-\frac{1}{2}K_{2,2}+K_{1,2})+\alpha_2y_2(y_2-y_1+\zeta K_{1,1}-\zeta K_{1,2}+v_1-v_2)\\ &-y_1^2\zeta v_1+M\tag4 \end{aligned} W(α2)===−y1y2α2+y1ζ+α2−21(−y1(y2α2−ζ)))2y12K1,1−21α22y22K2,2+(y1y2α2−y1ζ)α2y1y2K1,2+(y1y2α2−y1ζ)y1v1−α2y2v2+M−y1y2α2+y1ζ+α2−21y12(y22α22−2y2ζ+ζ2)y12K1,1−21α22y2K2,2+y12y22α22K1,2−y12y2ζα2K1,2+y12y2α2v1−α2y2v2−y12ζv1+Mα22(−21K1,1−21K2,2+K1,2)+α2y2(y2−y1+ζK1,1−ζK1,2+v1−v2)−y12ζv1+M(4)
因为要求最优解,因此对α2\alpha_2α2求偏导得到:
∂W(α2)∂α2=α2(−K1,1−K2,2+2K1,2)+y2(y2−y1+ζK1,1−ζK1,2+v1−v2)=0⇒α2new′(K1,1+K2,2−2K1,2)=y2(y2−y1+ζK1,1−ζK1,2+v1−v2)(5)\begin{aligned} \frac{\partial W(\alpha_2)}{\partial \alpha_2} &= \alpha_2(-K_{1,1}-K_{2,2}+2K_{1,2})+y_2(y_2-y_1+\zeta K_{1,1}-\zeta K_{1,2}+v_1-v_2) = 0 \\ &\Rightarrow \alpha_2^{new'}(K_{1,1}+K_{2,2}-2K_{1,2}) = y_2(y_2-y_1+\zeta K_{1,1}-\zeta K_{1,2}+v_1-v_2)\tag5 \end{aligned} ∂α2∂W(α2)=α2(−K1,1−K2,2+2K1,2)+y2(y2−y1+ζK1,1−ζK1,2+v1−v2)=0⇒α2new′(K1,1+K2,2−2K1,2)=y2(y2−y1+ζK1,1−ζK1,2+v1−v2)(5)
由于我们需要利用初始的可行解求得最优解,因此需要将等式右边转换成带可行解的,方便更新的式子。首先将ζ=α1y1+α2y2\zeta = \alpha_1y_1+\alpha_2y_2ζ=α1y1+α2y2代入公式中。
α2new(K1,1+K2,2−K1,2)=y2(y2−y1+(α1y1+α2y2)K1,1+(α1y1−α2y2)K1,2+v1−v2)=y2(y2−y1+α1oldy1(K1,1−K1,2)+α2oldy2(K1,1−K1,2)+v1−v2)(6)\begin{aligned} \alpha_2^{new}(K_{1,1}+K_{2,2}-K_{1,2}) &= y_2(y_2-y_1+(\alpha_1y_1+\alpha_2y_2)K_{1,1}+(\alpha_1y_1-\alpha_2y_2)K_{1,2}+v_1-v_2)\\ &=y_2(y_2-y_1+\alpha_1^{old}y_1(K_{1,1}-K_{1,2})+\alpha_2^{old}y_2(K_{1,1}-K_{1,2})+v_1-v_2)\tag6 \end{aligned} α2new(K1,1+K2,2−K1,2)=y2(y2−y1+(α1y1+α2y2)K1,1+(α1y1−α2y2)K1,2+v1−v2)=y2(y2−y1+α1oldy1(K1,1−K1,2)+α2oldy2(K1,1−K1,2)+v1−v2)(6)
看到这个式子,尤其是右边也有K1,1K_{1,1}K1,1和K1,2K_{1,2}K1,2应该考虑如果要是有K2,2K_{2,2}K2,2就好了,说不定能够凑够系数,把右边的系数约去呢(数学敏感性)!那么这个K2,2K_{2,2}K2,2哪里来呢?又注意到我们的v1v_1v1和v2v_2v2原来是为了方便表示,其实也是有原因的。
我们将所构建的模型是得到的预测值记为f(x)f(x)f(x),并将之前求得的w\boldsymbol{w}w表达式代入模型表达式中得到:
f(x)=w⊤x+b=∑i=1nαiyix⊤x+b=∑i=1nαiyiKxi,x+b(7)\begin{aligned} f(\boldsymbol{x}) &= \boldsymbol{w^\top}\boldsymbol{x}+b\\ &=\sum_{i=1}^{n}\alpha_iy_i\boldsymbol{x^\top}\boldsymbol{x}+b\\ &=\sum_{i=1}^{n}\alpha_iy_iK_{x_i, x}+b\tag7 \end{aligned} f(x)=w⊤x+b=i=1∑nαiyix⊤x+b=i=1∑nαiyiKxi,x+b(7)
f(x1)=∑i=1nαiyiKi,1+b=∑i=1nαiyiKi,1+b(8)\begin{aligned} f(\boldsymbol{x_1}) &=\sum_{i=1}^{n}\alpha_iy_iK_{i, 1}+b\\ &=\sum_{i=1}^{n}\alpha_iy_iK_{i, 1}+b\tag8 \end{aligned} f(x1)=i=1∑nαiyiKi,1+b=i=1∑nαiyiKi,1+b(8)
f(x2)=∑i=1nαiyiKi,1+b=∑i=1nαiyiKi,2+b(9)\begin{aligned} f(\boldsymbol{x_2}) &=\sum_{i=1}^{n}\alpha_iy_iK_{i, 1}+b\\ &=\sum_{i=1}^{n}\alpha_iy_iK_{i, 2}+b\tag9 \end{aligned} f(x2)=i=1∑nαiyiKi,1+b=i=1∑nαiyiKi,2+b(9)
根据公式7-9其实就可以从v1v_1v1和v2v_2v2中得到我们想要的。
v1=f(x1)−α1y1K1,1−α2y2K1,2v2=f(x2)−α1y1K1,2−α2y2K2,2(10)\begin{aligned} v_1=f(\boldsymbol{x_1}) - \alpha_1y_1K_{1,1}-\alpha_2y_2K_{1,2}\\ v_2=f(\boldsymbol{x_2}) - \alpha_1y_1K_{1,2}-\alpha_2y_2K_{2,2}\tag{10} \end{aligned} v1=f(x1)−α1y1K1,1−α2y2K1,2v2=f(x2)−α1y1K1,2−α2y2K2,2(10)
将v1v_1v1和v2v_2v2的表达式公式10代入公式6中得到α2new\alpha_2^{new}α2new并可以根据α1\alpha_1α1和α2\alpha_2α2之间的关系得到α1new\alpha_1^{new}α1new。此外,预测值与实际值的差即为误差,我们将EiE_iEi记为f(xi)−yif(\boldsymbol{x_i})-y_if(xi)−yi。
α2new′(K1,1+K2,2−2K1,2)=y2(y2−y1+α1oldy1(K1,1−K1,2)+α2oldy2(K1,1−K1,2)+f(x1)−α1y1K1,1−α2y2K1,2−f(x2)+α1y1K1,2+α2y2K2,2)=y2(y2−y1+f(x1)−f(x2)+α2oldy2(K1,1+K2,2−2K1,2))(11)\begin{aligned} \alpha_2^{new'}(K_{1,1}+K_{2,2}-2K_{1,2}) =& y_2(y_2-y_1+\alpha_1^{old}y_1(K_{1,1}-K_{1,2})+\alpha_2^{old}y_2(K_{1,1}-K_{1,2})+f(x_1)\\ &- \alpha_1y_1K_{1,1}-\alpha_2y_2K_{1,2}-f(x_2) + \alpha_1y_1K_{1,2}+\alpha_2y_2K_{2,2})\\ =&y_2(y_2-y_1+f(x_1)-f(x_2)+\alpha_2^{old}y_2(K_{1,1}+K_{2,2}-2K_{1,2}))\tag{11} \end{aligned} α2new′(K1,1+K2,2−2K1,2)==y2(y2−y1+α1oldy1(K1,1−K1,2)+α2oldy2(K1,1−K1,2)+f(x1)−α1y1K1,1−α2y2K1,2−f(x2)+α1y1K1,2+α2y2K2,2)y2(y2−y1+f(x1)−f(x2)+α2oldy2(K1,1+K2,2−2K1,2))(11)
因此,可以得到α2new\alpha_2^{new}α2new的值如下:
α2new′=α2old+(f(x1)−y1)−(f(x2)−y2)K1,1+K2,2−2K1,2=α2old+(E1−E2)K1,1+K2,2−2K1,2(12)\begin{aligned} \alpha_2^{new'} &= \alpha_2^{old} + \frac{(f(x_1)-y_1)-(f(x_2)-y_2)}{K_{1,1}+K_{2,2}-2K_{1,2}}\\ &=\alpha_2^{old} + \frac{(E_1-E_2)}{K_{1,1}+K_{2,2}-2K_{1,2}}\tag{12} \end{aligned} α2new′=α2old+K1,1+K2,2−2K1,2(f(x1)−y1)−(f(x2)−y2)=α2old+K1,1+K2,2−2K1,2(E1−E2)(12)
然而,此时的(α1new′,α2new′)(\alpha_1^{new'}, \alpha_2^{new'})(α1new′,α2new′)并不一定是更新以后的值,我们还要根据之前求得的值域来确定更新后的值,即:
α2new={L,α2new′≤Lα2new′,L≤α2new′≤HH,α2new′≥H\alpha_2^{new} = \left\{ \begin{array}{ll} L,&\alpha_2^{new'} \le L\\ \alpha_2^{new'},&L \le \alpha_2^{new'} \le H\\ H, &\alpha_2^{new'} \ge H \end{array} \right. α2new=⎩⎨⎧L,α2new′,H,α2new′≤LL≤α2new′≤Hα2new′≥H
再由α2\alpha_2α2和α1\alpha_1α1的关系可以得到:
α1new=α1old+y1y2(α2old−α2new)(13)\begin{aligned} \alpha_1^{new} = \alpha_1^{old}+y_1y_2(\alpha_2^{old}-\alpha_2^{new})\tag{13} \end{aligned} α1new=α1old+y1y2(α2old−α2new)(13)
更新变量的选取
SMO算法需要选择一对变量进行迭代更新修正,很显然,对于违反KKT条件的点是我们需要进行更新的。因此,我们第一个变量选取违法KKT条件最严重的点。主要是支持向量对模型产生影响,则先遍历0≤αi≤C0 \le \alpha_i \le C0≤αi≤C的样本点,检查是否违反KKT条件即是否满足yi(w⊤x+b)=1y_i(\boldsymbol{w^\top}\boldsymbol{x}+b) = 1yi(w⊤x+b)=1。若都满足,则再考虑αi=0\alpha_i=0αi=0时,是否满足yi(w⊤x+b)≥1y_i(\boldsymbol{w^\top}\boldsymbol{x}+b) \ge 1yi(w⊤x+b)≥1和αi=C\alpha_i =Cαi=C时,是否满足yi(w⊤x+b)≤1y_i(\boldsymbol{w^\top}\boldsymbol{x}+b) \le 1yi(w⊤x+b)≤1。若遇到一个样本点不满足,则将其选为第一个变量。
而第二个变量,根据公式,我们希望更新更快,则需要步伐大一点,在第一个变量α1\alpha_1α1确定后,要求第二个变量使得∣E1−E2∣\vert E_1-E_2 \vert∣E1−E2∣尽可能大。因此,E1≥0E_1\ge 0E1≥0时,选取最小的EiE_iEi作为E2E_2E2;而E1≤0E_1 \le 0E1≤0时,则需要选取最大的EiE_iEi作为E2E_2E2
bbb和误差EiE_iEi的计算
每更新一次后,都需要重新计算b和误差。然而,此时需要考虑α\alphaα的值。根据KKT条件0≤α1new≤C0 \leq \alpha_1^{new} \leq C0≤α1new≤C时可得ξ1=0\xi_1 = 0ξ1=0那么, y1=w⊤x1+by_1=\boldsymbol{w^\top}\boldsymbol{x_1}+by1=w⊤x1+b,可求得b1newb_1^{new}b1new如下公式所示:
b1new=y1−w⊤x1=y1−∑i=1nαiy1K1,i=y1−∑i=3nαiyiKi,1−α1newy1K1,1−α2newy2K2,1\begin{aligned} b_1^{new}&= y_1- \boldsymbol{w^\top}\boldsymbol{x_1}\\ &=y_1-\sum_{i=1}^{n}\alpha_iy_1K_{1,i}\\ &=y_1-\sum_{i=3}^{n}\alpha_iy_iK_{i,1}-\alpha_1^{new}y_1K_{1,1}-\alpha_2^{new}y_2K_{2,1} \end{aligned} b1new=y1−w⊤x1=y1−i=1∑nαiy1K1,i=y1−i=3∑nαiyiKi,1−α1newy1K1,1−α2newy2K2,1
其实我们是并不希望在更新的时候看到∑i=3nαiyiKi,1\sum_{i=3}^{n}\alpha_iy_iK_{i,1}∑i=3nαiyiKi,1的,而是希望通过能够根据旧的或者已知的参数去表示。此时看到y1−∑i=3nαiyiKi,1y_1-\sum_{i=3}^{n}\alpha_iy_iK_{i,1}y1−∑i=3nαiyiKi,1有点眼熟,它和之前我们定义的误差很接近(数学敏感性!),因此我们将其转换为误差得到:
b1new=−E1+bold+y1K1,1(α1old−α1new)+y2K2,1(α2old−α2new)(14)\begin{aligned} b_1^{new} = -E_1+b^{old}+y_1K_{1,1}(\alpha_1^{old}-\alpha_1^{new})+y_2K_{2,1}(\alpha_2^{old} - \alpha_2^{new})\tag{14} \end{aligned} b1new=−E1+bold+y1K1,1(α1old−α1new)+y2K2,1(α2old−α2new)(14)
同样的,当0≤α2new≤C0 \leq \alpha_2^{new} \leq C0≤α2new≤C时,更新b为:
KaTeX parse error: No such environment: align at position 8: \begin{̲a̲l̲i̲g̲n̲}̲ \label{equa:b…
此时,问题来了,当α1\alpha_1α1和α2\alpha_2α2都满足是(0,C)(0,C)(0,C)时,bbb应该如何更新呢?注意,bbb是对于每一对(α1,α2)(\alpha_1,\alpha_2)(α1,α2)优化后进行更新,并不是求得α1new\alpha_1^{new}α1new进行更新,求得α2new\alpha_2^{new}α2new再更新一次。答案是,此时b1new=b2newb_1^{new} = b_2^{new}b1new=b2new。因为在这种情况下,说明两个点都位于间隔边界上,此时的www是确定的,同时到分割平面的距离都是1,所以是相等的。其实直接用公式也可以证明,直接将(α1new,α2new)(\alpha_1^{new},\alpha_2^{new})(α1new,α2new)和(α1old,α2old)(\alpha_1^{old},\alpha_2^{old})(α1old,α2old)代入公式14和公式15可以得到二者相等。
然而,上面讨论的是(0,C)(0,C)(0,C)的情况,当取0和CCC的时候呢?当α1\alpha_1α1和α2\alpha_2α2都取边界值时,仅有y1y2=−1y_1y_2=-1y1y2=−1时,α1\alpha_1α1和α2\alpha_2α2可以同时取000或CCC。而当α1\alpha_1α1和α2\alpha_2α2同时为0时,说明两个点均分类正确,假设y1=1y_1 = 1y1=1,y2=−1y_2=-1y2=−1代入KKT条件得到:
b1new≥−E1+bold+y1K1,1(α1old−α1new)+y2K2,1(α2old−α2new)b2new≤−E2+bold+y1K1,2(α1old−α1new)+y2K2,2(α2old−α2new)\begin{aligned} b_1^{new} \ge -E_1+b^{old}+y_1K_{1,1}(\alpha_1^{old}-\alpha_1^{new})+y_2K_{2,1}(\alpha_2^{old} - \alpha_2^{new})\\ b_2^{new} \le -E_2+b^{old}+y_1K_{1,2}(\alpha_1^{old}-\alpha_1^{new})+y_2K_{2,2}(\alpha_2^{old} - \alpha_2^{new}) \end{aligned} b1new≥−E1+bold+y1K1,1(α1old−α1new)+y2K2,1(α2old−α2new)b2new≤−E2+bold+y1K1,2(α1old−α1new)+y2K2,2(α2old−α2new)
如下图所示,其中两条虚线分别为b1newb_1^{new}b1new和b2newb_2^{new}b2new对应的分割超平面。两个平面一个向上移,一个向下移,b1newb_1^{new}b1new和b2newb_2^{new}b2new都满足KKT条件则其中见也满足KKT条件。其他形式的边界值搭配也可以同样地代入到KKT条件中,并且进行解释。
然而,这样是有问题的,有可能两个平面移动的轨迹并不重合。对于SMO算法中的缺陷,Keerthi在论文中已经进行修改。当然,因为我们其实只是为了对b进行更新而已,在这种情况下,我们可以考虑不进行更新,也就是会慢一步。如果是轨迹有重合的部分,我们采用b1new+b2new2\frac{b_1^{new}+b_2^{new}}{2}2b1new+b2new来对bbb进行更新。若不考虑上面提出的Platt提出的传统SMO算法的缺陷,则应按照下式对bbb进行更新:
bnew={b1new,0≤α1new≤Cb2new,0≤α2new≤Cb1new+b2new2,othersb^{new} = \left\{ \begin{array}{ll} b_1^{new},\ &0 \leq \alpha_1^{new} \leq C\\ b_2^{new},\ &0 \leq \alpha_2^{new} \leq C\\ \frac{b_1^{new}+b_2^{new}}{2},\ &others \end{array} \right. bnew=⎩⎨⎧b1new, b2new, 2b1new+b2new, 0≤α1new≤C0≤α2new≤Cothers
更新完b后,还需要对误差进行更新。记所有支持向量的集合为S,得到误差为:
Einew=∑SαjyjKi,j+bnew−yiE_i^{new} = \sum_{S}\alpha_jy_jK_{i,j}+b^{new}-y_iEinew=S∑αjyjKi,j+bnew−yi
最终,当αinew−αiold≤ϵ\alpha_i^{new}-\alpha_i^{old} \le \epsilonαinew−αiold≤ϵ时,检查其是否满足KKT条件,若满足则停止迭代,否则继续迭代。
至此,SMO算法告一段落,修正后的SMO算法待后续补充。
SVM笔记之SMO算法相关推荐
- 机器学习笔记——支持向量机SMO算法完整版代码分析
机器学习笔记--支持向量机SMO算法完整版代码分析 代码大体分析 外循环 参数类 内循环 KKT条件判断 eCache参数 完整SMO代码 添加核函数代码 代码参考书籍:<机器学习实战> ...
- 【机器学习系列】之SVM核函数和SMO算法
作者:張張張張 github地址:https://github.com/zhanghekai [转载请注明出处,谢谢!] [机器学习系列]之SVM硬间隔和软间隔 [机器学习系列]之SVM核函数和SMO ...
- 模型算法_详解SVM模型之SMO算法
今天是机器学习专题第35篇文章,我们继续SVM模型的原理,今天我们来讲解的是SMO算法. 公式回顾 在之前的文章当中我们对硬间隔以及软间隔问题都进行了分析和公式推导,我们发现软间隔和硬间隔的形式非常接 ...
- 机器学习算法实践-SVM中的SMO算法
前言 前两篇关于SVM的文章分别总结了SVM基本原理和核函数以及软间隔原理,本文我们就针对前面推导出的SVM对偶问题的一种高效的优化方法-序列最小优化算法(Sequential Minimal Opt ...
- 机器学习:SVM训练,SMO算法描述,启发式选择样本或变量
文章目录 优化目标: 优化步骤: 对偶问题本质: 选择第一个样本点标准: 选择第一个样本点标准为:最不满足KKT条件的样本 如何判断样本点是否满足KKT条件? 满足和不满足KKT的情况: 量化不满足K ...
- SVM——详细讲解SMO算法优化两个变量以及变量的选择
一.SMO(序列最小最优化)优化两个变量 以非线性支持向量机的对偶问题为例,使用SMO算法求解该对偶问题的最优参数α* . 非线性支持向量机的对偶问题如下: 对偶问题转换:(如何转换请看这篇博客) 存 ...
- 西瓜书《支持向量机SVM》 原始形式推导+拉格朗日乘数法的SVM形式+SVM对偶形式推导+SMO算法推导
- SVM问题的求解方法SMO算法
西瓜书学习笔记:支持向量机(6.1-6.2)笔记 1.SMO算法思路讲解 列表就是西瓜书上面的公式6.11 2.SMO算法简单实现 的点就是支持向量机上面的点. 30:43分钟开始讲code exam ...
- 【支持向量机SVM】关于SMO优化算法的笔记
看了几篇SVM的相关文章,还是没理解透彻...B站关于SMO算法的讲解很清楚,做了一些笔记,看看能不能写成程序...(不知道为什么图片是横着的)
最新文章
- Linux之wget下载
- apache配置反向代理(通过不同端口访问不同目录)
- 如何使用应用日志(Application Log)
- 数据复盘《糖豆人》爆火营销过程:怎么做到以小博大?
- 浪潮服务器测试文档,ESXI6.7注入浪潮服务器raid驱动测试
- MySQL工作笔记-使用事件和存储过程定时更新某表数据
- PostgreSQL从未授权到高权限命令执行
- 在ASP.NET下做了一个实验MVC的小东西,希望能得到更多的参考意见
- 10.程序员的自我修养---内存
- conda create出现连接问题_使用conda安装命令时一直出现问题,因为从2019年4月添加的国内镜像都不能用了...
- 【吴恩达机器学习】学习笔记——梯度下降
- LCD12864驱动显示程序
- 智学网登录不了java_智学网登录不上怎么办?智学网app无法登录解决方法介绍...
- CSS 标签左右分布的多种方法
- 【软件测试】测试用例
- 澳洲CE毕业意向FullStackDeveloper
- 推荐10 款 C++ 在线编译器
- VRP基础介绍:VRP基础
- 程序员分手手册,教你如何恢复单身
- 西北农林科技大学计算机考研好考吗,西北农林科技大学考研好考吗?
热门文章
- 自己配置的深度学习主机 i7-8700+RTX 2070Super 内含所有配件明细以及装机过程 我们随时交流哦~
- 分析Google Analytics中的流量来源
- Awesome-SIEMENS 西门子1847 学习视频整理
- IoT入门:拆解物联网全栈开发工作
- 2022-3-12 fcl库的内存分配
- masm32开发com组件介绍[一][二][三]
- 安大计算机科学与技术怎么样,安徽大学计算机专业排名
- myeclipse10创建SQLServer数据库显示Driver class not found
- web移动关于视口的代码操作
- 面对强势的甲方,pm怎么在处于弱势的情况下逆袭?(政务项目)