支持向量机(SVM)

1.间隔与支持向量

给定训练样本集 D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . . ( x n , y n ) } D=\{(x_1,y_1),(x_2,y_2),....(x_n,y_n)\} D={(x1,y1),(x2,y2),....(xn,yn)},分类学习最基本的想法就是基于训练集 D D D 在样本空间中找到一一个划分超平面,将不同类别的样本分开.但能将训练样本分开的划分超平面可能有很多,如图 6.1 6.1 6.1 所示,我们应该努力去找到哪一个呢?
在这里插入图片描述
直观上看,应该去找位于两类训练样本正中间的划分超平面,即图 6.1 6.1 6.1
中红色的那个,因为该划分超平面对训练样本局部扰动的“容忍”性最好.例
如,由于训练集的局限性或噪声的因素,训练集外的样本可能比图 6.1 6.1 6.1 中的训练样本更接近两个类的分隔界,这将使许多划分超平面出现错误,而红色的超平面受影响最小.换言之,这个划分超平面所产生的分类结果是最鲁棒的,对未见示例的泛化能力最强.
在样本空间中,划分超平面可通过如下线性方程来描述:
w T x + b = 0 w^{T}x+b=0 wTx+b=0
划分的超平面被 w w w, b b b 确定下面我们将其记为 ( w , b ) (w, b) (w,b).样本空间中任意点 x x x 到超平面 ( w , b ) (w, b) (w,b) 的距离可写为
r = ∣ w T x + b ∣ ∥ w ∥ r=\frac{|w^{T}x+b|}{\left \| w \right \|} r=wwTx+b
假设超平面 ( w , b ) (w, b) (w,b) 能将训练样本正确分类,即对于 ( x i , y i ) ∈ D (x_i,y_i)∈D (xi,yi)D,若 y i = + 1 y_i= +1 yi=+1,则有 w T x i + b > 0 w^{T}x_i+b> 0 wTxi+b>0;若 Y i = − 1 Y_i=-1 Yi=1,则有 w T x i + b < 0 w^{T}x_i+b<0 wTxi+b<0 .令
{ w T x i + b > + 1 y i = + 1 w T x i + b < − 1 y i = − 1 ( 6.3 ) \left\{\begin{matrix}w^{T}x_i+b> +1 \quad y_i= +1 \\w^{T}x_i+b< -1 \quad y_i= -1 \end{matrix}\right. \quad (6.3) {wTxi+b>+1yi=+1wTxi+b<1yi=1(6.3)
如图 6.2 6.2 6.2 所示,距离超平面最近的这几个训练样本点使式(6.3)的等号成立,
它们被称为“支持向量”(supportvector),两个异类支持向量到超平面的距离
之和为
γ = 2 ∥ w ∥ \gamma =\frac{2}{\left \| w \right \|} γ=w2
它被称为“间隔”(margin).
在这里插入图片描述
欲找到具有“最大间隔”(maximum margin)的划分超平面,也就是要找到能满足式(6.3)中约束的参数 w w w b b b,使得 γ γ γ 最大,即
max ⁡ w , b 2 ∥ w ∥ s t : y i ( w T x i + b ) ≥ 1 i = 1 , 2... n \max \limits_{w,b}\frac{2}{\left \| w \right \|} \\ st:y_i(w^{T}x_i+b)≥1 \quad i=1,2...n w,bmaxw2st:yi(wTxi+b)1i=1,2...n

显然,为了最大化间隔,仅需最大化 1 ∥ w ∥ \frac{1}{\left \| w \right \|} w1,这等价于最小化 ∥ w ∥ 2 \left \| w \right \|^{2} w2.于是,重写为
min ⁡ w , b 1 2 ∥ w ∥ 2 ( 6.6 ) s t : y i ( w T x i + b ) ≥ 1 i = 1 , 2... n \min \limits_{w,b}\frac{1}{2}\left \| w \right \|^2 \quad(6.6)\\ st:y_i(w^{T}x_i+b)≥1 \quad i=1,2...n w,bmin21w26.6st:yi(wTxi+b)1i=1,2...n这就是支持向量机(SVM)的基本模型

对偶问题

我们希望求解式(6.6)来得到大间隔划分超平面所对应的模型
f ( x ) = w T x + b f(x)=w^{T}x+b f(x)=wTx+b
其中 w w w b b b 是模型参数.注意到式(6.6)本身是一个凸二次规划问题,能直接用现成的优化计算包求解,但我们可以有更高效的办法.
对式(6.6)使用拉格朗日乘子法可得到其对偶问题.具
体来说,对式(6.6)的每条约束添加拉格朗日乘子 α i ≥ 0 \alpha _i≥0 αi0,则该问题的拉格朗日
L ( w , b , α ) = 1 2 ∥ w ∥ 2 + ∑ i = 1 m α i ( 1 − y i ( w T x i + b ) ) ( 6.8 ) L(w,b,\alpha)=\frac{1}{2}\left \| w \right \|^2+\sum_{i=1}^{m}\alpha _i(1-y_i(w^{T}x_i+b)) \quad (6.8) L(w,b,α)=21w2+i=1mαi(1yi(wTxi+b))(6.8)
min ⁡ w , b max ⁡ α L ( w , b , α ) s t : α i ⩾ 0 \min \limits_{w,b} \max \limits_{\alpha}L(w,b,\alpha)\\ st:\alpha_{i}\geqslant 0 w,bminαmaxL(w,b,α)st:αi0
等价于
max ⁡ α min ⁡ w , b L ( w , b , α ) s t : α i ⩾ 0 \max \limits_{\alpha} \min \limits_{w,b}L(w,b,\alpha)\\ st:\alpha_{i}\geqslant 0 αmaxw,bminL(w,b,α)st:αi0
α = ( α 1 , α 2 . . . α n ) T \alpha=(\alpha _1,\alpha _2...\alpha _n)^{T} α=(α1,α2...αn)T
L ( w , b , α ) L(w,b,\alpha) L(w,b,α) w w w b b b 的偏导等于 0 0 0
∑ i = 1 m α i y i x i = w ∑ i = 1 m α i y i = 0 \sum_{i=1}^{m}\alpha_iy_ix_{i}=w \\ \sum_{i=1}^{m}\alpha_iy_i=0 i=1mαiyixi=wi=1mαiyi=0
将以上两式带入 ( 6.8 ) (6.8) (6.8),消去 w , b w,b w,b ( 6.6 ) (6.6) (6.6)的对偶问题
max ⁡ α ∑ i = 1 m α i − 1 2 ∑ i = 1 m ∑ j = 1 m α i α j y i y j x i T x j s t : ∑ i = 1 m α i y i = 0 α i ⩾ 0 i = 1 , 2.. m \max \limits_{\alpha} \sum_{i=1}^{m} \alpha_i-\frac{1}{2}\sum_{i=1}^{m}\sum_{j=1}^{m}\alpha_i\alpha_jy_iy_jx_i^{T}x_j\\st:\sum_{i=1}^{m}\alpha_iy_i=0\\ \alpha_i \geqslant 0 \quad i=1,2..m αmaxi=1mαi21i=1mj=1mαiαjyiyjxiTxjst:i=1mαiyi=0αi0i=1,2..m
等价于
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 α i ⩾ 0 i = 1 , 2.. m \min \limits_{\alpha} \frac{1}{2}\sum_{i=1}^{m}\sum_{j=1}^{m}\alpha_i\alpha_jy_iy_jx_i^{T}x_j-\sum_{i=1}^{m} \alpha_i\\st:\sum_{i=1}^{m}\alpha_iy_i=0\\ \alpha_i \geqslant 0 \quad i=1,2..m αmin21i=1mj=1mαiαjyiyjxiTxji=1mαist:i=1mαiyi=0αi0i=1,2..m
求解出 α ∗ = ( α 1 ∗ , α 2 ∗ , . . . . . α n ∗ ) T \alpha^{*}=(\alpha_1^{*},\alpha_2^{*},.....\alpha_n^{*})^{T} α=(α1,α2,.....αn)T
w ∗ = ∑ i = 1 m α i ∗ y i x i b ∗ = y j − ∑ i = 1 m α i ∗ y i ( x i T ∗ x j ) w^{*}=\sum_{i=1}^{m}\alpha_i^{*}y_ix_i\\b^{*}=y_j-\sum_{i=1}^{m}\alpha_i^{*}y_i(x_i^{T}*x_j) w=i=1mαiyixib=yji=1mαiyi(xiTxj)
分离超平面可以表示为
∑ i = 1 m a i ∗ y i ( x i T x j ) + b ∗ = 0 \sum\limits_{i=1}^m {a_i^*{y_i}({x_i}^{T}{x_j})} + {b^*} = 0 i=1maiyi(xiTxj)+b=0
分类的决策函数可以写成
f ( x ) = s i g n ( ∑ i = 1 m a i ∗ y i ( x i T x j ) + b ∗ ) f(x) = sign(\sum\limits_{i=1}^m {a_i^*{y_i}({x_i}^T {x_j})} + {b^*}) f(x)=sign(i=1maiyi(xiTxj)+b)

软间隔

在这里插入图片描述
上图的例子就是这样的一个例子了。无论怎么画直线都不可能把两类点完全分开。但如果我们可以容忍一部分点出现异常,或者不完全满足大于等于1的条件,那么就可以对每个样本点引入一个松弛变量 ξ i > 0 ξ_i>0 ξi>0, 同时为目标函数需要为每个 ξ i ξ_i ξi付出代价,这样线性svm的目标函数就变成了这样(原始问题)

max ⁡ w , b , ξ 1 2 ∥ w ∥ 2 + C ∑ i = 1 N ξ i s . t . y i ( w ⋅ x i + b ) ≥ 1 − ξ i , i = 1 , 2 , ⋅ ⋅ ⋅ , N ξ i ≥ 0 , i = 1 , 2 , ⋅ ⋅ ⋅ , N \begin{array}{l} \mathop {\max }\limits_{w,b,\xi } \qquad \frac{1}{2}{\left\| w \right\|^2} + C\sum\limits_{i = 1}^N { {\xi _i}} \\ {\rm{s.t.}} \qquad {y_i}(w \cdot {x_i} + b) \ge 1 - {\xi _i}, \qquad i = 1,2, \cdot \cdot \cdot ,N\\ \qquad \qquad {\xi _i} \ge 0, \qquad i = 1,2, \cdot \cdot \cdot ,N \end{array} w,b,ξmax21w2+Ci=1Nξis.t.yi(wxi+b)1ξi,i=1,2,,Nξi0,i=1,2,,N
对偶问题转变成
min ⁡ a 1 2 ∑ i = 1 m ∑ j = 1 m a i a j y i y j ( x i ⋅ x j ) − ∑ i = 1 m α i ( 6.10 ) s . t . ∑ i = 1 m α i y i = 0 0 ≤ α i ≤ C , i = 1 , 2 , ⋅ ⋅ ⋅ , N \begin{array}{l} \mathop {\min }\limits_a \qquad \frac{1}{2}\sum\limits_{i = 1}^m {\sum\limits_{j = 1}^m { {a_i}{a_j}{y_i}{y_j}({x_i}\cdot{x_j}) - \sum\limits_{i = 1}^m { {\alpha_i}} } } \quad (6.10)\\ {\rm{s.t.}}\qquad\sum\limits_{i = 1}^m { {\alpha_i}{y_i} = 0} \\ \qquad\qquad 0 \le {\alpha_i} \le C, \qquad i = 1,2,\cdot\cdot\cdot,N \end{array} amin21i=1mj=1maiajyiyj(xixj)i=1mαi(6.10)s.t.i=1mαiyi=00αiC,i=1,2,,N
选择一个 α ∗ \alpha^{∗} α 的正分量 0 < α j ∗ < C 0<\alpha^∗_j<C 0<αj<C , 计算(或者通过所有解求平均值):
b ∗ = y j − ∑ i = 1 m α i ∗ y i ( x i T x j ) {b^*} = {y_j} - \sum\limits_{i = 1}^m {\alpha_i^*{y_i}({x_i}^{T} {x_j})} b=yji=1mαiyi(xiTxj)
决策函数为
f ( x ) = s i g n ( ∑ i = 1 m α i ∗ y i K ( x i , x j ) + b ∗ ) f(x) = sign(\sum\limits_{i=1}^m {\alpha_i^*{y_i}K({x_i}, {x_j})} + {b^*}) f(x)=sign(i=1mαiyiK(xi,xj)+b)
SMO是一种启发式算法,其基本思想是:如果所有变量的解都满足了此最优化问题的KKT条件,那么这个最优化问题的解就得到了。否则,选择两个变量,固定其它变量,针对这两个变量构建一个二次规划问题,然后关于这个二次规划的问题的解就更接近原始的二次归还问题的解,因为这个解使得需要优化的问题的函数值更小。

翻译一下:对于svm我们要求解 α ∗ \alpha^∗ α,如果 α ∗ \alpha^∗ α 的所有分量满足svm对偶问题的KKT条件,那么这个问题的解就求出来了,我们svm模型学习也就完成了。如果没有满足KKT,那么我们就在 α ∗ \alpha^∗ α 中找两个分量 α i \alpha_i αi α j \alpha_j αj,其中 α i \alpha_i αi 是违反KKT条件最严重的分量,通过计算,使得 α i \alpha_i αi α j \alpha_j αj 满足KKT条件,直到 α ∗ \alpha^∗ α 的所有分量都满足KKT条件。而且这个计算过程是收敛的,因为每次计算出来的新的两个分量,使得对偶问题中要优化的目标函数(就是min对应的那个函数)值更小。至于为什么是收敛的,是因为,每次求解的那两个分量,是要优化问题在这两个分量上的极小值,所以每一次优化,都会使目标函数比上一次的优化结果的值变小。

( 6.10 ) (6.10) (6.10)的对偶问题为
α i = 0 ⇔ y i g ( x i ) ≥ 1 0 < α i < C ⇔ y i g ( x i ) = 1 α i = C ⇔ y i g ( x i ) ≤ 1 \begin{array}{l} \quad {\alpha_i} = 0 \quad \Leftrightarrow \quad {y_i}g({x_i}) \ge 1\\ 0 < {\alpha_i} < C \quad \Leftrightarrow \quad {y_i}g({x_i}) = 1\\ \quad {\alpha_i} = C \quad \Leftrightarrow \quad {y_i}g({x_i}) \le 1 \end{array} αi=0yig(xi)10<αi<Cyig(xi)=1αi=Cyig(xi)1
其中 g ( x ) = ∑ i = 1 m α i y i K ( x i , x j ) + b g(x) = \sum\limits_{i = 1}^m { {\alpha_i}{y_i}K({x_i},{x_j}) + b} g(x)=i=1mαiyiK(xi,xj)+b
因为计算机在计算的时候是有精度范围的,所以我们引入一个计算精度值 ε ε ε
{ α i = 0 ⇔ y i g ( x i ) ≥ 1 − ε 0 < α i < C ⇔ 1 − ε ≤ y i g ( x i ) ≤ 1 + ε α i = C ⇔ y i g ( x i ) ≤ 1 + ε } ⇒ { α i < C ⇔ 1 − ε ≤ y i g ( x i ) 0 < α i ⇔ y i g ( x i ) ≤ 1 + ε } \left\{ \begin{array}{l} {\alpha_i} = 0 \Leftrightarrow {y_i}g({x_i}) \ge 1 - \varepsilon \\ 0 < {\alpha_i} < C \Leftrightarrow 1 - \varepsilon \le {y_i}g({x_i}) \le 1 + \varepsilon \\ {\alpha_i} = C \Leftrightarrow {y_i}g({x_i}) \le 1 + \varepsilon \end{array} \right\} \Rightarrow \left\{ \begin{array}{l} {\alpha_i} < C \Leftrightarrow 1 - \varepsilon \le {y_i}g({x_i})\\ 0 < {\alpha_i} \Leftrightarrow {y_i}g({x_i}) \le 1 + \varepsilon \end{array} \right\} αi=0yig(xi)1ε0<αi<C1εyig(xi)1+εαi=Cyig(xi)1+ε{αi<C1εyig(xi)0<αiyig(xi)1+ε}
同时由于 y i = ± 1 y_i=±1 yi=±1,所以 y i ∗ y i = 1 y_i∗y_i=1 yiyi=1,上面的公式可以换算为
α i < C ⇔ − ε ≤ y i ( g ( x i ) − y i ) 0 < α i ⇔ y i ( g ( x i ) − y i ) ≤ + ε \begin{array}{l} {\alpha_i} < C \Leftrightarrow - \varepsilon \le {y_i}(g({x_i}) - {y_i})\\ 0 < {\alpha_i} \Leftrightarrow {y_i}(g({x_i}) - {y_i}) \le + \varepsilon \end{array} αi<Cεyi(g(xi)yi)0<αiyi(g(xi)yi)+ε
定义:
E i = g ( x i ) − y i {E_i} = g({x_i}) - {y_i} Ei=g(xi)yi
其中, g ( x ) g(x) g(x)其实就是决策函数,所以 E i E_i Ei可以认为是对输入的 x i x_i xi的预测值与真实输出 y i y_i yi之差。
上面的公式就可以换算为,即 K K T KKT KKT条件可以表示为:
a i < C ⇔ − ε ≤ y i E i 0 < a i ⇔ y i E i ≤ + ε \begin{array}{l} {a_i} < C \Leftrightarrow - \varepsilon \le {y_i}{E_i}\\ 0 < {a_i} \Leftrightarrow {y_i}{E_i} \le + \varepsilon \end{array} ai<CεyiEi0<aiyiEi+ε
那么相应的违规KKT条件的分量应该满足下列不等式:

A g a i n s t K K T : α i < C ⇔ − ε > y i E i 0 < α i ⇔ y i E i > + ε Against KKT:\\\begin{array}{l} {\alpha_i} < C \quad \Leftrightarrow \quad - \varepsilon > {y_i}{E_i}\\ 0 < {\alpha_i} \quad \Leftrightarrow \quad {y_i}{E_i} > + \varepsilon \end{array} AgainstKKT:αi<Cε>yiEi0<αiyiEi>+ε

SMO算法描述

输入:训练数据集 T = ( x 1 , y 1 ) , ( x 2 , y 2 ) , ⋅ ⋅ ⋅ , ( x N , y N ) T={(x_1,y_1),(x_2,y_2),⋅⋅⋅,(x_N,y_N)} T=(x1,y1),(x2,y2),,(xN,yN)

其中 x i ∈ R n x_i∈R^{n} xiRn y i ∈ { − 1 , + 1 } y_i∈\{−1,+1\} yi{1,+1} i = 1 , 2 , ⋅ ⋅ ⋅ , N i=1,2,⋅⋅⋅,N i=1,2,,N,精度 ε ε ε

输出:近似解 α ∗ \alpha^{*} α
算法描述:

  1. 取初始值 α 0 \alpha^{0} α0,令 K = 0 K=0 K=0
  2. 选取优化变量 a 1 k , a 2 k a^{k}_{1} , a^{k}_{2} a1k,a2k , 针对优化问题,求得最优解 a 1 k + 1 , a 2 k + 1 a^{k+1}_{1} , a^{k+1}_{2} a1k+1,a2k+1 更新 a k a^{k} ak a k + 1 a^{k+1} ak+1
  3. 在精度条件范围内是否满足停机条件,即是否有变量违反KKT条件,如果违反了,则令k=k+1,跳转(2),否则(4)。
  4. 求得近似解 α ∗ = a k + 1 \alpha^{*}=a^{k+1} α=ak+1

计算选取变量的新值

首先计算出来的新值必须满足约束条件 ∑ i = 1 m a i y i = 0 \sum\limits_{i = 1}^m { {a_i}{y_i} = 0} i=1maiyi=0 ,那么求出来的anew2需要满足下列条件:
L ≤ α 2 n e w ≤ H L = max ⁡ ( 0 , α 2 o l d − α 1 o l d ) , H = min ⁡ ( C , C + α 2 o l d − α 1 o l d ) , 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 ) , y 1 = y 2 \begin{array}{l} L \le \alpha_2^{new} \le H\\ L = \max (0,\alpha_2^{old} - \alpha_1^{old}),H = \min (C,C + \alpha_2^{old} - \alpha_1^{old}), \qquad {y_1} \ne {y_2}\\ L = \max (0,\alpha_2^{old} + \alpha_1^{old} - C),H = \min (C,\alpha_2^{old} + \alpha_1^{old}), \qquad {y_1} = {y_2} \end{array} Lα2newHL=max(0,α2oldα1old),H=min(C,C+α2oldα1old),y1=y2L=max(0,α2old+α1oldC),H=min(C,α2old+α1old),y1=y2

未经过裁剪的 α 2 \alpha_2 α2的解为:
a 2 n e w , u n c = a 2 o l d + y 2 ( E 1 − E 2 ) η η = K 11 + K 22 − 2 K 12 \begin{array}{l} {a_2^{new,unc}} = {a_2^{old}} + \frac{ {y_2}({E_1}-{E_2)}}{\eta} \\ \eta = K_{11} + K_{22} - 2{K_{12}} \end{array} a2new,unc=a2old+ηy2(E1E2)η=K11+K222K12
裁剪后的解为
a 2 n e w = { H , a 2 n e w , u n c > H a 2 n e w , u n c , L ≤ a 2 n e w , u n c ≤ H L , a 2 n e w , u n c < L a_2^{new} = \left\{ \begin{array}{l} H,a_2^{new,unc} > H\\ a_2^{new,unc},L \le a_2^{new,unc} \le H\\ L,a_2^{new,unc} < L \end{array} \right. a2new=H,a2new,unc>Ha2new,unc,La2new,uncHL,a2new,unc<L
第一个变量的解为
a 1 n e w = a 1 o l d + y 1 y 2 ( a 2 o l d − a 2 n e w ) a_1^{new} = a_1^{old} + {y_1}{y_2}(a_2^{old} - a_2^{new}) a1new=a1old+y1y2(a2olda2new)
还需要更新 b b b:
b 1 n e w = − E 1 − y 1 K 11 ( a 1 n e w − a 1 o l d ) − y 2 K 21 ( a 2 n e w − a 2 o l d ) + b o l d b 2 n e w = − E 2 − y 1 K 12 ( a 1 n e w − a 1 o l d ) − y 2 K 22 ( a 2 n e w − a 2 o l d ) + b o l d \begin{array}{l} b_1^{new} = - {E_1} - {y_1}{K_{11}}(a_1^{new} - a_1^{old}) - {y_2}{K_{21}}(a_2^{new} - a_2^{old}) + {b^{old}}\\ b_2^{new} = - {E_2} - {y_1}{K_{12}}(a_1^{new} - a_1^{old}) - {y_2}{K_{22}}(a_2^{new} - a_2^{old}) + {b^{old}} \end{array} b1new=E1y1K11(a1newa1old)y2K21(a2newa2old)+boldb2new=E2y1K12(a1newa1old)y2K22(a2newa2old)+bold
在更新 b b b
b n e w = { b 1 n e w 0 < a 1 n e w < C b 2 n e w 0 < a 2 n e w < C b 1 n e w + b 2 n e w 2 o t h e r s b^{new}=\left\{\begin{matrix} b_1^{new}\quad 0 \lt a_1^{new} \lt C \\ b_2^{new}\quad 0 \lt a_2^{new} \lt C \\ \frac{b_1^{new} + b_2^{new}}{2} \quad others\end{matrix}\right. bnew=b1new0<a1new<Cb2new0<a2new<C2b1new+b2newothers
由于缓存了 E i E_i Ei,所以需要计算新的 E i E_i Ei:
E i n e w = ∑ j = 1 m y j a j K ( x i , x j ) + b n e w − y i E_i^{new} = \sum\limits_{j=1}^m { {y_j}{a_j}K({x_i},{x_j})} + b^{new} - y_i Einew=j=1myjajK(xi,xj)+bnewyi

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值