从零开始-Machine Learning学习笔记(12)-SMO算法解析

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/kabuto_hui/article/details/80369793

​ SMO-Sequential Minimal Optimization,序列最小优化,SMO的基本思路就是:先固定 α i 之外的所有参数,然后求 α i 的极值。但是问题中存在约束条件: i = 0 m α i y i = 0 。如果固定了 α i 之外的其他变量,则 α i 可以由其他的变量导出。于是,一次只留一个参数,固定其余参数的方法在这里是不适用的,但是这个思想却给了我们不错的启发。那么,SMO可以每次选择两个变量 α i α j ,并固定其他参数。这样,在参数初始化之后,SMO不断迭代重复下面的步骤,直至收敛:

  • 选取一对新的 α i α j ;

  • 固定 α i α j 之外的参数,求解前面的优化问题,获取更新后的 α i α j

    假设我们选择 α 1 α 2 是变量,其余的 α i 是定值,常数,那么原来的目标函数:

    min α 1 2 i = 1 N j = 1 N α i α j y i y j K ( x i x j ) i = 1 N α i s . t . i = 1 N α i y i = 0 0 α i C , i = 1 , 2 , N

就变为对 α 1 α 2 的优化:

min α 1 , α 2 W ( α 1 , α 2 )

1. 原目标函数化简

​ 我们来逐步化简原来的目标函数,其中只有 α 1 α 2 是变量,其余的都是常数:

min α 1 2 i = 1 N j = 1 N α i α j y i y j K ( x i x j ) i = 1 N α i

我们分别取

i = 1 , j = 1

i = 1 , j = 2

i = 1 , j 1 , 2

j = 1 , i 1 , 2

i = 2 , j = 1

i = 2 , j = 2

i = 2 , j 1 , 2

j = 2 , i 1 , 2

i 1 , 2 , j 1 , 2

这样我们就可以把目标函数化成只有变量 α 1 α 2 ,其余的项都可以合并为常数C:

min α 1 2 i = 1 N j = 1 N α i α j y i y j K ( x i x j ) i = 1 N α i = min α 1 2 [ α 1 2 K 11 + α 1 α 2 y 1 y 2 K 12 + 2 j = 3 N α 1 α j y 1 y j K 1 j         + α 2 α 1 y 2 y 1 K 21 + α 2 2 K 22 + 2 j = 3 N α 2 α j y 2 y j K 2 j + C 1 ]         ( α 1 + α 2 ) C 2 = min α 1 2 [ α 1 2 K 11 + α 2 2 K 22 + 2 α 1 α 2 y 1 y 2 K 12 + 2 j = 3 N α 1 α j y 1 y j K 1 j         + 2 j = 3 N α 2 α j y 2 y j K 2 j ] ( α 1 + α 2 ) + C = min α 1 2 [ α 1 2 K 11 + α 2 2 K 22 + 2 α 1 α 2 y 1 y 2 K 12 + 2 α 1 y 1 v 1 + 2 α 2 y 2 v 2 ] ( α 1 + α 2 ) + C

其中:
v 1 = j = 3 N α j y j K 1 j v 2 = j = 3 N α j y j K 2 j

于是,我们的目标函数就转化为上式的样子。

2. 解的范围

要求解上述的优化问题,必定先确定解的范围,根据原来的约束条件我们知道:

α 1 y 1 + α 2 y 2 = K 0 < α 1 < C 0 < α 2 < C

其中我们知道 y i 2 = 1 ,所以对于第一个约束条件我们可以有两种表示方式:

y 1 = y 2 α 1 + α 2 = K

y 1 y 2 α 1 α 2 = K

这里写图片描述

