版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_37334135/article/details/85787766
SVM是用来做二类分类的模型,有简到难分为线性可分支持向量机(或者说硬间隔支持向量机)、线性支持向量机(软间隔支持向量机)、非线性支持向量机。下面先讲最简单的线性可分支持向量机。
以下会按顺序讲到:
- 线性可分支持向量机介绍
- 函数间隔与几何间隔
- 支持向量机模型推导
给出训练集:
T={(x1,y1),(x2,y2),...,(xN,yN)},其中
xi是
n维特征向量,
yi={+1,−1}为类别标记,
+1表示正例,
−1表示负例。假设训练数据集是线性可分的,给出线性可分支持向量机定义如下。
线性可分支持向量机:
给定线性可分数据集,通过间隔最大化或等价的求解凸二次规划问题学习得到分离超平面
wx+b=0
以及相应的决策函数
f(x)=sign(wx+b)
wx+b>0函数为
1,实例分配到正类,反之为
0,实例分配到负类。
称为线性可分支持向量机,为了方便起见以下统统用SVM来表示线性可分支持向量机。
比如我们将样本点画到了图上,如下:
其中X表示正例
y=+1,O表示负例
y=−1,而用来将两类样本分隔的超平面
wx+b=0(比如
x1+x2+5=0,图中的直线)可能会有无数个,SVM的目标则是选择最优的那个
如果能正确分隔的话,那么对于直线上方的点,即正例点
(xi,yi),满足
w⋅xi+b>0,由于是正例点那么
yi=1,所以
yi(w⋅xi+b)>0。同样的,负例点
(xi,yi)也满足
yi(w⋅xi+b)>0。
所以,如果超平面能对两类样本进行正确分类的话那么就对于任意点
(xi,yi),满足
yi(w⋅xi+b)>0。但是这样的超平面有无数个,SVM的目标是选择最优的那个(即间隔最大的那个,具体的后面交代)。
函数间隔和几何间隔
函数间隔可以理解为点到直线(超平面
wx+b=0)在竖直方向的距离,所以对于正例点(
yi=1),即在直线上方的点到超平面距离为
w⋅xi+b,直线下方的负例点(
yi=−1)到直线的距离为
−(w⋅xi+b),写成统一的式子则是
yi(w⋅xi+b)。
函数间隔:
定义超平面
wx+b=0 到点
(xi,yi)的函数间隔为:
γi=yi(w⋅xi+b)
定义超平面
wx+b=0 到训练集
T的函数间隔为:
γ=minγi,i=1,2,...,N
从定义中能够看出,对于同样的点
(xi,yi),如果等比例增加
w,b 那么函数间隔也会等比例增加,这一点在后面会很有用。
如果要上述避免这种情况,可以对
w进行规范化,
∣∣w∣∣=1,从而使得间隔是确定的,这种间隔称为几何间隔。(补充:
w为一个向量,比如
x1+x2+3=0那么
w=(1,1)T,称
w为法向量)
几何间隔:
定义超平面
wx+b=0 到点
(xi,yi)的几何间隔为:
γi=yi(∣∣w∣∣wxi+∣∣w∣∣b)
定义超平面
wx+b=0 到训练集
T的函数间隔为:
γ=minγi,i=1,2,...,N
下面举个简单的例子 :
假设有超平面
x1+x2+2=0,点
(x,y)=((1,1),1),
(1,1)是表示坐标轴上的点,最后一个
1表示正例。那么超平面到该点的函数间隔为
1+1+2=4,几何间隔为
1+1
1+1+1
1+1+1
2=22
。如果此时将
w,b扩大为原来的两倍,即超平面为
2x1+2x2+4=0,此时的函数间隔为
2+2+4=8,可以发现变为了原来的2倍。再来看几何间隔。
22+22
2+22+22
2+22+22
4=22
,和原来的几何间隔相等。
从函数间隔与几何间隔的定义可以看出两者的关系:
γi=∣∣w∣∣γi
γ=∣∣w∣∣γ
前面已经说了,能对两类实例进行分割的超平面有无数个,SVM目标是选择最优的那个(区别与感知机),那么怎样的超平面是最优的呢?即间隔最大(硬间隔最大)的超平面,具体来说就是能进行正确分类的超平面中的几何间隔最大的那个超平面,即
w,bmaxγ。
直观来解释就是,这样的超平面不仅能将实例正确分开,而且能将最难分的点(距离超平面最近的点)以足够大的确信度分开(因为间隔最大嘛),这样的超平面对未来的数据具有较好的预测能力。
模型:最大间隔分离超平面
根据以上分析,我们的目标是找到几何间隔最大的超平面,那么模型的目标函数和约束条件也就得都有了,模型如下:
w,bmaxγ
s.t.yi(∣∣w∣∣wxi+∣∣w∣∣b)≥γ,i=1,2,…N
考虑几何间隔与函数间隔的关系式,将几何间隔转换为函数间隔,得到:
w,bmax∣∣w∣∣γ
s.t.yi(w⋅xi+b)≥γ,i=1,2,…N
考虑上面的约束条件,如果我们将
w,b 都变为原来的
k倍,那么
γ也会变为原来的
k倍,即
s.t.yi(kw⋅xi+kb)≥kγ,i=1,2,…N
仍然与原来的约束条件一样,
也就是说同比例的改变不等号左边的
w,b与右边的
γ约束不变。既然这样,那么将不等号两边都除以
γ,变化后的
w,b仍然用
w,b表示。那么约束就成了
s.t.yi(w⋅xi+b)≥1,i=1,2,…N
同时目标函数也就成了
w,bmax∣∣w∣∣1,带分母的求解麻烦,转换为
w,bmin21∣∣w∣∣2
最终得到的模型为:
w,bmin21∣∣w∣∣2
s.t.yi(w⋅xi+b)−1≥0,i=1,2,…N
通过求解该模型得到最大间隔分离超平面
w∗x+b∗=0。
求解这个模型等于是求解一个凸二次规划问题,关于什么是凸二次规划问题件《统计学习方法》如下:
补充:如果
f(x)满足
f(x)=a⋅x+b,则称它是仿射函数。
支持向量
为什么叫支持向量机,下面进行介绍。
支持向量:
满足模型约束条件等式成立的实例点称为支持向量(也就是距离超平面最近的点),即支持向量
(xi,yi)满足
yi(w⋅xi+b)=1
如果是正例点,那么就有
w⋅xi+b=1
如果是负例点,那么就有
w⋅xi+b=−1
画在图上如下:
从上到下的三条线分别为
w⋅x+b=1
w⋅x+b=0
w⋅x+b=−1
两条虚线称为间隔边界,距离为
∣∣w∣∣1,实线为分离超平面,位于两虚线正中间。
在决定分离超平面时只有支持向量起作用,而其他实例点不起作用,所以称为支持向量机。如果移动支持向量那么得到的分离超平面会改变;移动以外的点则不会改变得到的分离超平面。一般支持向量个数很少,所以支持向量机由很少的“重要”样本确定的。
学习的对偶算法
对于原始问题
w,bmin21∣∣w∣∣2
s.t.yi(w⋅xi+b)−1≥0,i=1,2,…N
我们需要写出它的对偶形式,通过求解对偶问题的最优解从而得到原始问题的最优解。为什么使用对偶是因为对偶问题容易求解(比如原问题中,由于
i有N个导致约束条件也有
N个。),同时也是为了引出后面需要讲的核技法与非线性分类问题。
关于对偶问题,参考《统计学习方法》附录。
具体的做法是:写出拉格朗日函数,得到极小极大化问题,那么对偶问题则是极大极小问题,通过求解对偶问题的最优解得到原问题的最优解,下面就一步步来做。
1、写拉格朗日函数并求解
L(w,b,α)=21∣∣w∣∣2−i=1∑Nαi(yi(w⋅xi+b)−1)=21∣∣w∣∣2−i=1∑Nαiyi(w⋅xi+b)+i=1∑Nαi
需要求的是
L(w,b,α)的最大值,这点参考《统计学习方法》附录关于对偶问题那部分。
原问题就成了极小极大问题,即
w,bminαmaxL(w,b,α),那么对偶问题则是极大极小问题,即
αmaxw,bminL(w,b,α)
现在来求对偶问题,
αmaxw,bminL(w,b,α)。对于
w,bminL(w,b,α)的求解,求导令倒数为0即可。
∂w∂L(w,b,α)=w−i=1∑Nαiyixi=0
=>w=i=1∑Nαiyixi
∂b∂L(w,b,α)=i=1∑Nαiyi=0
注意:
w=(w1,w2,...,wN)T,以上应该是对
wi求导,上面是写出了通用公式。
将求解的结果带入到
L(w,b,α)=21∣∣w∣∣2−i=1∑Nαiyi(w⋅xi+b)+i=1∑Nαi中。
注意:
∣∣w∣∣2为向量
wT⋅w 即内积,那么有
∣∣w∣∣2=(i=1∑Nαiyixi)⋅(j=1∑Nαjyjxj)=i=1∑Nj=1∑Nαiαjyiyj<xi,xj>
<xi,xj>表示这两个向量的内积,最终有:
L(w,b,α)=21i=1∑Nj=1∑Nαiαjyiyj<xi,xj>−i=1∑Nαiyixij=1∑Nαjyjxj−bi=1∑Nαiyi+i=1∑Nαi=−21i=1∑Nj=1∑Nαiαjyiyj<xi,xj>+i=1∑Nαi
那么对偶问题
αmaxw,bminL(w,b,α)就变成了如下模型:
αmax−21i=1∑Nj=1∑Nαiαjyiyj<xi,xj>+i=1∑Nαi
s.t.i=1∑Nαiyi=0
αi≥0i=1,2,...,N
习惯上求极小问题,那么就转换为如下的最终模型。
αmin21i=1∑Nj=1∑Nαiαjyiyj<xi,xj>−i=1∑Nαi
s.t.i=1∑Nαiyi=0
αi≥0i=1,2,...,N
关于模型的求解,使用SMO算法,只看书恐怕会有些难懂,在后续会单独讲到。
假设已经求解出来了,即得到
α∗=(α1∗,α2∗,...,αN∗)T,
α求出来后,那么分离超平面
(w∗,b∗)也就求出来了,具体的如下。
KKT条件
先讲个重要的概念,KKT条件:
2、对偶问题
有了KKT条件和得到的解
α∗=(α1∗,α2∗,...,αN∗)T,那么就可以求解分离超平面
(w∗,b∗)。如下:
首先KKT条件成立,即:
∂w∂L(w∗,b∗,α∗)=w∗−i=1∑Nαi∗yixi=0
∂b∂L(w∗,b∗,α∗)=i=1∑Nαi∗yi=0
αi∗(1−yi(w∗xi+b∗))=0
1−yi(w∗xi+b∗)≤0
α∗≥0
由第一个式子就得到了
w∗=i=1∑Nαi∗yixi
首先可以肯定的是存在一个
αj∗>0,如果所有的
αj∗=0那么根据上面KKT条件的第一个式子就得到了
w∗=0这显然不对,所以得知至少存在一个
j使得
αj∗>0。
根据KKT条件的第三个式子,得到
1=yi(w∗xj+b∗),两把同乘
yj,得到 :
b∗=yj−w∗xj=yj−w∗xj=yj−i=1∑Nαiyi<xi,xj>
到这里分离超平面
(w∗,b∗),即
w∗x+b∗=0就求出来了,分离超平面如下:
i=1∑Nαi∗yi<x,xi>+b∗=0
称为线性可分支持向量机的对偶形式,下面总结一下算法流程。
线性可分支持向量机学习算法
输入:线性可分数据集
T={(x1,y1),(x2,y2),...,(xN,yN)},其中
xi是
n维特征向量,
yi={+1,−1}为类别标记,
+1表示正例。
输出:分离超平面以及分类决策函数
(1)、构造并求解优化模型:
αmin21i=1∑Nj=1∑Nαiαjyiyj<xi,xj>−i=1∑Nαi
s.t.i=1∑Nαiyi=0
αi≥0i=1,2,...,N
(2)、计算
w∗=i=1∑Nαi∗yixi
并选择一个
α∗的分量,
αj∗>0,计算
b∗=yj−i=1∑Nαiyi<xi,xj>
(3)、求得分离超平面:
w∗x+b∗=0
分类决策函数:
f(x)=sign(w∗x+b∗)