在机器学习中,支持向量机(SVM,又名支持向量网络)是在分类与回归分析中分析数据的监督式学习模型与相关的学习算法。给定一组训练实例,每个训练实例被标记为属于两个类别中的一个或另一个,SVM 训练算法创建一个将新的实例分配给两个类别之一的模型,使其成为非概率二元线性分类器。
简单点讲,SVM 就是一种二类分类模型,他的基本模型是的定义在特征空间上的间隔最大的线性分类器,SVM 的学习策略就是间隔最大化。
以下图为例,可以发现,图中的实线刚好把两种样本一分为二,此时,我们说这两类样本在其特征空间里线性可分。
严格的数学定义是
D0D_0D0 和 D1D_1D1 是 n 维欧氏空间中的两个点集,如果存在 n 维向量 w 和实数 b,使得所有属于 D0D_0D0 的点 xix_ixi 都有 wxi+b>0wx_i+b>0wxi+b>0,而对于所有属于 D1D_1D1 的点 xjx_jxj 则有 wxj+b<0wx_j+b<0wxj+b<0,则我们称 D0D_0D0 和 D1D_1D1 线性可分。
简单的说就是如果用一个线性函数可以将两类样本完全分开,就称这些样本是 “线性可分” 的。
从二维扩展到多维空间中时,将 D0D_0D0 和 D1D_1D1 完全正确地划分开的 wx+b=0wx+b=0wx+b=0 就成为超平面。
对于线性可分的数据样本来说,我们可以找到无数个超平面将数据集一分为二。
为了使这个超平面更具鲁棒性,我们会去找最佳超平面,以最大间隔把两类样本分开的超平面,也称之为最大间隔超平面。
也就是说,超平面对每个类别最近的元素距离最远。
怎么能找到最大间隔超平面呢?
我们可以先找到两个平行的,能够分离样本的辅助超平面,然后将它们分别推向样本两侧,使得它们之间的距离尽可能大,一直到有至少一个正样本或者负样本通过对应的辅助超平面为止。
如图所示,样本中距离超平面最近的一些点,这些点叫做支持向量。
在决定最佳超平面时只有支持向量起作用,而其他数据点并不起作用
假设给定一个特征空间上的训练数据集
其中,
SVM 希望找到离各类样本点距离最远的超平面,也就是找到最大间隔超平面。任意超平面可以用下面这个线性方程来描述:
我们知道在二维空间中,点 (x,y) 到直线
的距离为
扩展到 n 维空间后,点
的距离为:
其中
根据支持向量的定义我们知道,支持向量到超平面的距离为 d,其他点到超平面的距离大于 d。
于是我们可以得到:
方程两边除以 d 可以得到:
y 取 1 或者-1,分别代表两个不同的类
由于
为正数且都是标量,为了简便计算,我们令
,这对目标函数的优化没有影响,因此有:
将(6)中的两个方程合并,可以得到:
式(7)就是最大间隔超平面的上下两个超平面。
另一方面,在上述讨论中,我们知道支持向量到超平面的距离:
根据
(y 为 1 或 -1)我们同样可以得到:
因此根据(8)、(9)两式有:
之后我们便可以得到目标函数:
同时,我们知道对于支持向量 x 有
那么式(11)可以进一步化简为:
再进行一个转换,并消除
的根号,注意两者是等价的问题的实质没有变:
式(13)中的系数 1 / 2 仅仅是为了在下面求导时能够消去系数,没有其他特殊意义
最后,我们得到了最优化问题的目标函数和优化条件:
上面我们得到了最优化问题的目标函数和优化条件,那么如何对其进行求解呢?可以应用拉格朗日乘子法构造拉格朗日函数,再通过求解其对偶问题得到原始问题的最优解。
对拉格朗日乘子法的具体说明这里不再介绍。
对偶问题来求解的原因是
我们对每个约束条件添加拉格朗日乘子 α,可以得到该问题的拉格朗日函数:
其中
。
根据拉格朗日对偶性, 原始问题的对偶问题是
令 L 对 w 和 b 的偏导为 0 有:
由(16)、(17)可以得到:
将式(18)代入式(15),即可将 L 中的 w 和 b 消去,再考虑式(19)的约束,就可以得到式(14)的对偶问题:
从上面的式子可以看出
函数只含有一个变量
, 从而得到我们的优化问题:
我们废了那么大的劲推导出这个式子是为了什么呢?
其实就是为了将最初的原始问题,转换到可以使用 SMO 算法求解的问题
SMO (Sequential Minimal Optimization),序列最小优化算法,其核心思想非常简单:每次只优化一个参数,其他参数先固定住,仅求当前这个优化参数的极值。
简单来说,我们需要对
进行优化
具体来说,在 SMO 算法中我们每次需要选择一对变量
, 因为在 SVM 中,我们的
并不是完全独立的,而是具有约束的
我们没法一次只变动一个参数,所以我们选择了一次选择两个参数。
选择两个需要更新的参数
,固定其他参数。于是我们有以下约束
于是由式(21)我们可以得到
也就是说我们可以用
的表达式代替
, 这样就相当于把目标问题转化成了仅有一个约束条件的最优化问题
对于仅有一个约束条件的最优化问题,我们完全可以在
上对优化目标求偏导,令导数为零,从而求出变量值
,然后根据
求出 α
, 多次迭代直至收敛
对任意训练样本
,总有
或
.若
,则该样本将不会在模型的求和中出现,也就不会对 f(x)有任何影响;若
,则必有 y
,所对应的样本点位于最大间隔边界上,是一个支持向量。这显示出支持向量机的一个重要性质:训练完成后,大部分的训练样本都不需保留,最终模型仅与支持向量有关。
解出最优的 α 之后,便可以求出 w 和 b,由之前求偏导时得到的式(18)可求出 w:
另一方面,任选一个支持向量代入
,因此:
w 和 b 都求出来了,之后我们可以得到最大分割超平面
分类决策函数:
在实际应用中,完全线性可分的样本是很少的,我们往往会遇到许多不能够完全线性可分的样本
解决该问题的一个办法是允许 SVM 在少量样本上出错,即将之前的硬间隔最大化条件放宽一点,为此引入“软间隔”的概念。即允许少量样本不满足约束
为了度量这个间隔软到何种程度,我们为每个样本引入一个松弛变量
,且
增加软间隔后我们的优化目标变成了:
其中 C 是一个大于 0 的常数,可以理解为错误样本的惩罚程度,若 C 为无穷大,
必然无穷小,如此一来线性 SVM 就又变成了线性可分 SVM;当 C 为有限值的时候,才会允许部分样本不遵循约束条件。
C 为惩罚因子表示异常分布的点对目标函数的贡献权重,C 越大表示异常分布的点对目标函数的影响就越大,使得目标函数对异常分布点的惩罚就越大
式(24)表示的软间隔支持向量机依然是一个凸二次规划问题,和我们在上面讨论的支持向量机类似
式(24)对应的拉格朗日函数为
将对偶问题转换为
类似的,将
分别对
求偏导并令为 0 可得
将这些关系带入拉格朗日函数(24)中,得到:
注意其中没有
, 所以现在只需要最大化
就好
然后我们利用 SMO 算法求解得到拉格朗日乘子
我们刚刚讨论的硬间隔和软间隔都是在说样本的完全线性可分或者大部分样本点的线性可分。
但是我们经常会遇到非线性的问题, 样本点不是线性可分的。此时我们就需要用到核函数将线性支持向量机推广到非线性支持向量机。
核函数的定义:
设
是输入空间 (欧式空间
的子集或离散集合),又设
是特征空间 (希尔伯特空间),如果存在一个
到
的映射
使得对所有
,函数
满足条件
则称
为核函数,
为映射函数,式中
为
的內积
我们用 x 表示原来的样本点,用
表示 x 映射到特征新的特征空间后到新向量。那么分割超平面可以表示为:
按照前面的方法,对于非线性 SVM 的对偶问题就变成了
再利用现成的二次规划问题求解算法或者 SMO 算法求得最优解