SVM概述
基于最大间隔来对数据进行分类
优点: 泛化错误率低,计算开销不大,结果易解释。
缺点: 对参数调节和核函数的选择敏感
下图中蓝色直线为分隔超平面,用
W
T
x
+
b
=
0
W^Tx+b=0
WTx+b=0 来表示,其中
W
T
W^T
WT 和
b
b
b 要求解的,在支持向量机的求解中,需要找到离分隔面最近的那些点,这些点叫做支持向量
,然后确保它们离分隔面的距离尽量的远,支持向量到分隔面的距离称为margin
=
W
T
x
+
b
∣
∣
W
∣
∣
\frac{W^Tx+b}{||W||}
∣∣W∣∣WTx+b,其中
∣
∣
W
∣
∣
||W||
∣∣W∣∣ 是向量
W
W
W 的
L
2
L2
L2 范数,即:
∑
i
=
1
m
W
i
2
\sqrt{\sum_{i=1}^{m}W_i^2}
∑i=1mWi2
预测函数
为:
f
(
x
)
=
W
T
x
+
b
f(x)=W^Tx+b
f(x)=WTx+b
对于输出 y y y,定义 y = { 1 , f ( x ) > 0 − 1 , f ( x ) < 0 = s g n ( f ( x ) ) y=\left\{ \begin{aligned} 1, f(x)>0 \\ -1, f(x)<0\\ \end{aligned} \right.=sgn(f(x)) y={1,f(x)>0−1,f(x)<0=sgn(f(x))
那么可以得到:
y
i
(
W
T
x
i
+
b
)
⩾
1
y_i(W^Tx_i+b)\geqslant 1
yi(WTxi+b)⩾1,这个是约束条件函数
总结:求解SVM算法,目标就是找出模型参数
W
W
W 和
b
b
b,为此,必须找到具有最小margin
的数据点,也就是支持向量
。一旦找到具有最小间隔的数据点,我们就需要对该margin
最大化,那么优化目标函数
可以写作:
max
w
,
b
{
min
m
(
y
⋅
(
W
T
x
+
b
)
)
⋅
1
∣
∣
W
∣
∣
}
\max_{w,b}\left \{ \min_{m}(y\cdot (W^Tx+b))\cdot \frac{1}{||W||}\right\}
w,bmax{mmin(y⋅(WTx+b))⋅∣∣W∣∣1}
为了方便对上面公式的求解,令所有支持向量
的
y
⋅
(
W
T
x
+
b
)
)
y\cdot (W^Tx+b))
y⋅(WTx+b)) 都为1,那么求解margin
的最大值就是求解
∣
∣
W
∣
∣
||W||
∣∣W∣∣ 的最小值了,即:
min
w
,
b
∣
∣
W
∣
∣
\min_{w,b}||W||
w,bmin∣∣W∣∣
为了方便计算,我们将上面的式子积分一下,然后写成向量的形式:
min w , b ∣ ∣ W ∣ ∣ = > min w , b ∣ ∣ W ∣ ∣ 2 2 = min w , b 1 2 W T W \min_{w,b}||W||=>\min_{w,b} \frac{||W||^2}{2}=\min_{w,b} \frac{1}{2}W^TW w,bmin∣∣W∣∣=>w,bmin2∣∣W∣∣2=w,bmin21WTW
在上述优化问题中,给定了一个跟
W
W
W 和
b
b
b 相关的约束条件,然后求最优值,因此该问题是一个带约束条件的优化问题
,即:
{
min
w
,
b
1
2
W
T
W
s
.
t
.
y
i
(
W
T
x
i
+
b
)
⩾
1
\left \{ \begin{aligned} & \min_{w,b}\frac{1}{2}W^TW \\ &s.t. \ y_i(W^Tx_i+b)\geqslant 1\\ \end{aligned} \right.
⎩⎪⎨⎪⎧w,bmin21WTWs.t. yi(WTxi+b)⩾1
对于此类问题,我们用 拉格朗日乘子法 来对其进行求解,将约束条件函数
与优化目标函数
联立,从而求出使原函数取得极值时,各个变量的解。使用拉格朗日乘子法时,需满足:乘子
λ
⩾
0
\lambda \geqslant 0
λ⩾0,原约束条件函数
小于0,所以我们将约束条件函数
写成
1
−
y
i
(
W
T
x
i
+
b
)
⩽
0
1-y_i(W^Tx_i+b)\leqslant 0
1−yi(WTxi+b)⩽0,那么上述原优化目标函数
就可以写成:
L ( W , b , λ ) = 1 2 W T W + ∑ i = 1 m λ i ( 1 − y i ( W T x i + b ) ) L(W,b,\lambda) = \frac{1}{2}W^TW +\sum_{i=1}^{m}\lambda_i(1-y_i(W^Tx_i+b)) L(W,b,λ)=21WTW+i=1∑mλi(1−yi(WTxi+b))
那么,对于原优化问题
,就转化为如下优化问题
了:
{ min w , b max λ L ( W , b , λ ) s . t . λ ⩾ 0 \left \{ \begin{aligned} & \min_{w,b} \max_{\lambda}\ L(W,b,\lambda) \\ &s.t.\ \lambda \geqslant 0 \end{aligned} \right. ⎩⎨⎧w,bminλmax L(W,b,λ)s.t. λ⩾0
这样我们就将原函数中关于
W
W
W 和
b
b
b 的约束条件转化为关于
λ
\lambda
λ 的约束条件了,二者在解释上是等价的,该优化问题的对偶问题
为:
{ max λ min w , b L ( W , b , λ ) s . t . λ ⩾ 0 \left \{ \begin{aligned} & \max_{\lambda} \min_{w,b}\ L(W,b,\lambda) \\ &s.t.\ \lambda \geqslant 0 \end{aligned} \right. ⎩⎨⎧λmaxw,bmin L(W,b,λ)s.t. λ⩾0
对偶问题存在弱对偶
关系:
min w , b max λ L ( W , b , λ ) ⩾ max λ min w , b L ( W , b , λ ) \min_{w,b} \max_{\lambda}\ L(W,b,\lambda) \geqslant \max_{\lambda} \min_{w,b}\ L(W,b,\lambda) w,bminλmax L(W,b,λ)⩾λmaxw,bmin L(W,b,λ)
但是在这里,
min
w
,
b
1
2
W
T
W
\min_{w,b}\frac{1}{2}W^TW
minw,b21WTW 是二次的,同时
y
i
(
W
T
x
i
+
b
)
⩾
1
y_i(W^Tx_i+b)\geqslant 1
yi(WTxi+b)⩾1 满足线性关系,那么这个优化问题
就是一个凸优化
问题了,那么这两个对偶问题
满足强对偶
关系,即:
min
w
,
b
max
λ
L
(
W
,
b
,
λ
)
=
max
λ
min
w
,
b
L
(
W
,
b
,
λ
)
\min_{w,b} \max_{\lambda}\ L(W,b,\lambda) = \max_{\lambda} \min_{w,b}\ L(W,b,\lambda)
w,bminλmax L(W,b,λ)=λmaxw,bmin L(W,b,λ)
原问题
L
(
W
,
b
,
λ
)
L(W,b,\lambda)
L(W,b,λ) 和它的对偶问题
之间具有强对偶
关系,它的充要条件
为满足KKT
条件,即:
{ ∂ L ∂ W = 0 , ∂ L ∂ b = 0 , ∂ L ∂ λ = 0 ( 梯 度 为 0 ) λ i ( 1 − y i ( W T x i + b ) ) = 0 ( 互 补 松 弛 条 件 ) λ i ⩾ 0 , 1 − y i ( W T x i + b ) ⩽ 0 ( 可 行 条 件 ) \left \{ \begin{aligned} &\frac{\partial L}{\partial W}=0,\ \frac{\partial L}{\partial b}=0,\ \frac{\partial L}{\partial \lambda}=0(梯度为0)\\ &\lambda_i(1-y_i(W^Tx_i+b))=0(互补松弛条件)\\ &\lambda_i\geqslant0, \ 1-y_i(W^Tx_i+b)\leqslant0(可行条件)\\ \end{aligned} \right. ⎩⎪⎪⎪⎨⎪⎪⎪⎧∂W∂L=0, ∂b∂L=0, ∂λ∂L=0(梯度为0)λi(1−yi(WTxi+b))=0(互补松弛条件)λi⩾0, 1−yi(WTxi+b)⩽0(可行条件)
因此,对于最开始的优化问题
,我们求解
max
λ
min
w
,
b
L
(
W
,
b
,
λ
)
\max_{\lambda} \min_{w,b}\ L(W,b,\lambda)
maxλminw,b L(W,b,λ) 就可以了
先求 L ( W , b , λ ) L(W,b,\lambda) L(W,b,λ) 对 b b b 的偏导数:
∂ L ( W , b , λ ) ∂ b = ∂ ∂ b [ 1 2 W T W + ∑ i = 1 m λ i ( 1 − y i ( W T x i + b ) ) ] = ∂ ∂ b [ ∑ i = 1 m λ i ( 1 − y i ( W T x i + b ) ) ] = ∂ ∂ b [ ∑ i = 1 m λ i ( 1 − y i W T x i − y i b ) ] = ∂ ∂ b ∑ i = 1 m − λ i y i b = − ∑ i = 1 m λ i y i \begin{aligned} \frac{\partial L(W,b,\lambda)}{\partial b} &= \frac{\partial}{\partial b} \left [\frac{1}{2}W^TW +\sum_{i=1}^{m}\lambda_i(1-y_i(W^Tx_i+b)) \right ] \\ &= \frac{\partial}{\partial b} \left [\sum_{i=1}^{m}\lambda_i(1-y_i(W^Tx_i+b)) \right ] \\ &= \frac{\partial}{\partial b} \left [\sum_{i=1}^{m}\lambda_i(1-y_iW^Tx_i-y_ib) \right ] \\ &= \frac{\partial}{\partial b} \sum_{i=1}^{m}-\lambda_iy_ib \\ &=-\sum_{i=1}^{m}\lambda_iy_i \end{aligned} ∂b∂L(W,b,λ)=∂b∂[21WTW+i=1∑mλi(1−yi(WTxi+b))]=∂b∂[i=1∑mλi(1−yi(WTxi+b))]=∂b∂[i=1∑mλi(1−yiWTxi−yib)]=∂b∂i=1∑m−λiyib=−i=1∑mλiyi
再求 L ( W , b , λ ) L(W,b,\lambda) L(W,b,λ) 对 W W W 的偏导数:
∂ l ( W , b , λ ) ∂ W = 1 2 W T W + ∑ i = 1 m λ i − ∑ i = 1 m λ i y i W T x i = 1 2 ⋅ 2 ⋅ W − ∑ i = 1 m λ i y i x i = W − ∑ i = 1 m λ i y i x i \begin{aligned} \frac{\partial l(W,b,\lambda)}{\partial W} &=\frac{1}{2}W^TW +\sum_{i=1}^{m}\lambda_i-\sum_{i=1}^{m}\lambda_iy_iW^Tx_i \\ &=\frac{1}{2}\cdot 2 \cdot W-\sum_{i=1}^{m}\lambda_iy_ix_i\\ &=W-\sum_{i=1}^{m}\lambda_iy_ix_i \end{aligned} ∂W∂l(W,b,λ)=21WTW+i=1∑mλi−i=1∑mλiyiWTxi=21⋅2⋅W−i=1∑mλiyixi=W−i=1∑mλiyixi
由于这是一个凸优化问题
,那么根据其的性质:凸优化的任一局部最优解都是它的整体最优解
,我们做如下处理:
令 ∂ L ( W , b , λ ) ∂ b = 0 \frac{\partial L(W,b,\lambda)}{\partial b}=0 ∂b∂L(W,b,λ)=0,则 ∑ i = 1 m λ i y i = 0 \sum_{i=1}^{m}\lambda_iy_i=0 ∑i=1mλiyi=0
令 ∂ L ( W , b , λ ) ∂ W = 0 \frac{\partial L(W,b,\lambda)}{\partial W}=0 ∂W∂L(W,b,λ)=0,则 W = ∑ i = 1 m λ i y i x i W=\sum_{i=1}^{m}\lambda_iy_ix_i W=∑i=1mλiyixi
将上面两个等式代入 L ( W , b , λ ) L(W,b,\lambda) L(W,b,λ) 函数:
L ( W , b , λ ) = 1 2 W T W + ∑ i = 1 m λ i ( 1 − y i ( W T x i + b ) ) = 1 2 W T W − W T ∑ i = 1 m λ i y i x i − b ∑ i = 1 m λ i y i + ∑ i = 1 m λ i = 1 2 W T ∑ i = 1 m λ i y i x i − W T ∑ i = 1 m λ i y i x i − b × 0 + ∑ i = 1 m λ i = ∑ i = 1 m λ i − 1 2 ( ∑ i = 1 m λ i y i x i ) T ∑ i = 1 m λ i y i x i = ∑ i = 1 m λ i − 1 2 ∑ i , j = 1 m λ i λ j y i y j x i T x j \begin{aligned} L(W,b,\lambda) &= \frac{1}{2}W^TW +\sum_{i=1}^{m}\lambda_i(1-y_i(W^Tx_i+b)) \\ &=\frac{1}{2}W^TW-W^T\sum_{i=1}^{m}\lambda_iy_ix_i-b\sum_{i=1}^{m}\lambda_iy_i+\sum_{i=1}^{m}\lambda_i \\ &=\frac{1}{2}W^T\sum_{i=1}^{m}\lambda_iy_ix_i-W^T\sum_{i=1}^{m}\lambda_iy_ix_i-b\times0+\sum_{i=1}^{m}\lambda_i \\ &=\sum_{i=1}^{m}\lambda_i-\frac{1}{2}\left(\sum_{i=1}^{m}\lambda_iy_ix_i\right)^T\sum_{i=1}^{m}\lambda_iy_ix_i\\ &=\sum_{i=1}^{m}\lambda_i-\frac{1}{2}\sum_{i,j=1}^{m}\lambda_i\lambda_jy_iy_jx_i^Tx_j \end{aligned} L(W,b,λ)=21WTW+i=1∑mλi(1−yi(WTxi+b))=21WTW−WTi=1∑mλiyixi−bi=1∑mλiyi+i=1∑mλi=21WTi=1∑mλiyixi−WTi=1∑mλiyixi−b×0+i=1∑mλi=i=1∑mλi−21(i=1∑mλiyixi)Ti=1∑mλiyixi=i=1∑mλi−21i,j=1∑mλiλjyiyjxiTxj
因为上面的两个等式是在
W
、
b
W、b
W、b 偏导数为 0 时取得的,为局部最优解
,那么根据凸优化问题
的性质,代入后得到结果就一定是整体最优解
,即
min
w
,
b
L
(
W
,
b
,
λ
)
\min_{w,b}\ L(W,b,\lambda)
minw,b L(W,b,λ),那么,最终优化问题
可以地写成:
{ max λ [ ∑ i = 1 m λ i − 1 2 ∑ i , j = 1 m λ i λ j y i y j x i T x j ] s . t . λ ⩾ 0 ∑ i = 1 m λ i y i = 0 \left \{ \begin{aligned} &\max_{\lambda}\left[\sum_{i=1}^{m}\lambda_i-\frac{1}{2}\sum_{i,j=1}^{m}\lambda_i\lambda_jy_iy_jx_i^Tx_j\right]\\ &s.t. \ \lambda \geqslant0\\ &\quad \sum_{i=1}^{m}\lambda_iy_i=0 \end{aligned} \right. ⎩⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎧λmax[i=1∑mλi−21i,j=1∑mλiλjyiyjxiTxj]s.t. λ⩾0i=1∑mλiyi=0
将
W
=
∑
i
=
1
m
λ
i
y
i
x
i
W=\sum_{i=1}^{m}\lambda_iy_ix_i
W=∑i=1mλiyixi 代入 预测函数
f
(
x
)
=
W
T
X
+
b
f(x)=W^TX+b
f(x)=WTX+b:
f ( x ) = W T x + b = ( ∑ i = 1 m λ i y i x i ) T x + b = ∑ i = 1 m λ i y i < x i T , x > + b = ∑ i = 1 m λ i y i < x i , x T > + b = ∑ i = 1 m λ i y i K ( x i , x j ) + b \begin{aligned} f(x) &=W^Tx+b \\ & =\left(\sum_{i=1}^{m}\lambda_iy_ix_i\right)^Tx+b\\ &=\sum_{i=1}^{m}\lambda_iy_i<x_i^T,x>+b\\ &=\sum_{i=1}^{m}\lambda_iy_i<x_i,x^T>+b\\ &=\sum_{i=1}^{m}\lambda_iy_iK(x_i,x_j)+b \end{aligned} f(x)=WTx+b=(i=1∑mλiyixi)Tx+b=i=1∑mλiyi<xiT,x>+b=i=1∑mλiyi<xi,xT>+b=i=1∑mλiyiK(xi,xj)+b
其中
x
i
x_i
xi 为第
i
i
i 个样本向量,
x
x
x 为待预测的输入样本向量,
<
x
i
,
x
T
>
<x_i,x^T>
<xi,xT> 为两个向量的内积
(行向量
×
\times
×列向量),它的物理含义是衡量两个向量的相似性
,这里我们把
K
(
x
i
,
x
j
)
=
<
x
i
,
x
j
>
K(x_i,x_j)=<x_i,x_j>
K(xi,xj)=<xi,xj> 称为核函数
当数据集为线性不可分
时,我们可以使用一个非线性特征映射函数
Φ
(
x
)
\Phi(x)
Φ(x) ,将全部原始数据特征
从低维空间
映射到高维空间
,然后在高维空间找出分隔超平面,我们称
Φ
(
x
)
\Phi(x)
Φ(x) 为相似性函数
常见的核函数有以下几种:
1.线性核函数
:最简单的核函数,直接计算两个向量的内积,优点是简单、运行效率高,不涉及复杂的变换,总能生成一个线性分隔超平面,结果易于解释,缺点是对线性不可分数据集无法进行有效的分类
K
(
x
i
,
x
j
)
=
x
i
T
x
j
K(x_i,x_j)=x_i^Tx_j
K(xi,xj)=xiTxj
2.多项式核函数
:通过多项式来作为特征映射函数
Φ
(
x
)
\Phi(x)
Φ(x), 优点是可以拟合出复杂的分隔超平面,缺点是参数太多,有
γ
、
c
、
n
\gamma、c、n
γ、c、n 这3个参数要选择,实际操作中选择一组合适的参数会比较困难,同时阶数不宜太高,不然,当
x
i
T
x
j
<
1
x_i^Tx_j<1
xiTxj<1 时,经过
n
n
n 次运算会接近于0,当
x
i
T
x
j
>
1
x_i^Tx_j >1
xiTxj>1 时,又会变得非常大,这样就造成核函数不太稳定
K ( x i , x j ) = ( γ x i T x j + c ) n K(x_i,x_j)=(\gamma x_i^Tx_j+c)^n K(xi,xj)=(γxiTxj+c)n
3.高斯核函数
:可将输入特征映射到无限多维,所以它的优点是,比 线性核函数 强大的多,同时它比 多项式核函数 更容易计算,因为它计算出来的值永远在 [0, 1] 之间,还有就是它只有一个参数
σ
\sigma
σ,易于参数调优,缺点是映射到无限多维不易于解释。对于
σ
\sigma
σ,如果选得过大,高次特征上的权重会衰减的特别快,核函数会变为一个低维的子空间,反之,如果
σ
\sigma
σ 选得很小,则可将任意数据映射为线性可分,造成严重的过拟合问题
K ( x i , x j ) = exp ( − ( x i − x j ) 2 2 σ 2 ) K(x_i,x_j)=\exp\left(-\frac{(x_i-x_j)^2}{2\sigma^2}\right) K(xi,xj)=exp(−2σ2(xi−xj)2)
然而数据集中,往往存在一些数据点偏离正确的分隔面很远,对于处理这种情况,我们引入一个松弛系数
(slack variable)来允许这些错误的数据点可以处于分隔面的错误一侧,也就是允许分类面的间隔会小于1
我们定义一个
l
o
s
s
loss
loss 函数,用
l
o
s
s
loss
loss 函数表示超出超平面的距离:
如果
y
i
(
W
T
x
i
+
b
)
⩾
1
y_i(W^Tx_i+b)\geqslant1
yi(WTxi+b)⩾1,那么
l
o
s
s
=
0
loss=0
loss=0
如果
y
i
(
W
T
x
i
+
b
)
<
1
y_i(W^Tx_i+b)<1
yi(WTxi+b)<1,那么
l
o
s
s
=
1
−
y
i
(
W
T
x
i
+
b
)
loss=1-y_i(W^Tx_i+b)
loss=1−yi(WTxi+b)
这个
l
o
s
s
loss
loss 被称为
h
i
n
g
e
l
o
s
s
hinge\ loss
hinge loss,这个
l
o
s
s
loss
loss 函数可以写成:
l o s s ( x ) = max { 0 , 1 − y i ( W T x i + b ) } loss(x)=\max \left \{0, 1-y_i(W^Tx_i+b) \right \} loss(x)=max{0,1−yi(WTxi+b)}
那么优化目标函数
就可以写成:
min w , b ( 1 2 W T W + C ∑ i = 1 m max { 0 , 1 − y i ( W T x i + b ) } ) \min_{w,b}\left(\frac{1}{2}W^TW +C\sum_{i=1}^{m} \max \{0, 1-y_i(W^Tx_i+b)\} \right)\\ w,bmin(21WTW+Ci=1∑mmax{0,1−yi(WTxi+b)})
C
C
C 表示惩罚因子
,不过一般不写成上面
max
\max
max 的形式,这里引入一个变量
ξ
\xi
ξ,令
ξ
=
1
−
y
i
(
W
T
x
i
+
b
)
\xi=1-y_i(W^Tx_i+b)
ξ=1−yi(WTxi+b),
ξ
⩾
0
\xi \geqslant0
ξ⩾0
那么优化目标函数
就可以简化成:
min w , b ( 1 2 W T W + C ∑ i = 1 m ξ i ) \min_{w,b}\left(\frac{1}{2}W^TW +C\sum_{i=1}^{m} \xi_i\right) w,bmin(21WTW+Ci=1∑mξi)
这个
∑
i
=
1
m
ξ
i
\sum_{i=1}^{m} \xi_i
∑i=1mξi 被称为软间隔
,此时优化问题
为:
{ max [ min w , b ( 1 2 W T W + C ∑ i = 1 m ξ i ) ] s . t . y i ( W T x i + b ) ⩾ 1 − ξ ξ i ⩾ 0 \left \{ \begin{aligned} &\max\left [ \min_{w,b}\left(\frac{1}{2}W^TW +C\sum_{i=1}^{m} \xi_i\right)\right]\\ &s.t.\ y_i(W^Tx_i+b)\geqslant 1-\xi \\ &\qquad \xi_i\geqslant0 \end{aligned} \right. ⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧max[w,bmin(21WTW+Ci=1∑mξi)]s.t. yi(WTxi+b)⩾1−ξξi⩾0
经过拉格朗日乘子
和对偶变换
后,最终优化问题
就变成了:
{ max λ [ ∑ i = 1 m λ i − 1 2 ∑ i , j = 1 m λ i λ j y i y j x i T x j ] s . t . C ⩾ λ ⩾ 0 ∑ i = 1 m λ i y i = 0 \left \{ \begin{aligned} &\max_{\lambda}\left[\sum_{i=1}^{m}\lambda_i-\frac{1}{2}\sum_{i,j=1}^{m}\lambda_i\lambda_jy_iy_jx_i^Tx_j\right]\\ &s.t. \ C\geqslant \lambda \geqslant0\\ &\quad \sum_{i=1}^{m}\lambda_iy_i=0 \end{aligned} \right. ⎩⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎧λmax[i=1∑mλi−21i,j=1∑mλiλjyiyjxiTxj]s.t. C⩾λ⩾0i=1∑mλiyi=0
可以看到和之前没有引入软间隔
的优化目标函数
是一样的,只是约束条件函数
中由原来的
λ
⩾
0
\lambda \geqslant0
λ⩾0 变成了
C
⩾
λ
⩾
0
C\geqslant \lambda \geqslant0
C⩾λ⩾0
如果
λ
i
=
0
\lambda_i=0
λi=0,那么表示为正确分类,样本点在分类边界内部,
y
i
(
W
T
x
i
+
b
)
>
1
y_i(W^Tx_i+b)>1
yi(WTxi+b)>1
如果
C
>
λ
i
>
0
C>\lambda_i>0
C>λi>0,那么表示为支持向量,样本点在分类边界上,
y
i
(
W
T
x
i
+
b
)
=
1
y_i(W^Tx_i+b)=1
yi(WTxi+b)=1
如果
λ
i
=
C
\lambda_i=C
λi=C,那么表示为离群点,样本点在两条边界之间,
y
i
(
W
T
x
i
+
b
)
<
1
y_i(W^Tx_i+b)<1
yi(WTxi+b)<1
下面用SMO来求解
λ
\lambda
λ,现将上面的优化问题
改一下,换成求最小值,然后用核函数
K
(
x
i
,
x
j
)
K(x_i,x_j)
K(xi,xj) 表示
x
i
T
x
j
x_i^Tx_j
xiTxj 即:
{ min λ [ 1 2 ∑ i , j = 1 m λ i λ j y i y j K ( x i , x j ) − ∑ i = 1 m λ i ] s . t . C ⩾ λ ⩾ 0 ∑ i = 1 m λ i y i = 0 \left \{ \begin{aligned} &\min_{\lambda}\left[\frac{1}{2}\sum_{i,j=1}^{m}\lambda_i\lambda_jy_iy_jK(x_i,x_j)-\sum_{i=1}^{m}\lambda_i\right]\\ &s.t. \ C\geqslant \lambda \geqslant0\\ &\quad \sum_{i=1}^{m}\lambda_iy_i=0 \end{aligned} \right. ⎩⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎧λmin[21i,j=1∑mλiλjyiyjK(xi,xj)−i=1∑mλi]s.t. C⩾λ⩾0i=1∑mλiyi=0
上面的式子比较复杂,里面有 m m m 个变量组成的向量 λ \lambda λ 需要在目标函数极小化的时候求出,直接求比较难。SMO算法则采用了一种启发式的方法,它每次只优化两个变量,将其他的变量都视为常数,比如,如果选择了 λ 1 、 λ 2 \lambda_1、\lambda_2 λ1、λ2 作为变量,那么 λ 3 、 λ 4 . . . λ m \lambda_3、\lambda_4 ... \lambda_m λ3、λ4...λm 就视作常数,这样SMO算法就将一个复杂的优化算法转化为一个比较简单的二变量优化问题了,为了直观理解,将 1 2 ∑ i , j = 1 m λ i λ j y i y j K ( x i , x j ) \frac{1}{2}\sum_{i,j=1}^{m}\lambda_i\lambda_jy_iy_jK(x_i,x_j) 21∑i,j=1mλiλjyiyjK(xi,xj) 的展开式用表格表示,用 K 11 K_{11} K11 表示 K ( x 1 , x 1 ) K(x_1,x_1) K(x1,x1)
1 2 λ 1 λ 1 y 1 y 1 K 11 \frac{1}{2}\lambda_1\lambda_1y_1y_1K_{11} 21λ1λ1y1y1K11 | 1 2 λ 2 λ 1 y 2 y 1 K 21 \frac{1}{2}\lambda_2\lambda_1y_2y_1K_{21} 21λ2λ1y2y1K21 | 1 2 λ 3 λ 1 y 3 y 1 K 31 \frac{1}{2}\lambda_3\lambda_1y_3y_1K_{31} 21λ3λ1y3y1K31 | … | 1 2 λ m λ 1 y m y 1 K m 1 \frac{1}{2}\lambda_m\lambda_1y_my_1K_{m1} 21λmλ1ymy1Km1 |
---|---|---|---|---|
1 2 λ 1 λ 2 y 1 y 2 K 12 \frac{1}{2}\lambda_1\lambda_2y_1y_2K_{12} 21λ1λ2y1y2K12 | 1 2 λ 2 λ 2 y 2 y 2 K 22 \frac{1}{2}\lambda_2\lambda_2y_2y_2K_{22} 21λ2λ2y2y2K22 | 1 2 λ 3 λ 2 y 3 y 2 K 32 \frac{1}{2}\lambda_3\lambda_2y_3y_2K_{32} 21λ3λ2y3y2K32 | … | 1 2 λ m λ 2 y m y 2 K m 2 \frac{1}{2}\lambda_m\lambda_2y_my_2K_{m2} 21λmλ2ymy2Km2 |
1 2 λ 1 λ 3 y 1 y 3 K 13 \frac{1}{2}\lambda_1\lambda_3y_1y_3K_{13} 21λ1λ3y1y3K13 | 1 2 λ 2 λ 3 y 2 y 3 K 23 \frac{1}{2}\lambda_2\lambda_3y_2y_3K_{23} 21λ2λ3y2y3K23 | 1 2 λ 3 λ 3 y 3 y 3 K 33 \frac{1}{2}\lambda_3\lambda_3y_3y_3K_{33} 21λ3λ3y3y3K33 | … | 1 2 λ m λ 3 y m y 3 K m 3 \frac{1}{2}\lambda_m\lambda_3y_my_3K_{m3} 21λmλ3ymy3Km3 |
… | … | … | … | … |
1 2 λ 1 λ m y 1 y m K 1 m \frac{1}{2}\lambda_1\lambda_my_1y_mK_{1m} 21λ1λmy1ymK1m | 1 2 λ 2 λ m y 2 y m K 2 m \frac{1}{2}\lambda_2\lambda_my_2y_mK_{2m} 21λ2λmy2ymK2m | 1 2 λ 3 λ m y 3 y m K 3 m \frac{1}{2}\lambda_3\lambda_my_3y_mK_{3m} 21λ3λmy3ymK3m | … | 1 2 λ m λ m y m y m K m m \frac{1}{2}\lambda_m\lambda_my_my_mK_{mm} 21λmλmymymKmm |
我们只要跟跟
λ
1
、
λ
2
\lambda_1、\lambda_2
λ1、λ2 相关的,其他的
λ
3
、
λ
4
.
.
.
λ
n
\lambda_3、\lambda_4 ... \lambda_n
λ3、λ4...λn 统统不需要,简单的讲,我们只需要前两行
和前两列
,那么:
1 2 λ 1 λ 1 y 1 y 1 K 11 = 1 2 λ 1 2 y 1 2 K 11 = 1 2 λ 1 2 K 11 \frac{1}{2}\lambda_1\lambda_1y_1y_1K_{11}=\frac{1}{2}\lambda_1^2y_1^2K_{11}=\frac{1}{2}\lambda_1^2K_{11} 21λ1λ1y1y1K11=21λ12y12K11=21λ12K11
1 2 λ 2 λ 2 y 2 y 2 K 22 = 1 2 λ 2 2 y 2 2 K 11 = 1 2 λ 2 2 K 22 \frac{1}{2}\lambda_2\lambda_2y_2y_2K_{22}=\frac{1}{2}\lambda_2^2y_2^2K_{11}=\frac{1}{2}\lambda_2^2K_{22} 21λ2λ2y2y2K22=21λ22y22K11=21λ22K22
1 2 λ 1 λ 2 y 1 y 2 K 12 + 1 2 λ 2 λ 1 y 2 y 1 K 21 = λ 1 λ 2 y 1 y 2 K 12 \frac{1}{2}\lambda_1\lambda_2y_1y_2K_{12}+\frac{1}{2}\lambda_2\lambda_1y_2y_1K_{21}=\lambda_1\lambda_2y_1y_2K_{12} 21λ1λ2y1y2K12+21λ2λ1y2y1K21=λ1λ2y1y2K12
1 2 λ 1 λ 3 y 1 y 3 K 13 + 1 2 λ 3 λ 1 y 3 y 1 K 31 + . . . + 1 2 λ 1 λ m y 1 y m K 1 m + 1 2 λ m λ 1 y m y 1 K m 1 = λ 1 y 1 ∑ i = 3 m λ i y i K 1 i \frac{1}{2}\lambda_1\lambda_3y_1y_3K_{13}+\frac{1}{2}\lambda_3\lambda_1y_3y_1K_{31}+...+\frac{1}{2}\lambda_1\lambda_my_1y_mK_{1m}+\frac{1}{2}\lambda_m\lambda_1y_my_1K_{m1}=\lambda_1y_1\sum_{i=3}^{m}\lambda_iy_iK_{1i} 21λ1λ3y1y3K13+21λ3λ1y3y1K31+...+21λ1λmy1ymK1m+21λmλ1ymy1Km1=λ1y1∑i=3mλiyiK1i
1 2 λ 2 λ 3 y 2 y 3 K 23 + 1 2 λ 3 λ 2 y 3 y 2 K 32 + . . . + 1 2 λ 2 λ m y 2 y m K 2 m + 1 2 λ m λ 2 y m y 2 K m 2 = λ 2 y 2 ∑ i = 3 m λ i y i K 2 i \frac{1}{2}\lambda_2\lambda_3y_2y_3K_{23}+\frac{1}{2}\lambda_3\lambda_2y_3y_2K_{32}+...+\frac{1}{2}\lambda_2\lambda_my_2y_mK_{2m}+\frac{1}{2}\lambda_m\lambda_2y_my_2K_{m2}=\lambda_2y_2\sum_{i=3}^{m}\lambda_iy_iK_{2i} 21λ2λ3y2y3K23+21λ3λ2y3y2K32+...+21λ2λmy2ymK2m+21λmλ2ymy2Km2=λ2y2∑i=3mλiyiK2i
相对而言, − ∑ i = 1 m λ i -\sum_{i=1}^{m}\lambda_i −∑i=1mλi 就比较简单了:
− ∑ i = 1 m λ i = − λ 1 − λ 2 − λ 3 − . . . − λ m = − ( λ 1 + λ 2 ) -\sum_{i=1}^{m}\lambda_i=-\lambda_1-\lambda_2-\lambda_3-...-\lambda_m=-(\lambda_1+\lambda_2) −∑i=1mλi=−λ1−λ2−λ3−...−λm=−(λ1+λ2)
那么只用
λ
1
、
λ
2
\lambda_1、\lambda_2
λ1、λ2 来表示上面的优化目标函数
就是:
min w , b [ 1 2 λ 1 2 K 11 + 1 2 λ 2 2 K 22 + λ 1 λ 2 y 1 y 2 K 12 + λ 1 y 1 ∑ i = 3 m λ i y i K 1 i + λ 2 y 2 ∑ i = 3 m λ i y i K 2 i − λ 1 − λ 2 ] \min_{w,b}\left [ \frac{1}{2}\lambda_1^2K_{11}+\frac{1}{2}\lambda_2^2K_{22}+ \lambda_1\lambda_2y_1y_2K_{12}+\lambda_1y_1\sum_{i=3}^{m}\lambda_iy_iK_{1i}+\lambda_2y_2\sum_{i=3}^{m}\lambda_iy_iK_{2i}-\lambda_1-\lambda_2\right]\\ w,bmin[21λ12K11+21λ22K22+λ1λ2y1y2K12+λ1y1i=3∑mλiyiK1i+λ2y2i=3∑mλiyiK2i−λ1−λ2]
令
v
i
=
∑
j
=
3
m
λ
j
o
l
d
y
j
K
i
j
,
s
=
y
1
y
2
v_i=\sum_{j=3}^{m}\lambda_j^{old}y_jK_{ij},s=y_1y_2
vi=∑j=3mλjoldyjKij,s=y1y2,那么优化目标函数
再次简写为:
min w , b [ 1 2 λ 1 2 K 11 + 1 2 λ 2 2 K 22 + λ 1 λ 2 s K 12 + λ 1 y 1 v 1 + λ 2 y 2 v 2 − λ 1 − λ 2 ] \min_{w,b}\left [ \frac{1}{2}\lambda_1^2K_{11}+\frac{1}{2}\lambda_2^2K_{22}+ \lambda_1\lambda_2sK_{12}+\lambda_1y_1v_1+\lambda_2y_2v_2-\lambda_1-\lambda_2\right]\\ w,bmin[21λ12K11+21λ22K22+λ1λ2sK12+λ1y1v1+λ2y2v2−λ1−λ2]
因为 ∑ i = 1 m λ i y i = 0 \sum_{i=1}^{m}\lambda_iy_i=0 ∑i=1mλiyi=0,那么:
λ 1 y 1 + λ 2 y 2 = λ 1 o l d y 1 + λ 2 o l d y 2 = − ∑ i = 3 m λ i y i \lambda_1y_1+\lambda_2y_2=\lambda_1^{old}y_1+\lambda_2^{old}y_2=-\sum_{i=3}^{m}\lambda_iy_i λ1y1+λ2y2=λ1oldy1+λ2oldy2=−i=3∑mλiyi
两边同时乘以 y 1 y_1 y1:
λ 1 + s λ 2 = λ 1 o l d + s λ 2 o l d = w \lambda_1+s\lambda_2=\lambda_1^{old}+s\lambda_2^{old}=w λ1+sλ2=λ1old+sλ2old=w
其中, w = − y 1 ∑ i = 3 m λ i o l d y i w=-y_1\sum_{i=3}^{m}\lambda_i^{old}y_i w=−y1∑i=3mλioldyi ,那么就能用 λ 2 \lambda_2 λ2 来表示 λ 1 \lambda_1 λ1了:
λ 1 = w − s λ 2 \lambda_1=w-s\lambda_2 λ1=w−sλ2
将上式子代入优化目标函数
,得:
min w , b [ 1 2 K 11 ( w − s λ 2 ) 2 + 1 2 K 22 λ 2 2 + s K 12 ( w − s λ 2 ) λ 2 + y 1 ( w − s λ 2 ) v 1 + λ 2 y 2 v 2 − w + s λ 2 − λ 2 ] \min_{w,b}\left [ \frac{1}{2}K_{11}(w-s\lambda_2)^2+\frac{1}{2}K_{22}\lambda_2^2+ sK_{12}(w-s\lambda_2)\lambda_2+y_1(w-s\lambda_2)v_1+\lambda_2y_2v_2-w+s\lambda_2-\lambda_2\right]\\ w,bmin[21K11(w−sλ2)2+21K22λ22+sK12(w−sλ2)λ2+y1(w−sλ2)v1+λ2y2v2−w+sλ2−λ2]
对 λ 2 \lambda_2 λ2 求导:
∂ L ( λ 2 ) ∂ λ 2 = ∂ ∂ λ 2 [ 1 2 K 11 ( w − s λ 2 ) 2 + 1 2 K 22 λ 2 2 + s K 12 ( w − s λ 2 ) λ 2 + y 1 ( w − s λ 2 ) v 1 + λ 2 y 2 v 2 − w + s λ 2 − λ 2 ] = ∂ ∂ λ 2 [ 1 2 K 11 ( w 2 + s 2 λ 2 2 − 2 w s λ 2 ) + 1 2 K 22 λ 2 2 + w s K 12 λ 2 − s 2 K 12 λ 2 2 + y 1 w − s y 1 v 1 λ 2 + y 2 v 2 λ 2 − w + s λ 2 − λ 2 ] = K 11 s 2 λ 2 − k 11 w s + K 22 λ 2 + K 12 w s − 2 K 12 s 2 λ 2 − s y 1 v 1 + y 2 v 2 + s − 1 = K 11 λ 2 − K 11 w s + K 22 λ 2 + K 12 w s − 2 K 12 λ 2 − y 2 v 1 + y 2 v 2 + s − 1 = λ 2 ( K 11 + K 22 − 2 K 12 ) − w s ( K 11 − K 12 ) − y 2 ( v 1 − v 2 ) − ( 1 − s ) \begin{aligned} \frac{\partial L(\lambda_2)}{\partial\lambda_2} &=\frac{\partial}{\partial\lambda_2} \left [ \frac{1}{2}K_{11}(w-s\lambda_2)^2+\frac{1}{2}K_{22}\lambda_2^2+ sK_{12}(w-s\lambda_2)\lambda_2+y_1(w-s\lambda_2)v_1+\lambda_2y_2v_2-w+s\lambda_2-\lambda_2\right]\\ &=\frac{\partial}{\partial\lambda_2} \left [ \frac{1}{2}K_{11}(w^2+s^2\lambda_2^2-2ws\lambda_2)+\frac{1}{2}K_{22}\lambda_2^2+wsK_{12}\lambda_2-s^2K_{12}\lambda_2^2+y_1w-sy_1v_1\lambda_2+y_2v_2\lambda_2-w+s\lambda_2-\lambda_2\right]\\ &=K_{11}s^2\lambda_2-k_{11}ws+K_{22}\lambda_2+K_{12}ws-2K_{12}s^2\lambda_2-sy_1v_1+y_2v_2+s-1\\ &=K_{11}\lambda_2-K_{11}ws+K_{22}\lambda_2+K_{12}ws-2K_{12}\lambda_2-y_2v_1+y_2v_2+s-1\\ &=\lambda_2(K_{11}+K_{22}-2K_{12})-ws(K_{11}-K_{12})-y_2(v_1-v_2)-(1-s) \end{aligned} ∂λ2∂L(λ2)=∂λ2∂[21K11(w−sλ2)2+21K22λ22+sK12(w−sλ2)λ2+y1(w−sλ2)v1+λ2y2v2−w+sλ2−λ2]=∂λ2∂[21K11(w2+s2λ22−2wsλ2)+21K22λ22+wsK12λ2−s2K12λ22+y1w−sy1v1λ2+y2v2λ2−w+sλ2−λ2]=K11s2λ2−k11ws+K22λ2+K12ws−2K12s2λ2−sy1v1+y2v2+s−1=K11λ2−K11ws+K22λ2+K12ws−2K12λ2−y2v1+y2v2+s−1=λ2(K11+K22−2K12)−ws(K11−K12)−y2(v1−v2)−(1−s)
令 ∂ L ( λ 2 ) ∂ λ 2 = 0 \frac{\partial L(\lambda_2)}{\partial\lambda_2}=0 ∂λ2∂L(λ2)=0,则:
λ 2 ( K 11 + K 22 − 2 K 12 ) = w s ( K 11 − K 12 ) + y 2 ( v 1 − v 2 ) + ( 1 − s ) \lambda_2(K_{11}+K_{22}-2K_{12})=ws(K_{11}-K_{12})+y_2(v_1-v_2)+(1-s) λ2(K11+K22−2K12)=ws(K11−K12)+y2(v1−v2)+(1−s)
因为 v i = ∑ j = 3 m λ j o l d y j K i j , f ( x i ) = ∑ j = 1 m λ j y j K i j v_i=\sum_{j=3}^{m}\lambda_j^{old}y_jK_{ij},f(x_i)=\sum_{j=1}^{m}\lambda_jy_jK_{ij} vi=∑j=3mλjoldyjKij,f(xi)=∑j=1mλjyjKij,那么其实 v 1 v_1 v1 可以写成: v i = f ( x i ) − b − λ 1 o l d y 1 K 1 i − λ 2 o l d y 2 K 2 i v_i=f(x_i)-b-\lambda_1^{old}y_1K_{1i}-\lambda_2^{old}y_2K_{2i} vi=f(xi)−b−λ1oldy1K1i−λ2oldy2K2i
将 w = λ 1 o l d + s λ 2 o l d , v i = f ( x i ) − b − λ 1 y 1 K 1 i − λ 2 y 2 K 2 i w=\lambda_1^{old}+s\lambda_2^{old},v_i=f(x_i)-b-\lambda_1y_1K_{1i}-\lambda_2y_2K_{2i} w=λ1old+sλ2old,vi=f(xi)−b−λ1y1K1i−λ2y2K2i 代入:
λ 2 ( K 11 + K 22 − 2 K 12 ) = w s ( K 11 − K 12 ) + y 2 ( v 1 − v 2 ) + ( 1 − s ) = s ( λ 1 o l d + s λ 2 o l d ) ( K 11 − K 12 ) + y 2 ( f ( x 1 ) − b − λ 1 o l d y 1 K 11 − λ 2 o l d y 2 K 21 − f ( x 2 ) + b + λ 1 o l d y 1 K 12 + λ 2 o l d y 2 K 22 ) + 1 − s = s K 11 λ 1 o l d + K 11 λ 2 o l d − s K 12 λ 1 o l d − K 12 λ 2 o l d + y 2 ( f ( x 1 ) − f ( x 2 ) ) + 1 − s − s K 11 λ 1 o l d − K 21 λ 2 o l d + s K 12 λ 1 o l d + K 22 λ 2 o l d = K 11 λ 2 o l d + K 22 λ 2 o l d − 2 K 12 λ 2 o l d + y 2 ( f ( x 1 ) − f ( x 2 ) + y 2 − y 1 ) = λ 2 o l d ( K 11 + K 22 − 2 K 12 ) + y 2 ( f ( x 1 ) − y 1 − ( f ( x 2 ) − y 2 ) ) \begin{aligned} \lambda_2(K_{11}+K_{22}-2K_{12}) &=ws(K_{11}-K_{12})+y_2(v_1-v_2)+(1-s)\\ &=s(\lambda_1^{old}+s\lambda_2^{old})(K_{11}-K_{12})+y_2(f(x_1)-b-\lambda_1^{old}y_1K_{11}-\lambda_2^{old}y_2K_{21}-f(x_2)+b+\lambda_1^{old}y_1K_{12}+\lambda_2^{old}y_2K_{22})+1-s\\ &=sK_{11}\lambda_1^{old} +K_{11}\lambda_2^{old}-sK_{12}\lambda_1^{old}-K_{12}\lambda_2^{old}+y_2(f(x_1)-f(x_2))+1-s\\ &\quad-sK_{11}\lambda_1^{old}-K_{21}\lambda_2^{old}+sK_{12}\lambda_1^{old}+K_{22}\lambda_2^{old}\\ &=K_{11}\lambda_2^{old}+K_{22}\lambda_2^{old}-2K_{12}\lambda_2^{old}+y_2(f(x_1)-f(x_2)+y_2-y_1)\\ &=\lambda_2^{old}(K_{11}+K_{22}-2K_{12})+y_2(f(x_1)-y_1-(f(x_2)-y_2)) \end{aligned} λ2(K11+K22−2K12)=ws(K11−K12)+y2(v1−v2)+(1−s)=s(λ1old+sλ2old)(K11−K12)+y2(f(x1)−b−λ1oldy1K11−λ2oldy2K21−f(x2)+b+λ1oldy1K12+λ2oldy2K22)+1−s=sK11λ1old+K11λ2old−sK12λ1old−K12λ2old+y2(f(x1)−f(x2))+1−s−sK11λ1old−K21λ2old+sK12λ1old+K22λ2old=K11λ2old+K22λ2old−2K12λ2old+y2(f(x1)−f(x2)+y2−y1)=λ2old(K11+K22−2K12)+y2(f(x1)−y1−(f(x2)−y2))
令 ( K 11 + K 22 − 2 K 12 ) = η , E i = f ( x i ) − y i (K_{11}+K_{22}-2K_{12})=\eta, E_i=f(x_i)-y_i (K11+K22−2K12)=η,Ei=f(xi)−yi,然后两边同时除以 ( K 11 + K 22 − 2 K 12 ) (K_{11}+K_{22}-2K_{12}) (K11+K22−2K12),得:
λ 2 = λ 2 o l d + y 2 ( E 1 − E 2 ) η \lambda_2=\lambda_2^{old}+\frac{y_2(E_1-E_2)}{\eta} λ2=λ2old+ηy2(E1−E2)
最终,上面的式子就是对
λ
2
\lambda_2
λ2 的更新公式
了 (心累~)
然后由于 λ 1 + s λ 2 = λ 1 o l d + s λ 2 o l d \lambda_1+s\lambda_2=\lambda_1^{old}+s\lambda_2^{old} λ1+sλ2=λ1old+sλ2old,我们可以求得:
λ 1 = λ 1 o l d + s λ 2 o l d − s λ 2 = λ 1 o l d + y 1 y 2 ( λ 2 o l d − λ 2 ) \begin{aligned} \lambda_1 &=\lambda_1^{old}+s\lambda_2^{old}-s\lambda_2\\ &=\lambda_1^{old}+y_1y_2(\lambda_2^{old}-\lambda_2) \end{aligned} λ1=λ1old+sλ2old−sλ2=λ1old+y1y2(λ2old−λ2)
不过由于
C
⩾
λ
1
⩾
0
、
C
⩾
λ
2
⩾
0
C\geqslant \lambda1\geqslant0、C\geqslant \lambda_2\geqslant0
C⩾λ1⩾0、C⩾λ2⩾0,且
λ
1
y
1
+
λ
2
y
2
=
ξ
\lambda_1y_1+\lambda2y_2=\xi
λ1y1+λ2y2=ξ,(
ξ
\xi
ξ 为自定义常数),当
y
1
、
y
2
y_1、y_2
y1、y2 异号时,有
λ
1
−
λ
2
=
ξ
\lambda_1-\lambda_2=\xi
λ1−λ2=ξ,如下图所示,
λ
1
、
λ
2
\lambda_1、\lambda_2
λ1、λ2 的解在直线上,且在矩形内部,我们用
λ
2
\lambda_2
λ2 来表示
λ
1
\lambda_1
λ1,先优化的是
λ
2
\lambda_2
λ2,那么我们就看纵轴
λ
2
\lambda_2
λ2:
当为左上条直线时,最小值为
−
ξ
-\xi
−ξ,当为右下角的直线时,最小值为0,由于
λ
2
\lambda_2
λ2必须严格满足大于等于最小值,因此我们需要大于最小值里最大的那一个,所以我们这时候选择较大的那个
−
ξ
-\xi
−ξ,根据
λ
1
−
λ
2
=
ξ
\lambda_1-\lambda_2=\xi
λ1−λ2=ξ 可得:
−
ξ
=
λ
2
−
λ
1
-\xi=\lambda_2-\lambda_1
−ξ=λ2−λ1
当为左上条直线时,最大值为 C C C,当为右下角的直线时,最大值为 C − ξ C-\xi C−ξ,由于 λ 2 \lambda_2 λ2必须严格满足小于等于最大值,因此我们需要小于最大值里最小的那一个,所以我们这时候选择较小的那个 C − ξ C-\xi C−ξ,根据 λ 1 − λ 2 = ξ \lambda_1-\lambda_2=\xi λ1−λ2=ξ 可得: C − ξ = C + λ 2 − λ 1 C-\xi=C+\lambda_2-\lambda_1 C−ξ=C+λ2−λ1
当 y 1 、 y 2 y_1、y_2 y1、y2 同号时, λ 1 + λ 2 = ξ \lambda_1+\lambda_2=\xi λ1+λ2=ξ,整理如下:
y 1 ≠ y 2 { L = max { 0 , λ 2 − λ 1 } H = min { C , C + λ 2 − λ 1 } y_1 \neq y_2 \left \{ \begin{aligned} &L=\max\{0, \lambda_2-\lambda_1\}\\ &H=\min\{C, C+\lambda_2-\lambda_1\} \end{aligned} \right. y1̸=y2{L=max{0,λ2−λ1}H=min{C,C+λ2−λ1}
y 1 = y 2 { L = max { 0 , λ 2 + λ 1 − C } H = min { C , λ 2 + λ 1 } y_1=y_2 \left \{ \begin{aligned} &L=\max\{0, \lambda_2+\lambda_1-C\}\\ &H=\min\{C, \lambda_2+\lambda_1\} \end{aligned} \right. y1=y2{L=max{0,λ2+λ1−C}H=min{C,λ2+λ1}
每次计算出来的 λ 2 \lambda_2 λ2,根据对应的 y 1 、 y 2 y_1、y_2 y1、y2 同号或异号的情况中对于的 H H H 和 L L L,进行判断,当 H > λ > L H>\lambda>L H>λ>L 时,我们才让 λ 2 \lambda_2 λ2 进行更新,超出 H H H 则更新为 H H H,低于 L L L 则更新为 L L L
然后再计算 b b b,在每次完成两个变量的优化之后,当 C > λ 1 n e w > 0 C>\lambda_1^{new}>0 C>λ1new>0 时,有 f ( x 1 ) = y 1 f(x_1)=y_1 f(x1)=y1,即: ∑ i = 1 m λ i y i K i 1 + b 1 = y 1 \sum_{i=1}^{m}\lambda_iy_iK_{i1}+b_1=y_1 ∑i=1mλiyiKi1+b1=y1,那么:
b 1 n e w = y 1 − ∑ i = 1 m λ i y i K i 1 = y 1 − ∑ i = 3 m λ i y i K i 1 − λ 1 n e w y 1 K 11 − λ 2 n e w y 2 K 21 \begin{aligned} b_1^{new} &=y_1-\sum_{i=1}^{m}\lambda_iy_iK_{i1}\\ &=y_1-\sum_{i=3}^{m}\lambda_iy_iK_{i1}-\lambda_1^{new}y_1K_{11}-\lambda_2^{new}y_2K_{21} \end{aligned} b1new=y1−i=1∑mλiyiKi1=y1−i=3∑mλiyiKi1−λ1newy1K11−λ2newy2K21
因为 E i = f ( x i ) − y i E_i=f(x_i)-y_i Ei=f(xi)−yi,那么:
E 1 = ∑ i = 1 m λ i y i K i 1 + b 1 − y 1 = ∑ i = 3 m λ i y i K i 1 + λ 1 o l d y 1 K 11 + λ 2 o l d y 2 K 21 + b 1 o l d − y 1 \begin{aligned} E_1 &=\sum_{i=1}^{m}\lambda_iy_iK_{i1}+b_1-y_1\\ &=\sum_{i=3}^{m}\lambda_iy_iK_{i1}+\lambda_1^{old}y_1K_{11}+\lambda_2^{old}y_2K_{21}+b_1^{old}-y_1 \end{aligned} E1=i=1∑mλiyiKi1+b1−y1=i=3∑mλiyiKi1+λ1oldy1K11+λ2oldy2K21+b1old−y1
那么可以得到:
y 1 − ∑ i = 3 m λ i y i K i 1 = b 1 o l d − E 1 + λ 1 o l d y 1 K 11 + λ 2 o l d y 2 K 21 y_1-\sum_{i=3}^{m}\lambda_iy_iK_{i1}=b_1^{old}-E_1+\lambda_1^{old}y_1K_{11}+\lambda_2^{old}y_2K_{21} y1−i=3∑mλiyiKi1=b1old−E1+λ1oldy1K11+λ2oldy2K21
将上式代入 b 1 n e w b_1^{new} b1new,得:
b 1 n e w = b 1 o l d − E 1 + λ 1 o l d y 1 K 11 + λ 2 o l d y 2 K 21 − λ 1 n e w y 1 K 11 − λ 2 n e w y 2 K 21 = b 1 o l d − E 1 − y 1 K 11 ( λ 1 n e w − λ 1 o l d ) − y 2 K 21 ( λ 2 n e w − λ 2 o l d ) \begin{aligned} b_1^{new} &=b_1^{old}-E_1+\lambda_1^{old}y_1K_{11}+\lambda_2^{old}y_2K_{21}-\lambda_1^{new}y_1K_{11}-\lambda_2^{new}y_2K_{21}\\ &=b_1^{old}-E_1-y_1K_{11}(\lambda_1^{new}-\lambda_1^{old})-y_2K_{21}(\lambda_2^{new}-\lambda_2^{old}) \end{aligned} b1new=b1old−E1+λ1oldy1K11+λ2oldy2K21−λ1newy1K11−λ2newy2K21=b1old−E1−y1K11(λ1new−λ1old)−y2K21(λ2new−λ2old)
如果
C
>
λ
2
>
0
C>\lambda_2>0
C>λ2>0,同理可得:
b
2
n
e
w
=
b
2
o
l
d
−
E
2
+
λ
1
o
l
d
y
1
K
12
+
λ
2
o
l
d
y
2
K
22
−
λ
1
n
e
w
y
1
K
12
−
λ
2
n
e
w
y
2
K
22
=
b
2
o
l
d
−
E
2
−
y
1
K
12
(
λ
1
n
e
w
−
λ
1
o
l
d
)
−
y
2
K
22
(
λ
2
n
e
w
−
λ
2
o
l
d
)
\begin{aligned} b_2^{new} &=b_2^{old}-E_2+\lambda_1^{old}y_1K_{12}+\lambda_2^{old}y_2K_{22}-\lambda_1^{new}y_1K_{12}-\lambda_2^{new}y_2K_{22}\\ &=b_2^{old}-E_2-y_1K_{12}(\lambda_1^{new}-\lambda_1^{old})-y_2K_{22}(\lambda_2^{new}-\lambda_2^{old}) \end{aligned}
b2new=b2old−E2+λ1oldy1K12+λ2oldy2K22−λ1newy1K12−λ2newy2K22=b2old−E2−y1K12(λ1new−λ1old)−y2K22(λ2new−λ2old)
最后来根据 λ 1 、 λ 2 \lambda_1、\lambda_2 λ1、λ2 来确定最终 b n e w b^{new} bnew 的值:
b n e w = { b 1 n e w , C > λ 1 > 0 b 2 n e w , C > λ 2 > 0 b 1 n e w + b 2 n e w 2 , o t h e r w i s e b^{new}= \left \{ \begin{aligned} &b_1^{new},\qquad \quad C>\lambda_1>0\\ &b_2^{new},\qquad \quad C>\lambda_2>0\\ &\frac{b_1^{new}+b_2^{new}}{2},\ otherwise \end{aligned} \right. bnew=⎩⎪⎪⎪⎨⎪⎪⎪⎧b1new,C>λ1>0b2new,C>λ2>02b1new+b2new, otherwise
Ok,终于将所有的公式推完了,上代码:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import numpy as np
def load_dataset(file_name):
data_mat, label_mat = [], []
fr = open(file_name)
for line in fr.readlines():
line_arr = line.strip().split('\t')
data_mat.append([float(line_arr[0]), float(line_arr[1])])
label_mat.append(float(line_arr[2]))
return data_mat, label_mat
def select_random_j(i, m):
j = i
while j == i:
j = int(np.random.uniform(0, m))
return j
def clip_alpha(aj, H, L):
if aj > H:
aj = H
if L > aj:
aj = L
return aj
def smo_simple(data_mat_in, class_labels, C, toler, max_cycle): # C:常数 toler:容错率
data_matrix = np.mat(data_mat_in)
label_matrix = np.mat(class_labels).transpose()
b = 0
m, n = np.shape(data_matrix) # (100, 2)
lambdas = np.mat(np.zeros((m, 1))) # (100, 1)
cycle = 0
while cycle < max_cycle:
lambda_pairs_changed = 0 # 记录 lambda 是否已经进行优化
for i in range(m): # 遍历每行数据集
xi, yi = data_matrix[i, :], label_matrix[i]
fxi = float(np.multiply(lambdas, label_matrix).T * (data_matrix * xi.T)) + b # 预测类别: f(x)=∑λⁱyⁱ<xⁱ·xᵀ> + b
Ei = fxi - float(yi) # 基于xi的预测结果和真实结果的比对,就可以计算误差Ei
# 如果误差超出容错率和错误分类允许的边界,lambda值不能等于0或C,等于这两个值的话,它们就已经在"边界"上了,因而不能够再减小或增大,因此也就不值得再对它们进行优化了
if (yi * Ei < -toler) and (lambdas[i] < C) or (yi * Ei > toler) and (lambdas[i] > 0):
j = select_random_j(i, m) # 返回一个随机数
xj, yj = data_matrix[j, :], label_matrix[j] # 随机向量xj
fxj = float(np.multiply(lambdas, label_matrix).T * (data_matrix * xj.T)) + b # 预测类别: f(x)=∑λⁱyⁱ<xⁱ·xᵀ> + b
Ej = fxj - float(yj) # 基于xj的预测结果和真实结果的比对,就可以计算误差Ej
lambda_i_old = lambdas[i].copy() # 原 λⁱ
lambda_j_old = lambdas[j].copy() # 原 λʲ
if yi != yj: # yi与yj异号,即一个为+1,另一个为-1
L = max(0, lambdas[j] - lambdas[i]) # 大于最小值中较大的一个
H = min(C, C + lambdas[j] - lambdas[i]) # 小于最大值中较小的一个
else: # yi与yj同号,都为+1或-1
L = max(0, lambdas[j] + lambdas[i] - C)
H = min(C, lambdas[j] + lambdas[i])
if L == H:
print("L==H")
continue
eta = 2.0 * xi * xj.T - xi * xi.T - xj * xj.T # η: 最优修改量
if eta >= 0:
print("eta>=0")
continue
lambdas[j] -= yj * (Ei - Ej) / eta #
lambdas[j] = clip_alpha(lambdas[j], H, L) # 更新: H > lambda_j > L
if abs(lambdas[j] - lambda_j_old) < 0.00001: # lambdas[j]变化很小则执行跳过
print("j not moving enough")
continue
lambdas[i] += yj * yi * (lambda_j_old - lambdas[j]) # 更新lambda_i
b1 = b - Ei - yi * (lambdas[i] - lambda_i_old) * xi * xi.T - yj * (lambdas[j] - lambda_j_old) * xi * xj.T # 更新b1
b2 = b - Ej - yi * (lambdas[i] - lambda_i_old) * xi * xj.T - yj * (lambdas[j] - lambda_j_old) * xj * xj.T # 更新b2
if 0 < lambdas[i] < C:
b = b1
elif 0 < lambdas[j] < C:
b = b2
else:
b = (b1 + b2) / 2.0
lambda_pairs_changed += 1 # lambda修正次数+1
print("cycle: %d i:%d, pairs changed %d" % (cycle, i, lambda_pairs_changed))
if lambda_pairs_changed == 0: # 本轮循环中lambda没有被改变 (lambda已优化)
cycle += 1
else: # 本轮循环中lambda被改变了 (lambda存在继续优化的可能)
cycle = 0
print("iteration number: %d" % cycle)
return b, lambdas
if __name__ == '__main__':
data_mat, label_mat = load_dataset('testSet.txt')
b, lambdas = smo_simple(data_mat, label_mat, 0.6, 0.001, 40)
print(lambdas)
print(b)