详解SVM系列(六):深入解析 序列最小最优化SMO算法一

本文详细介绍了序列最小最优化(SMO)算法的原理和应用,包括SMO解决凸二次规划问题的方法,两个变量的二次规划求解步骤,以及变量选择策略,旨在帮助读者理解和支持向量机的优化过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SMO算法是干啥的

首先要先搞明白一个基本的问题: SMO算法是干啥的?
通过前面的介绍,我们现在掌握了线性不可分支持向量机。其形式为如下的凸二次规划:
min12∑i=1N∑J=1NαiαjyiyjK(xixj)−∑i=1Nαimin\frac{1}{2}\displaystyle\sum_{i=1}^{N}\displaystyle\sum_{J=1}^{N}α_iα_jy_iy_jK(x_ix_j)-\displaystyle\sum_{i=1}^{N}α_imin21i=1NJ=1NαiαjyiyjK(xixj)i=1Nαi
s.t.∑i=1Nαiyi=0s.t.\displaystyle\sum_{i=1}^{N}α_iy_i=0s.t.i=1Nαiyi=0
0≤αi≤C0≤α_i≤C0αiC
但是到现在为止,都没有讲解到底如何求解其中的参数ααα(通过对偶形式求解,ααα是拉格朗日乘子)
如果我们找到了一个ααα向量,α=(α1,α1,……αN)α=(α_1,α_1,……α_N)α=α1,α1,αN是最优解,就可以利用KKT条件来计算出原问题的最优解(w,b)(w,b)(w,b)
w=∑i=1Nαiyixiw=\displaystyle\sum_{i=1}^{N}α_iy_ix_iw=i=1Nαiyixi
取一个αi>0,b=yi−wTxiα_i >0,b=y_i-w^Tx_iαi>0,b=yiwTxi 就可以得到分离超平面。

那么问题来了,针对一个这样的凸二次规划问题,如何求解?难点在哪?
现有的求解凸二次规划问题的算法,都有一个瓶颈,那就是当训练样本的容量非常大时,算法往往变的比较低效,甚至无法求解。

SMO算法是如何求解这个凸二次规划问题的呢?它没有想着怎么去直接让目标函数变小,而是采用一个启发式算法,想着法的让这些ααα变量满足KKT条件。因为KKT条件是该最优化问题的充分必要条件。
具体怎么优化ααα?在优化的过程中需要遵循2个基本原则:
1)每次优化时,必须同时优化α=(α1,α2,……αN)α=(α_1,α_2,……α_N)α=α1,α2,αN的两个分量,因为只优化一个分量的话,新的ααα向量就不再满足KKT条件里面的初始限制条件中的等式约束了(s.t.∑i=1Nαiyi=0s.t.\displaystyle\sum_{i=1}^{N}α_iy_i=0s.t.i=1Nαiyi=0
2)每次优化的两个分量应当是违反KKT条件比较多的,还有一个重要的考量,就是经过一次优化后,两个分量要有尽可能多的改变,这样才能用尽可能少的迭代优化次数让它们得到最优解。

SMO算法是一种 启发式算法,其基本思路是:
1)如果α=(α1,α2,……αN)α=(α_1,α_2,……α_N)α=α1,α2,αN的每一个分量都满足该二次规划的KKT条件,那么这个最优化问题的解就得到了。(因为KKT条件是该最优化问题的充分必要条件)
2)否则,一次选择两个变量,固定其他变量,针对这两个变量构建一个二次规划问题。这个二次规划问题关于这两个变量的解应该更接近原始二次规划问题的解,因为这会使得原始二次规划问题的目标函数值变的更小。更重要的是,这时子问题可以通过解析方法求解,这样就可以大大提高整个算法的计算速度。
3)子问题有两个变量,一个是违反KKT条件最严重的那一个(怎么衡量严重性?),另一个由约束条件自动确定(没那么简单)。,如此SMO算法不断将原问题分解为子问题并对子问题求解,进而得到求解原问题的目的。

两个变量的二次规划求解方法

先不考虑具体如何选择两个变量α1,α2α_1,α_2α1,α2,我们先来看下如何求解二次规划问题。
不失一般性,假设选择的两个变量时α1,α2α_1,α_2α1,α2,其他变量αi(i=3,4,……N)α_i(i=3,4,……N)αi(i=3,4,N)是固定的。于是SMO的最优化问题:
min12∑i=1N∑J=1NαiαjyiyjK(xixj)−∑i=1Nαimin\frac{1}{2}\displaystyle\sum_{i=1}^{N}\displaystyle\sum_{J=1}^{N}α_iα_jy_iy_jK(x_ix_j)-\displaystyle\sum_{i=1}^{N}α_imin21i=1NJ=1NαiαjyiyjK(xixj)i=1Nαi
s.t.∑i=1Nαiyi=0s.t.\displaystyle\sum_{i=1}^{N}α_iy_i=0s.t.i=1Nαiyi=0
0≤αi≤C0≤α_i≤C0αiC
可以写成下面的形式:
minα1,α2W(α1,α2)=0.5K11α12+0.5K22α22+y1y2K12α1α2−(α1+α2)+y1α1v1+y2α2v2+Constantmin_{α_1,α_2}W(α_1,α_2)=0.5K_{11}α_1^2+0.5K_{22}α_2^2+y_1y_2K_{12}α_1α_2-(α_1+α_2)+y_1α_1v_1+y_2α_2v_2+Constantminα1,α2W(α1,α2)=0.5K11α12+0.5K22α22+y1y2K12α1α2(α1+α2)+y1α1v1+y2α2v2+Constant____________________________(1)
其中,vi=∑j=3NαjyjK(xi,xj),i=1,2v_i=\displaystyle\sum_{j=3}^{N}α_jy_jK(x_i,x_j),i=1,2vi=j=3NαjyjK(xi,xj),i=1,2
Constant=∑j=3NαjConstant=\displaystyle\sum_{j=3}^{N}α_jConstant=j=3Nαj,不和α1,α2α_1,α_2α1,α2有关,直接去掉即可。
约束条件变成下面:
等式约束:y1α1+y2α2=−∑j=3Nαjyj=ζ(常数)y_1α_1+y_2α_2=-\displaystyle\sum_{j=3}^{N}α_jy_j=ζ(常数)y1α1+y2α2=j=3Nαjyj=

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值