(这里是本章会用到的 GitHub 地址)
(这篇东西我真是觉得又臭又长 ┑( ̄Д  ̄)┍)
SMO 算法概述
SMO 是由 Platt 在 1998 年提出的、针对软间隔最大化 SVM 对偶问题求解的一个算法,其基本思想很简单:在每一步优化中,挑选出诸多参数(
)中的两个参数(
、
)作为“真正的参数”,其余参数都视为常数,从而问题就变成了类似于二次方程求最大值的问题,从而我们就能求出解析解
具体而言,SMO 要解决的是如下对偶问题:
使得对
、都有
、
其大致求解步骤则可以概括如下:选出
中“最不好的”两个参数
、
只把
、
视为参数并把其余的
视为常数,于是最大化
就变成了以
、
为参数的二次规划问题,从而可以直接对其进行求解;但是,注意到
、
需满足
和
、
,所以求完解后需要检查是否满足约束;如不满足,则进行调整
KKT 条件
先来看如何选取参数。在 SMO 算法中,我们是依次选取参数的:选出违反 KKT 条件最严重的样本点、以其对应的参数作为第一个参数
第二个参数的选取有一种比较繁复且高效的方法,但对于一个朴素的实现而言、第二个参数即使随机选取也无不可
这里就有了一个叫 KKT 条件的东西,其详细的陈列会放在文末,这里就仅简要的说明一下。具体而言,对于已有的模型
来说,
及其对应样本
的 KKT 条件为:
注意我们之前提过样本到超平面的函数间隔为
,所以上述 KKT 条件可以直观地叙述为:样本离间隔超平面比较远
样本落在间隔超平面上
样本在间隔超平面以内
【注意:这里的间隔超平面即为满足方程
的平面;由于
可以取正负一两个值,所以间隔超平面会有两个——
和
。而分类超平面则是满足
的平面,需要将它和间隔超平面加以区分】
可以以一张图来直观理解这里提到的诸多概念:
(画得有点乱,见谅……)