支持向量机(SVM)和python实现(二)

4. 松弛向量与软间隔

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

(4.1) y i ( ω T x i + b ) 1

于是我们修改了优化目标:
(4.2) m i n . 1 2 ω 2 + C i = 1 m l 0 / 1 ( y i ( ω T x i + b ) 1 )

其中C>0是一个常数, l 0 / 1 ( z ) 是“0/1损失函数”
l 0 / 1 ( z ) = { 1 , i f   z < 0 0 , o t h e r w i s e

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

若采用hinge损失函数,则式(4.2)变成了:
(4.3) m i n . 1 2 ω 2 + C i = 1 m m a x ( 0 , 1 y i ( ω T x i + b ) )

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

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

我们重新引入拉格朗日乘子 α i 0         i = 1 , 2 , . . . , m ,可得:
L ( ω , b , α , ξ , β ) = 1 2 ω 2 + C i = 1 m ξ i + i = 1 m α i ( 1 ξ i + y i ( ω T φ ( x i ) + b ) ) i = 1 m β i ξ i

ω , b , ξ i 分别求偏导,得:
{ ω = i = 1 m α i y i φ ( x i ) 0 = i = 1 m α i y i C = α i + β i

将结果带入原式得对偶问题:
(4.6) m a x . i = 1 m α i 1 2 i = 1 , y = 1 m α i α j y i y j κ ( x i , x j ) s . t .     i = 1 m α i y i = 0           0 α i C

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

5. SMO算法

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

  • α i = 0 时, β i = C ,则 ξ i = 0 ,得 y i f ( x i ) 1
  • α i = C 时, β i = 0 ,则 ξ i 0 ,且 y i f ( x i ) 1 + ξ i = 0 ,得 y i f ( x i ) 1
  • 0 < α i < C 时, 0 < β i < C ,则 ξ i = 0 ,且 y i f ( x i ) 1 + ξ i = 0 ,得 y i f ( x i ) = 1

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

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

(5.1) y 1 α 1 + y 2 α 2 = N N = i 1 , 2 m y i α i

因为 y i y i = 1 ,则有:
(5.2) α 1 = N y 1 y 1 y 2 α 2

α i α j 代入式(4.6),得:
(5.3) W ( α 1 , α 2 ) = α 1 + α 2 1 2 α 1 2 y 1 2 κ 11 1 2 α 2 2 y 2 2 κ 22 i = 3 m α 1 α i y 1 y i κ ( 1 , i ) i = 3 m α 2 α i y 2 y i κ ( 2 , i ) + C

C为一些常数的和
我们令 v 1 = i = 3 m α 1 α i y 1 y i κ ( 1 , i ) , v 2 = i = 3 m α 2 α i y 2 y i κ ( 2 , i ) ,则式(5.3)改为:
W ( α 1 , α 2 ) = α 1 + α 2 1 2 α 1 2 y 1 2 κ 11 1 2 α 2 2 y 2 2 κ 22 α 1 y 1 v 1 α 2 y 2 v 2 + C

代入式(5.2)得
(5.4) W ( α 2 ) = 1 2 y 1 2 ( N y 1 y 1 y 2 α 2 ) 2 κ 1 , 1 1 2 α 2 2 y 2 2 κ 2 , 2 ( N y 1 y 1 y 2 α 2 ) α 2 y 1 y 2 κ 1 , 2 ( N y 1 y 1 y 2 α 2 ) y 1 v 1 α 2 y 2 v 2 + α 1 + α 2 + C = 1 2 ( N y 2 α 2 ) 2 κ 1 , 2 1 2 α 2 2 κ 1 , 2 ( y 2 N α 2 α 2 2 ) κ 1 , 2 ( N y 2 α 2 ) v 1 α 2 y 2 v 2 + N y 1 y 1 y 2 α 2 + α 2 + C

对(5.4)求导得0:
(5.5) W ( α 2 ) α 2 = N y 2 κ 1 , 1 α 2 κ 1 , 1 α 2 k 2 , 2 y 2 N κ 1 , 2 + 2 α 2 κ 1 , 2 + y 2 v 1 y 2 v 2 y 1 y 2 + 1 = ( κ 1 , 1 + κ 2 , 2 2 κ 1 , 2 ) α 2 + κ 1 , 1 N y 2 κ 1 , 2 N y 2 + v 1 y 2 v 2 y 2 y 1 y 2 + 1 = 0

由于 f ( x ) = i = 1 m α i y i κ ( x i , x ) + b ,则有:
v 1 = i = 3 m α i y i κ i , 1 = f ( x 1 ) α 1 o l d y 1 κ 1 , 1 α 2 o l d y 2 κ 1 , 2 b v 2 = f ( x 2 ) α 1 o l d y 1 κ 1 , 2 α 2 o l d y 2 κ 2 , 2 b

又因为 α 1 o l d = ( N α 2 o l d y 2 ) y 1 ,则:
v 1 v 2 = f ( x 1 ) f ( x 2 ) κ 1 , 1 N + κ 1 , 2 N + ( κ 1 , 1 + κ 2 , 2 2 κ 1 , 2 ) α 2 o l d y 2

代入(5.5):
(5.6) W ( α 2 ) α 2 = ( κ 1 , 1 + κ 2 , 2 2 κ 1 , 2 ) α 2 n e w + ( κ 1 , 1 + κ 2 , 2 2 κ 1 , 2 ) α 2 o l d + y 2 ( y 2 y 1 + f ( x 1 ) f ( x 2 ) )

η = κ 1 , 1 + κ 2 , 2 2 κ 1 , 2 E = f ( x ) y ,则:
W ( α 2 ) α 2 = η α 2 n e w + η α 2 o l d + y 2 ( E 2 E 1 ) = 0

(5.7) α 2 n e w = α 2 o l d + y 2 ( E 1 E 2 ) η

这样我们就获得了新的 α 2 值,但是不要忘记, α 是存在约束的: 0 α C
这里写图片描述
(图来自 https://blog.csdn.net/u011734144/article/details/81233553
y 1 y 2 α 2 的上下界为:

  • 下界: L = m a x ( 0 , α 2 o l d α 1 o l d )
  • 上界: H = m i n ( C , C + α 2 o l d α 1 o l d )

y 1 = y 2 α 2 的上下界为:

  • 下界: L = m a x ( 0 , α 1 o l d + α 2 o l d C )
  • 上界: H = m a x ( C , α 1 o l d + α 2 o l d )
    这样我们就能获得约束后的 α 2 n e w
    α 2 n e w / c o n s t r a i n t = { H α 2 n e w > H α 2 n e w L α 2 n e w H L α 2 n e w < L

    然后我们就可以根据 α 1 o l d y 1 + α 2 o l d y 2 = α 1 n e w y 1 + α 2 n e w y 2 计算 α 1 n e w 了:
    α 1 n e w = a l p h a 1 o l d + y 1 y 2 ( a l p h a 2 o l d a l p h a 2 n e w )

    未完待续

猜你喜欢

转载自blog.csdn.net/z962013489/article/details/82559626