深入理解SVM,详解SMO算法

今天是机器学习专题第35篇文章,我们继续SVM模型的原理,今天我们来讲解的是SMO算法。

公式回顾

在之前的文章当中我们对硬间隔以及软间隔问题都进行了分析和公式推导,我们发现软间隔和硬间隔的形式非常接近,只有少数几个参数不同。所以我们着重来看看软间隔的处理。

通过拉格朗日乘子法以及对原问题的对偶问题进行求解,我们得到了二次规划:

(1)minα12i=1mj=1mαiαjyiyjxiTxji=1mαis.t.i=1mαiyi=00αiC,i=1,2,3,m

它应该满足的KTT条件如下:

{αi0,βi0yi(ωTxi+b)1+ξi0αi(yi(ωTxi+b)1+ξi)=0ξi0,βiξi=0

也就是说我们要在这些条件下去求解(1)式的极值,在这个约束的情况下,虽然我们已经把式子化简成了只有一种参数α,但这个极值又应该怎么求呢?为了解决这个问题,我们需要引入一个新的算法,也是今天的文章的主要介绍的内容——SMO算法

SMO算法简介

SMO的全写是Sequential Minimal Optimization,翻译过来是序列最小优化算法。算法的核心思想是由于我们需要寻找的是一系列的α值使得(1)取极值,但问题是这一系列的值我们很难同时优化。所以SMO算法想出了一个非常天才的办法,把这一系列的α中的两个看成是变量,其它的全部固定看成是常数。

这里有一个问题是为什么我们要选择两个α看成是变量而不选一个呢?选一个不是更加简单吗?因为我们的约束条件当中有一条是yiαi=0,所以如果我们只选择一个α进行调整的话,那么显然会破坏这个约束。所以我们选择两个,其中一个变化,另外一个也随着变化,这样就可以保证不会破坏约束条件了。

为了方便叙述,我们默认选择的两个α分别是α1,α2。另外由于我们涉及xiTxj的操作,我们令Kij=xiTxj。这样上面的(1)式可以写成:

(2)minα1,α212K11α12+12K22α22+y1y2α1α2(α1+α2)+y1α1i=3myiαiKi1+y2α2i=3myiαiKi,2+Constants.t.α1y1+α2y2=i=3myiαi0αiC,i=1,2,3,m

其中由于y1=±1,所以yi2=1,上面的Constant表示除了α1,α2以外的常数项。我们假设α1y1+α2y2=k,其中α1,α2[0,C],由于yi只有两个选项1或者-1,所以我们可以分情况讨论。

分情况讨论

首先我们讨论y1y2不同号时,无非两种,第一种情况是α1α2=k,也就是α2=α1k,我们假设此时k > 0,第二种情况是α2=α1+k,我们假设此时k < 0。我们很容易发现对于第一种情况,如果 k < 0,其实就是第二种情况,同样对于第二种情况,如果k > 0其实就是第一种情况。这变成了一个线性规划问题,我们把图画出来就非常清晰了。

针对第一种情况,我们可以看出来α2的范围是(0,Cα2+α1),第二种情况的范围是(α2α1,C)。这里我们把k又表示回了α1,α2,由于我们要通过迭代的方法来优化α1,α2的取值,所以我们令上一轮的α1,α2分别是α1o,α2o。这里的o指的是old的意思,我们把刚才求到的结论综合一下,就可以得到α2下一轮的下界L是max(0,α2oα1o),上界H是min(C+α2oα1o,C)

同理,我们画出α1,α2同号时的情况,也有k > 0 和 k < 0两种。

第一种情况是y1=y2=1,这时α1+α2=k,此时 k > 0,对应的α2的取值是(0,α1o+α2o)。当k > C的时候,这时候也就是右上角1'的情况,此时过了中间的虚线,α2的范围是(α1o+α2oC,C)

第二种情况是y1=y2=1,此时α1+α2=k,此时k < 0,由于这个时候是不符合约束条件0α1,α2C的,所以此时没有解。这两种情况综合一下,可以得到下界L是max(0,α1o+α2oC),上届H是min(α1o+α2o,C)

我们假设我们通过迭代之后得到的下一轮α2α2new,unc,这里的unc是未经过约束的意思。那么我们加上刚才的约束,可以得到:

(1)α2new={Hα2new,unc>Hα2new,uncLα2new,uncHLα2new,unc<L

这里的α2new,unc是我们利用求导得到取极值时的α2,但问题是由于存在约束,这个值并不一定能取到。所以上述的一系列操作就是为了探讨约束存在下我们能够取到的极值情况。如果看不懂推导过程也没有关系,至少这个结论需要搞明白。

代入消元

我们现在已经得到了下一轮迭代之后得到的新的α2的取值范围,接下来要做的就是像梯度下降一样,求解出使得损失函数最小的α1α2的值,由于α1+α2的值已经确定,所以我们求解出其中一个即可。

我们令α1y1+α2y2=ξ,那么我们可以代入得到α1=y1(ξα2y2)

我们把这个式子代入原式,得到的式子当中可以消去α1,这样我们得到的就是只包含α2的式子。我们可以把它看成是一个关于α2的函数,为了进一步简化,我们令vi=j=3myjαjKi,j,Ei=f(xi)yi=j=1mαjyjKi,j+byi

这里的Ei表示的是第i个样本真实值与预测值之间的差,我们把上面两个式子代入原式,化简可以得到:

f(α2)=12K11(ξα2y2)+12K22α22+y2K12(ξα2y2)α2(ξα2y2)y1α2+(ξα2y2)v1+y2α2v2

接下来就是对这个式子进行求导求极值,就是高中数学的内容了。

Wα2=K11α2+K22α22K12α2K11ξy2+K12ξy2+y1y21v1y2+y2v2=0

我们求解这个式子,最终可以得到:

α2new,unc=α2o+y2(E1E2)K11+K222K12

我们根据这个式子就可以求出α2下一轮迭代之后的值,求出值之后,我们在和约束的上下界比较一下,就可以得到在满足约束的情况下可以取到的最好的值。最后,我们把α2代入式子求解一下α1。这样我们就同时优化了一对α参数,SMO算法其实就是重复使用上面的优化方法不停地选择两个参数进行优化,直到达到迭代次数,或者是不能再带来新的提升为止。

整个算法的逻辑其实是不难理解的,但是中间公式的推导过程实在是多了一些。这也是我把SVM模型放到机器学习专题最后来讲解的原因,在下一篇文章当中,我们将会为大家带来SVM模型核函数的相关内容,结束之后我们机器学习专题就将迎来尾声了,再之后我们将会开始深度学习的专题,敬请期待吧。

今天的文章到这里就结束了,如果喜欢本文的话,请来一波素质三连,给我一点支持吧(关注、转发、点赞)。

原文链接,求个关注

posted @   Coder梁  阅读(2042)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示