​ k具体是多少我们并不关心,但是我们知道α1和α2的取值都落在途中的直线上。k无非就是一个截距,随着k的变化,这根直线在方框内会上下移动,交点也变,但是一定要在方框范围内,所以边界一定会落在方框与直线的交点上。设L为α2可能的最小取值,H为α2可能的最大取值,那么有:

  1. y 1 = y 2 α 1 + α 2 = K α 2 = K α 1

    我们都知道 0 < α 1 < C , 0 < α 2 < C ;

    α 1 = C 时, α 2 取得最小值,即 α 2 = K C ,但是, 0 < α 2 ,所以最小值在这两者中取得,于是:

    L = m a x { 0 , K C } = m a x { 0 , α 1 + α 2 C }

    α 1 = 0 时, α 2 取得最大值,即 α 2 = K 但是, α 2 < C ,所以最大值在这两者中取得,于是:
    H = m i n { K , C } = m i n { α 1 + α 2 , C }

  2. y 1 y 2 α 1 α 2 = K α 2 = α 1 K

    我们都知道 0 < α 1 < C , 0 < α 2 < C ;

    α 1 = 0 时, α 2 取得最小值,即 α 2 = K 但是, 0 < α 2 以最小值在这两者中取得,于是:

L = m a x { 0 , K } = m a x { 0 , α 2 α 1 }

​ 当 α 1 = C 时, α 2 取得最大值,即 α 2 = C K 但是, α 2 < C ,所以最大值在这两者中取得,于是:

H = m i n { C , C K } = m i n { C , C + α 2 α 1 }

3.求解过程

​ 先将 α 1 α 2 来表示,因为 α 1 y 1 + α 2 y 2 = k c o n s t ,两边同时乘以 y 1 ,于是有:

α 1 = ( k α 2 y 2 ) y 1

带入到我们之前化简的目标函数中,那么目标函数就变为只有变量 α 2 的优化问题了:
min α 1 2 [ α 1 2 K 11 + α 2 2 K 22 + 2 α 1 α 2 y 1 y 2 K 12 + 2 α 1 y 1 v 1 + 2 α 2 y 2 v 2 ] ( α 1 + α 2 ) + C = min α 1 2 [ ( ( k α 2 y 2 ) y 1 ) 2 K 11 + 2 ( k α 2 y 2 ) α 2 y 2 K 12       + 2 ( k α 2 y 2 ) v 1 + 2 α 2 y 2 v 2 ] ( ( k α 2 y 2 ) y 1 + α 2 ) + C

其中,v1与v2需要变换一下,不能直接运算,因为SVM的模型为:
f ( x ) = w T x + b = i = 1 N α i y i K ( x i , x j ) + b , f ( x 1 ) = α 1 y 1 K 11 + α 2 y 2 K 12 + i = 3 N α i y i K ( x i , x j ) + b = α 1 y 1 K 11 + α 2 y 2 K 12 + v 1 + b f ( x 2 ) = α 1 y 1 K 12 + α 2 y 2 K 22 + i = 3 N α i y i K ( x i , x j ) + b = α 1 y 1 K 12 + α 2 y 2 K 22 + v 2 + b

所以可以间接求出v1与v2为:
v 1 = f ( x 1 ) α 1 y 1 K 11 α 2 y 2 K 12 b = f ( x 1 ) ( k α 2 y 2 ) K 11 α 2 y 2 K 12 b v 2 = f ( x 2 ) α 1 y 1 K 12 α 2 y 2 K 22 b = f ( x 2 ) ( k α 2 y 2 ) K 12 α 2 y 2 K 22 b

所以,此时目标函数就只是一元函数,我们对其求倒数,并使其为0,就可以求出 α 2 :
W α 2 = 1 2 [ 2 ( ( k α 2 y 2 ) y 1 ) ( y 1 y 2 ) K 11 + 2 α 2 K 22 + 2 ( k 2 α 2 y 2 ) y 1 y 1 y 2 K 12 + 2 ( y 1 y 2 ) α 2 ( y 1 y 2 ) K 12                     + 2 ( y 1 y 2 ) y 1 v 1 + 2 y 2 v 2 ] ( y 1 y 2 + 1 ) = ( α 2 k y 2 ) K 11 + α 2 K 22 + ( k y 2 2 α 2 ) K 12 y 2 v 1 + y 2 v 2 + y 1 y 2 1 = α 2 ( K 11 + K 22 2 K 12 ) k y 2 K 11 + k y 2 K 12 y 2 v 1 + y 2 v 2 + y 1 y 2 1 = α 2 ( K 11 + K 22 2 K 12 ) k y 2 K 11 + k y 2 K 12 y 2 ( v 1 v 2 ) + y 1 y 2 1 = 0

此时我们把v1与v2带入就可以得到迭代公式:

