以下参考周老师《机器学习》。
SVM会涉及到硬间隔、软间隔、核函数等概念,别怕,我们一步一步推进,保证可以有一个清晰的认识。
Step 1: 我们从简单的情况入手—>线性可分,即在训练集上一定可以找到一个划分超平面,将两种类别的样本分开。
(1) 问题描述:
将两种类别的样本完全分开的超平面有很多,那么哪一个超平面是最好的?
从上图可以看出,中间加粗的超平面更好,因为它不仅分对了训练样本,还对训练样本有很大的包容性,也就是说 即使训练样本发生了一定扰动,该超平面仍旧可以将它分对。
(2) 划分超平面如何表示?
可以通过如下线性方程组来描述:
,其中
,
是位移量。
点
到平面的距离公式:
(3) 根据(1)中,我们可以看出我们希望 样本中到超平面的最近距离最大化,用数学公式描述如下:
可以看到,如果找到最优的
,我们将
任意缩放
后,仍然是最优的,因为分子分母都有
,消去了。
通过一定缩放,我们令
目标就变成了:
我个人对这里目标函数的得出有点不是很透彻,起码我没有办法一下子跳到那个公式。需要绕一个大弯,我们是想从无数个
中,找到最小距离最大化的
,对于一对
,将它任意放大缩小,这个超平面并没有发生变化,仍是同一个超平面。既然这样,我们就令
。
落在
的样本,便是支持向量。
又可以重写为:
(公式1)
上面就是SVM的基本型,也是原始问题。原始问题本身是一个凸二次规划问题,能直接用现成的优化计算包求解,当是我们想追求更高效的方法—–使用拉格朗日乘子法得到原始问题的对偶问题。
(4) 对偶问题
1.用拉格朗日乘子法,首先将不等式约束条件转换为小于,即
2.对每个不等式引入拉格朗日系数
, 注意
3.拉格朗日函数是: 原始问题(公式1)的对偶问题是
令
,
并带入
中,得到
我们就得到了原始问题(公式1)的对偶问题:
(公式2)
上面我们已经得到拉格朗日函数, 对应的KKT条件(对于一般的任意问题而言,KKT条件是使一组解成为最优解的必要条件,当原问题是凸问题的时候,KKT条件也是充分条件):
(5)如何求解上面的对偶问题(公式2)?
对偶问题(公式2),是一个二次规划问题,可使用通用的二次规划算法求解。但是问题的规模正比于训练样本的数目。我们可以用一个著名的高效算法SMO。
SMO(Sequential Minimal Optimization):
我们要求解的是公式2里面的
- 随机初始化
- 选择两个变量 ,固定其他 个变量。
根据公式(2),求解并更新
不断执行2,3步骤,直至收敛。
如何选择
呢?
SMO用的是启发式的方法来选择,先选择违背KKT条件程度最大的变量作为
,然后选择与
距离最大的变量作为
。
SMO高效的原因,在于固定其他变量后, 可以由 表示,因为 。那么对于公式(2)而言,就是关于 的单变量二次规划问题,约束是 。
通过SMO求解出 后,根据 得到的 便可求出 。
至于
如何求呢?
上面提到的KKT条件有:
可以看出
或者
。若
,那么
,也就是说该样本是一个支持向量。
我们可以把
对应的样本找出来,其满足
,可以求解出b。
通常我们会将所有支持向量求解得到的取平均值作为b。
即
其中
。
(6)目前,模型参数都已经求完,模型是
,则该样本不会在求和公式中出现,
,对应的样本是支持向量。因此可以看出,训练完成后,大部分的样本不需要保留,最终模型仅与支持向量有关。这是SVM十分重要的一个性质:解具有稀疏性。好处是:预测的时候开销小。