SVM解释:五、SMO算法

SMO算法是用于高效求解支持向量机(SVM)的二次规划问题的算法,尤其适用于处理大规模线性数据。该算法通过每次迭代优化两个变量,降低计算复杂度。SMO的基本思想是分治法,每次迭代选择两个变量,优化计算并更新模型。在每次迭代中,SMO算法会选择违反KKT条件的样本,并寻找变化幅度最大的样本作为优化变量,以加速收敛。通过不断迭代,直至所有变量满足KKT条件和约束条件,完成模型训练。
摘要由CSDN通过智能技术生成

SMO算法是John C. Platt在1998年提出的。论文的题目是”Sequential Minimal Optimization:A Fast Algorithm for Training Support Vector Machines”。它很快便成为最快的二次规划优化算法,特别是在针对线性SVM和数据稀疏时性能更优。

当然了,SMO优越性能的背后是其相当复杂的数学推导,所以,我也把这块最难理解的内容放在了整个SVM学习笔记的最后一篇,我将尝试尽可能地把SMO的算法逻辑讲清楚,如有疏忽或错误,欢迎留言讨论。

1. SMO基本原理

我在之前的4篇博客当中,一直有一个遗留问题没有解决,那就是具体如何求解SVM对偶问题,比如我在第3篇博客 SVM解释:三、线性可分的情况 中的公式(3)中表示的优化问题,这个问题在加入了松弛变量和惩罚因子后,也就是我在第4篇博客 SVM解释:四、线性不可分的情况 中的公式(3)中表示的优化问题,具体如下:

min 12i,j=1nαiαjyiyjXTiXji=1nαis.t. 0αiC      j=1mαiyi=0(1) (1) min   1 2 ∑ i , j = 1 n α i α j y i y j X i T X j − ∑ i = 1 n α i s . t .   0 ≤ α i ≤ C             ∑ j = 1 m α i y i = 0

我们观察一下这个优化问题,X和Y(即训练数据)已知,然后在一定的约束范围内求取最优解(即拉格朗日乘子 α α ),使目标函数达到最小值。

实际上,求解此类问题的经典算法有很多,但是放在SVM中的话,会在效率上“不尽人意”。因为观察这个目标函数就会发现,其计算的复杂度是依赖于样本数 n n 的,如果SVM中训练的数据集比较大,性能就成了问题。出于提高计算效率的目的,SMO算法应运而生。

总结起来一句话:SMO算法是用来高效地求解公式(1)所示的SVM核心优化问题的

我们知道,解决这样一个有多变量( n αi α i )的优化问题确实比较困难,但是如果能多次迭代,每次选择两个变量优化,同时把其他变量看做是固定的常数,这样“分而治之”的话,问题似乎就容易多了。SMO算法的基本思想正是这样一种“分治法”。

显然,这样做有两个问题需要解决:

  • 每次选择哪两个变量?
  • 每次迭代如何进行优化计算?

这两个问题实际上就是SMO算法的两个组成部分,下面我分别就这两个问题展开阐述。我先说优化计算的过程,最后再谈每次迭代计算是如何选择变量的。

2. 优化计算

2.1 新的优化问题

首先想想为什么要选择两个变量进行优化。假设我选择的是变量 α1,α2 α 1 , α 2 ,那就把其他的 n2 n − 2 αi α i 看做是固定的常数,因为有约束条件 mj=1αiyi=0 ∑ j = 1 m α i y i = 0 存在(公式(1)的第二个约束条件),所以如果我确定了 α1 α 1 迭代后的新值,自然可以通过等式关系确定 α2 α 2 迭代后的值。

回到(1)式所示的SVM核心优化问题,假设选择的两个变量是 α1,α2 α 1 , α 2 ,则此时的目标函数展开如下:

f(α1,α2)=12K11α21+12K22α22+y1y2K12α1α2+y1α1v1+y2α2v2α1α2+r(2) (2) f ( α 1 , α 2 ) = 1 2 K 11 α 1 2 + 1 2 K 22 α 2 2 + y 1 y 2 K 12 α 1 α 2 + y 1 α 1 v 1 + y 2 α 2 v 2 − α 1 − α 2 + r

关于这个式子,有以下3点需要说明:

  1. 为表示简洁,记 K(Xi,Xj)=Ki,j K ( X i , X j ) = K i , j ,你可能会问,(1)式里面不涉及核函数 K(,) K ( , ) 啊,为什么这里冒出来了?其实没有没核函数的参与,并不影响SMO算法的推导。为了和大多SMO算法相关的文献一致,我将 X1 X 1 X2 X 2 的内积直接用核函数的形式表示了,你可以理解为先用核函数映射,再执行加入松弛变量和惩罚因子的线性分类。

  2. v1,v2 v 1 , v 2 如下表示。其中 αi α i ∗ 表示 αi α i 在上一次迭代中的值。你可以这样理解:每次迭代 α1 α 1 α2 α 2 的值都是由上一轮迭代结束时的 αi α i 的值计算得到的。

    v1=i=3nyiαiKi1v2=i=3nyiαiKi2(3) (3) { v 1 = ∑ i = 3 n y i α i ∗ K i 1 v 2 = ∑ i = 3 n y i α i ∗ K i 2

  3. r r 表示常数项的组合,因为与后面的推导无关,我不写出来了。

新的目标函数有了,再看约束条件,根据公式(1)的两个约束条件,可以得到新约束条件如下:

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值