α 2 ( K 11 + K 22 2 K 12 ) = k y 2 ( K 11 K 12 ) + y 2 ( v 1 v 2 ) y 1 y 2 + 1 = k y 2 ( K 11 K 12 ) + y 2 [ f ( x 1 ) f ( x 2 ) + ( k α 2 y 2 ) ( K 12 K 11 ) + α 2 y 2 ( K 22 K 12 ) ] y 1 y 2 + y 2 2 = α 2 ( K 11 + K 22 2 K 12 ) + y 2 [ ( f ( x 1 ) y 1 ) ( f ( x 2 ) y 2 ) ]

于是我们可以得到递推公式:
α 2 = α 2 + y 2 [ ( f ( x 1 ) y 1 ) ( f ( x 2 ) y 2 ) ] K 11 + K 22 2 K 12 = α 2 + y 2 E 1 E 2 η

其中 E j 是预测值与实际值之差, η = K 11 + K 22 2 K 12

最后将 α 2 的值进行约束:

α 2 n e w = { H , α 2 > H α 2 , L α 2 H L , α 2 < L

得到 α 2 之后就可以由约束条件 α 1 y 1 + α 2 y 2 = α 1 n e w y 1 + α 2 n e w = k 得到 α 1
α 1 n e w = α 1 + y 1 y 2 ( α 2 α 2 n e w )

大部分情况下, η > 0 ,但是当 η 0 的时候就比较麻烦了,需要更为复杂的求解手段。详情可以见我后面附上的参考博客。在现实中,这种情况不常发生,因此忽略也无伤大雅,在程序中遇到了一般的处理是跳过此次循环。

4、求解w与b

w的求解可以通过: w = i = 1 m α i y i x i 求得。

b可以通过kkt条件求出:

这是原优化问题的KKT条件:

  1. α i = 0 时,分类是正确的;
  2. 0 α i C 时,这时的样本点是支持向量,处在边界上;
  3. α i = C 时,位于边界之间。

参考上面的KKT条件进行分类讨论:

  1. 如果 0 < α 1 < C ,则(x1,y1)为支持向量,满足 y i ( i = 1 m α i y i K i 1 + b 1 ) = 1

    α 1 y 1 K 11 + α 2 y 2 K 21 + i = 3 m α i y i K i 1 + b 1 = y 1

    b 1 = y 1 i = 3 m α i y i K i 1 α 1 y 1 K 11 α 2 y 2 K 21 = y 1 v 1 α 1 y 1 K 11 α 2 y 2 K 21 = y 1 [ f ( x 1 ) α 1 y 1 K 11 α 2 y 2 K 12 b ] α 1 y 1 K 11 α 2 y 2 K 21 = b 1 E 1 y 1 K 11 ( α 1 α 1 ) y 2 K 21 ( α 2 α 2 )

2.如果 0 < α 2 < C ,则(x2,y2)为支持向量,那么可以得到 b 2 :

b 2 = b 2 E 2 y 1 K 12 ( α 1 α 1 ) y 2 K 22 ( α 2 α 2 )

3.如果同时有 0 < α 1 < C 0 < α 2 < C ,那么有 b 1 = b 2

4.如果均不满足 0 α i C 就取两者中点: b = b 1 + b 2 2

在周志华老师的《机器学习》中,还给出了一个更为鲁棒的求法:使用所有支持向量求解的平均值:

b = 1 | S | s S ( 1 y s i S α i y i x i T x s )

其中S是所有支持向量的下标集合。

5.总结

​ SMO的公式推导还是比较复杂的,但是越推就越觉得Platt这些人确实厉害,能推导出如此美丽的公式。钦佩之余,自己又在机器学习的道路上前进了许多,也愈发的觉得自己懂的还是太少,即便是全部推完了这些公式,不会应用的惶恐之心又涌上心头。但是,学无止境,只要一直在路上就一定会到达目的地!

​ 下一篇博客中,我会去研究SMO中启发式的变量选择,看这种方式是如何提高算法的效率的!

参考资料:

周志华《机器学习》-支持向量机

机器学习入门笔记:(4.3)SMO算法

支持向量机(五)SMO算法

猜你喜欢

转载自blog.csdn.net/kabuto_hui/article/details/80369793
今日推荐