1. 概述
支持向量机(support vector machines, SVM)是一种二分类模型,它的基本模型是定义在特征空间上的间隔最大的线性分类器,间隔最大使它有别于感知机。
SVM的的学习策略就是间隔最大化,可形式化为一个求解凸二次规划的问题,也等价于正则化的合页损失函数的最小化问题。SVM的的学习算法就是求解凸二次规划的最优化算法
2. SVM 理论
支持向量机的目的是用训练数据集的间隔最大化找到一个最优分离超平面。
下边用一个例子来理解下间隔和分离超平面两个概念。现在有一些人的身高和体重数据,将它们绘制成散点图,是这样的:

如果现在给你一个未知男女的身高和体重,你能分辨出性别吗?直接将已知的点划分为两部分,这个点落在哪一部分就对应相应的性别。那就可以画一条直线,直线以上是男生,直线以下是女生。

现在这个是一个二维平面,可以画直线,如果是三维的呢?该怎么画?我们知道一维平面是点,二维平面是线,三维平面是面。注意:后面的直线、平面都直接叫超平面了。
继续刚才的问题,我们刚才是通过一个分离超平面分出了男和女,这个超平面唯一吗?很明显,并不唯一,这样的超平面有若干个。

如何在众多分离超平面中选择一个最优分离超平面?下面这两个分离超平面,你选哪个?绿色的还是黑色的?

当然是黑色的,可是原理是什么?很简单,原理有两个,分别是:
- 对训练数据进行正确的分类
- 对未知数据也能很好的分类
最优分离超平面其实是和两侧样本点有关,而且只和这些点有关

如上图,当间隔达到最大,到两侧样本点的距离相等的超平面为最优分离超平面。对应上图,Margin对应的就是最优分离超平面的间隔,此时的间隔达到最大。
一般来说,间隔中间是无点区域,里面不会有任何点(理想状态下)。给定一个超平面,我们可以算出这个超平面与和它最接近的数据点之间的距离。那么间隔(Margin)就是这个距离的两倍。
如下图,间隔MarginB小于上张图的MarginA。当出现新的未知点,MarginB分离超平面的泛化能力不如MarginA,用MarginB的分离超平面去分类,错误率大于MarginA

2.1 小结
支持向量机是通过最大化间隔找到一个最优分离超平面。在决定分离超平面的时候,只有极限位置的那两个点有用,其他点根本没有大作用,因为只要极限位置离超平面的距离最大,就是最优的分离超平面了。
3.如何确定最大间隔
如果我们能够确定两个平行超平面,那么两个超平面之间的最大距离就是最大化间隔。如下图所示

左右两个平行超平面将数据完美的分开,我们只需要计算上述两个平行超平面的距离即可。所以,我们找最大化间隔:
(1)找到两个平行超平面,可以划分数据集并且两平面之间没有数据点
(2)最大化上述两个超平面之间的间隔
3.1 确定两个平行超平面
超平面的方程为:wTx+b=0
推广到n维空间,方程中W,X分别为:
W=[w1,w2,...,wn]T
X=[x1,x2,...,xn]T
如何确保两超平面之间没有数据点?我们的目的是通过两个平行超平面对数据进行分类,那我们可以这样定义两个超平面。
对每个向量xi满足:w⋅xi+b≥1 for xi属于类别1
或者
w⋅xi+b≤−1 for xi属于类别−1
即如下图所示,所有红点都是1类,所有的蓝点都是−1类。

可以将上述两个式子合并为一个:
yi(w⋅xi+b)≥1 for all 1≤i≤n
3.2 如何确定间隔
假设h0是满足约束w⋅xi+b=1的超平面;h1是满足约束w⋅xi+b=−1的超平面,且x0是h0上的一点;则x0到平面h1的垂直距离m就是我们要的间隔

m=∣∣w∣∣wx0+b+1=∣∣w∣∣2
其中∣∣w∣∣表示w的范数,即求所有元素的平方和然后开方
间隔最大化目标如下所示:
w,bmax∣∣w∣∣2 s.t yi(wxi+b)⩾1 (3.1)
上面的最优超平面问题是一个凸优化问题,可以转换成了拉格朗日的对偶问题,判断是否满足KKT条件,然后求解。
式(3.1)可变换成如下所示:
w,bmin21wTws.t.1−yi(w⋅xi+b)⩽0
然后可求得拉格朗日函数:
L(w,b,λ)=21wTw+i=1∑Nλi(1−yi(wTxi+b))
上式可以转换成如下形式:
w,bminλmaxL(w,b,λ)s.t. λi⩾0 (3.2)
对上式的解释:
若1−yi(wTxi+b)>0,则 λmaxL(w,b,λ)=21wTw+∞=∞
若1−yi(wTxi+b)≤0,则λmaxL(w,b,λ)=21wTw+0=21wTw
所以:w,bminλmaxL(w,b,λ)=w,bmin(∞,21wTw)=21wTw
式(3.2)继续转换成如下形式:
λmaxw,bminL(w,b,λ)s.t. λi⩾0 (3.3)
求导得
∂b∂L=−i=1∑Nλiyi=0
将上式代入L中得:
L(w,b,λ)=21wTw+i=1∑Nλi−i=1∑NλiyiwTxi
再L对w求导为0得:
w=i=1∑Nλiyixi
同理可以求得其他参数,具体见笔记本。
3.3 软间隔SVM
上面例子中提到的样本点都是线性可分的,我们就可以通过分类将样本点完全分类准确,不存在分类错误的情况,这种叫硬间隔,这类模型叫做硬间隔线性SVM。
同样的,可以通过分类将样本点不完全分类准确,存在少部分分类错误的情况,这叫软间隔,这类模型叫做软间隔线性SVM。
不一样的是,因为有分类错误的样本点,但我们仍需要将错误降至最低,所以需要添加一个惩罚项来进行浮动,所以此时求解的最大间隔就变成了这样:
minω,b21∥ω∥2+C∑i=1Nϵis⋅t⋅yi(ω⋅xi+b)≥1−ϵi,ϵi≥0,i=1,2,…,N
3.4 针对非线性可分样本
使用核函数,在非线性SVM中,核函数的选择关系到SVM的分类效果,核函数可以分为线性核函数、多项式核函数、高斯核函数、sigmoid核函数等等,甚至你还可以将这些核函数进行组合,以达到最优线性可分的效果
3.4 多分类SVM
1. 一对多法
一对多法讲究的是将所有的分类分成两类:一类只包含一个分类,另一类包含剩下的所有分类
举个例子:现在有A、B、C、D四种分类,根据一对多法可以这样分:
①:样本A作为正集,B、C、D为负集
②:样本B作为正集,A、C、D为负集
③:样本C作为正集,A、B、D为负集
④:样本D作为正集,A、B、C为负集
该方法分类速度较快,但训练速度较慢,添加新的分类,需要重新构造分类器
2.一对一
一对一法讲究的是从所有分类中只取出两类,一个为正类一个为负类
再举个例子:现在有A、B、C三种分类,根据一对一法可以这样分:
①分类器:样本A、B
②分类器:样本A、C
③分类器:样本B、C
该方法的优点是:当新增一类时,只需要训练与该类相关的分类器即可,训练速度较快。缺点是:当类的种类K很多时,分类器个数K(K-1)/2会很多,训练和测试时间较慢