SVM从入门到精通(三)

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

前面,对于线性可分的数据,我们采用硬间隔最大化的策略,来训练线性可分支持向量机。回忆一下,之前的最优化问题的表示为:

min ω , b 1 2 ω 2 s . t . y i ( ω x i + b ) 1 0 , i = 1 , 2 , , N
我们可以将其称为原始问题。通过拉格朗日对偶性,通过求解对偶问题(dual problem)来得到原始问题(primal problem)的最优解。这就是线性可分支持向量机的对偶算法。
引入对偶问题的主要目的就是让问题更容易求解。还有一点就是自然引入核函数,从而将SVM推广到非线性分类问题中。

拉格朗日函数

原始问题

我们说利用拉格朗日对偶性去简化问题,那拉格朗日对偶性是啥呢?(大学微积分里好像学过···) 接下来进行简单介绍。
首先,拉格朗日对偶性主要是用来求解约束最优化问题的。那问题的表现形式是什么呢?也就是原始问题:假设 f ( x ) , c i ( x ) , h j ( x ) 是定义在 R n 上的连续可微函数,考虑约束最优化问题:

min x R n f ( x ) ( 1 )
s . t . c i ( x ) 0 , h j ( x ) = 0 ( 2 )

那么拉格朗日对偶性怎么用到这个问题上呢?
首先,我们引入拉格朗日函数
L ( x , α , β ) = f ( x ) + i = 1 k α i c i ( x ) + j = 1 l β j h j ( x )
这里 α i , β j 就是拉格朗日乘子, α i 0 .
由上面的(2)式,我们知道 h j ( x ) 是都为0的,所以和也应该是0的; c i ( x ) 0 ,而它的拉格朗日系数 α i 优势大于等于0的,所以二者的乘积和是小于等于0的。我们的优化目的是使 f ( x ) 最小,那么三者相加,也就是我们的拉格朗日函数L = 待求最小+非正数+0,如果f(x)最小的话,那么就需要拉格朗日函数 L ( x , α , β ) 最大,并且最大为f(x)。也就是,我们的原始问题可以变成以下的描述形式:
θ p ( x ) = max α , β ; α i 0 L ( x , α , β )
这里的下标p表示primal,原始问题。
我们假设,给定某个x违反了原始问题的约束条件,那么 θ p ( x ) = max α , β ; α i 0 [ f ( x ) + i = 1 k α i c i ( x ) + j = 1 l β j h j ( x ) ] = + ,相反的,如果x满足条件,就会像刚才我们分析的那样, θ p ( x ) = f ( x ) .所以,
θ p ( x ) = { f ( x ) , x + , o t h e r s

所以,为了让经过拉格朗日函数变换的问题和原始问题等价,我们还得对 θ p ( x ) 取极小。也就是说: min x θ p ( x ) = min x max α , β ; α i 0 L ( x , α , β )
这个是与原始问题等价的。而上式就被称为 广义拉格朗日函数的极小极大问题。因此,也就是说原始的约束最优化问题可以转化成广义拉格朗日函数的极小极大问题。
我们定义原始问题的最优值为 p = min x θ p ( x ) 为原始问题的值。

对偶问题

原始问题为广义拉格朗日函数的极小极大问题,那么他的对偶问题为拉格朗日函数的极大极小问题。即:

max α , β ; α i 0 θ D ( α , β ) = max α , β ; α i 0 min x L ( x , α , β )
s . t . α i 0 , i = 1 , 2 , , N

定义对偶问题的最优值 d = max α , β ; α i 0 θ D ( α , β ) 为对偶问题的值。

原始问题和对偶问题的关系

有了原始问题的描述形式及最优值得表示和其对偶问题得描述形式和最优值表示,二者是什么关系呢?
若原始问题和对偶问题都有最优值,二者得关系为:

d = max α , β ; α i 0 min x L ( x , α , β ) min x max α , β ; α i 0 L ( x , α , β ) = p

很好证明,连接桥梁为 L ( x , θ , β ) ,一个是最小值,一个是最大值,所以 θ D ( α , β ) 肯定小于等于 θ p ( x ) ,那 θ D 得最大值肯定也小于等于 θ p 得最小值,所以得证。

其他

  1. 如果上面得等号成立,即 d = p ,那么此时得 α , β , x 分别是原始问题和对偶问题得最优解。
  2. KKT条件(非常重要)
    1. 对原始问题和对偶问题,假设函数 f ( x ) , c i ( x ) 是凸函数, h j ( x ) 是仿射函数(仿射函数,即最高次数为1的多项式函数。常数项为零的仿射函数称为线性函数),并且不等式约束 c i ( x ) 严格可行,则 α , β x 分别是对偶问题和原始问题的解的充要条件是 α , β x 满足下面的KKT条件:
      x L ( x , α , β ) = 0 α i c i ( x ) = 0 , i = 1 , 2 , , k c i ( x ) 0 , i = 1 , 2 , , k α i 0 , i = 1 , 2 , , k h j ( x ) = 0 , j = 1 , 2 , , l
      2. 特别指出,第四个公式称为KKT的对偶互补条件。由此条件可知,若 α i > 0 ,则 c i ( x ) = 0.

学习的对偶算法

讲完了拉格朗日函数以及KKT条件,接下来可以讲SVM是如何利用拉格朗日函数求解原始问题的。我们再回忆一下原始问题长什么样:

扫描二维码关注公众号,回复: 4422257 查看本文章
min ω , b 1 2 ω 2 s . t . y i ( ω x i + b ) 1 0 , i = 1 , 2 , , N

按照拉格朗日法构建拉格朗日函数,里面的f(x)是 1 2 ω 2 , c i ( x ) 就是 y i ( ω x i + b ) 1 0 , i = 1 , 2 , , N ,但是要注意的是, c i ( x ) 0 ,而我们的式子是大于等于0的,所以要变换过来,也就是 y i ( ω x i + b ) + 1 0 , i = 1 , 2 , , N .好了,现在可以写出我们的拉格朗日函数了:
L ( ω , b , α ) = 1 2 ω 2 + i = 1 N α i ( y i ( ω x i + b ) + 1 ) = 1 2 ω 2 i = 1 N α i ( y i ( ω x i + b ) ) + i = 1 N α i α i 0 , i = 1 , 2 , , N
根据拉格朗日对偶性,原始问题是极小极大问题,它的对偶问题是极大极小问题,即
max α min ω , b L ( ω , b , α )
所以,为了求对偶问题的解,需要先求L对 ω , b 的极小,再求对 α 的极大。所以问题就分为了两步:
1. 求 min ω , b L ( ω , b , α )
L对 ω , b 分别求偏导,并令导数为0.即:
ω L ( ω , b , α ) = ω i = 1 N α i y i x i = 0 b L ( ω , b , α ) = i = 1 N α i y i = 0
于是,我们得到
ω = i = 1 N α i y i x i i = 1 N α i y i = 0
ω 回代到拉格朗日函数 L ( ω , b , α ) 中,并利用 i = 1 N α i y i = 0 ,L函数就变成了如下:
L ( ω , b , α ) = 1 2 i = 1 N j = 1 N α i α j y i y j ( x i x j ) i = 1 N α i y i ( ( j = 1 N α j y j x j ) x i + b ) + i = 1 N α i = 1 2 i = 1 N j = 1 N α i α j y i y j ( x i x j ) i = 1 N α i y i ( ( j = 1 N α j y j x j ) x i ) b i = 1 N α i y i + i = 1 N α i = 1 2 i = 1 N j = 1 N α i α j y i y j ( x i x j ) + i = 1 N α i
min ω , b L ( ω , b , α ) = 1 2 i = 1 N j = 1 N α i α j y i y j ( x i x j ) + i = 1 N α i

2. 求 min ω , b L ( ω , b , α ) α 的极大
max α 1 2 i = 1 N j = 1 N α i α j y i y j ( x i x j ) + i = 1 N α i s . t . i = 1 N α i y i = 0 α i 0 , i = 1 , 2 , , N
将上式由求极大变成求极小,也就是加个负号,就变成了
min α 1 2 i = 1 N j = 1 N α i α j y i y j ( x i x j ) i = 1 N α i s . t . i = 1 N α i y i = 0 α i 0 , i = 1 , 2 , , N
上面三式就是原始问题的对偶问题,并且存在 ω 是原始问题的解, α , β 是对偶问题的解。
对线性可分数据集,假设对偶最优化问题对 α 的解为 α = ( α 1 , α 2 , , α N ) T ,可以由 α 求得原始最优化问题的解 ( ω , b ) ,有如下关系
ω = i = 1 N α i y i x i b = y j i = 1 N α i y i ( x i x j )

我认为,利用对偶问题求解,主要简化了待求参数的数量。在原始问题中,为了求间隔最大的分离超平面,将问题转化成了约束最优化问题,需要求的参数为 ω , b ,两个。但是对偶问题,我只需要求一个 α ,利用 α 就可以得到 ω , b 。而且,只有一个参数的最优化问题理论上来说也更好解。

推导过程(根据KKT条件)
根据KKT条件,有:

ω L ( ω , b , α ) = ω i = 1 N α i y i x i = 0 b L ( ω , b , α ) = i = 1 N α i y i = 0 α i ( y i ( ω x i + b ) 1 ) = 0 y i ( ω x i + b ) 1 0 α i 0
由此可得:
ω = i = 1 N α i y i x i
其中,至少有一个 α j > 0 (反证法),对此j有 y j ( ω x j + b ) 1 = 0 .而 y j 是代表类别的,取值只有{+1,-1},所以 y j 2 = 1 .将 ω 取值代入(*)式,左右两侧同乘 y j ,即得
b = y j i = 1 N α i y i ( x i x j )
因此分离超平面就可以写成
i = 1 N α i y i ( x x i ) + b = 0
分类决策函数就可以写为:
f ( x ) = s i g n ( i = 1 N α i y i ( x x i ) + b )
由上式,以及 b 的表达式我们可以知道, 分离超平面与分类决策函数都是只和输入x和其内积有关
于是,对于线性可分数据集,我们可以首先求对偶问题的解 α ,再利用 ω , b α 的关系,求原始问题的解 ω , b ,从而得到分离超平面和觉得函数。
这就是 线性可分支持向量机的对偶学习算法,也是其基本算法。

上述过程作为算法描述如下:
1. 构造求解约束最优化问题:

min α 1 2 i = 1 N j = 1 N α i α j y i y j ( x i x j ) i = 1 N α i s . t . i = 1 N α i y i = 0 α i 0 , i = 1 , 2 , , N
求得最优解 α = ( α 1 , α 2 , , α N ) T .
2. 由 α 得到 ω ,
ω = i = 1 N α i y i x i
.选择 α 的一个正分量,即 α j > 0 ,计算
b = y j i = 1 N α i y i ( x i x j )

3. ω , b 代入,求得分离超平面和分类函数。

对偶算法中去描述支持向量,就是对应于数据中 α i > 0 的实例点。这其实与前面我们定义的支持向量是等价的。

以上就是针对线性可分数据集的对偶算法及推导。(看来多看几遍还是有用的,现在又多明白了一些·····)

猜你喜欢

转载自blog.csdn.net/sinat_32502811/article/details/81058295