SVM算法

原文地址:https://blog.csdn.net/hongbin_xu/article/details/78508275

前言

支持向量机(Support Vector Machine,简称SVM)可以说是最经典的机器学习算法之一了。这几天再看SVM,参考了一些书籍和博客,这里把自己的笔记记录下来,以便以后复习查看。

间隔(margin)

分类学习最基本的思想就是:寻找一个超平面把数据集的样本空间划分成不同的样本。 
比较直观的一种情况就是二维下的,如下图: 
这里写图片描述(摘自百度百科) 
直观上看,我们应该去寻找两类样本正中间的直线来划分这两类样本。图中有三根直线:先看绿线,不难发现,它穿过了黑色点集,分类肯定错误了;红线和蓝线都正确地分开了两类样本。然而,我们肯定都觉得蓝线不是一种很好的方法,因为它距离样本太近了,在这个数据集附近随机再取一个新的样本,很有可能就越过了它,导致分类错误;相对而言,红线更好,因为它到两类样本的距离都有一定距离,这也意味着,它对未知示例的泛化能力更强,是最鲁棒的。 
以上也仅仅是直观上的理解,下面从数学层面进行分析。 
在样本空间中我们用如下线性方程来描述划分超平面: 

ωTx+b=0ωTx+b=0

其中, ω=(ω1,ω2,...,ωd)ω=(ω1,ω2,...,ωd) 为法向量,决定了超平面的方向; bb 为法向量,决定了超平面与原点之间的距离; xx 为输入样本。 
假设训练样本集 D={(x1,y1),(x2,y2),...,(xm,ym)}D={(x1,y1),(x2,y2),...,(xm,ym)} 。 
接下来先推导样本空间中一个点到超平面距离的公式: 
d=ωTx+bωd=|ωTx+b|‖ω‖


补充:样本空间中一个点到超平面距离的公式证明

我们要求:点x0(x(1)0,x(2)0,...,x(n)0)x0(x0(1),x0(2),...,x0(n))到超平面的S:ωTx+b=0S:ωTx+b=0的距离dd。 
先设点x1x1是点x0x0在超平面SS上的投影,则肯定满足:ωTx1+b=0ωTx1+b=0。 
由于点x1x1x0x0的投影,所以x0x1x0x1→与超平面SS垂直,则x0x1x0x1→与超平面SS的法向量平行。 
我们知道超平面SS的法向量是:ω=(ω1,ω2,...,ωn)ω=(ω1,ω2,...,ωn)。 

|ωx0x1|=ωT|x0x1|cos<ω,x0x1>|ω∗x0x1→|=(‖ωT‖)∗|x0x1→|∗cos<ω,x0x1→>

由于平行,两向量的夹角为0度或者180度, |cos<ω,x0x1>|=1|cos<ω,x0x1→>|=1
所以: 
|ωx0x1|=ωT|x0x1|=ωd(1)|ω∗x0x1→|=(‖ωT‖)∗|x0x1→|(1)=(‖ω‖)∗d

又因为: 
ωx0x1=ω1(x(1)1x(1)0)+ω2(x(2)1x(2)0)+...+ωn(x(n)1x(n)0)=(ω1x(1)1+ω2x(2)1+...+ωnx(n)1)(ω1x(1)0+ω2x(2)0+...+ωnx(n)0)ω∗x0x1→=ω1(x1(1)−x0(1))+ω2(x1(2)−x0(2))+...+ωn(x1(n)−x0(n))=(ω1x1(1)+ω2x1(2)+...+ωnx1(n))−(ω1x0(1)+ω2x0(2)+...+ωnx0(n))

这里要用到前面的条件了,因为 x1x1 是超平面S内的点: 
ωTx1+b=0ω1x(1)1+ω2x(2)1+...+ωnx(n)1+b=0ωTx1+b=0ω1x1(1)+ω2x1(2)+...+ωnx1(n)+b=0

所以得到: 
ωx0x1=(ω1x(1)0+ω2x(2)0+...+ωnx(n)0)b=(ωTx0+b)(2)ω∗x0x1→=−(ω1x0(1)+ω2x0(2)+...+ωnx0(n))−b(2)=−(ωTx0+b)

(1)(1) (2)(2) 式子两者联立: 
|ωx0x1|=ωd=|(ωTx0+b)||ω∗x0x1→|=(‖ω‖)∗d=|−(ωTx0+b)|

所以: 
d=|ωTx0+b|ωd=|ωTx0+b|‖ω‖


上面推导出了任意点xx到超平面的距离,接着往下走。 
假设有一个超平面H:ωTx+b=0H:ωTx+b=0能正确地将样本划分开来,那么同时也肯定存在两个平行于HH的平面H1H1H2H2: 

H1:ωTx+b=1H2:ωTx+b=1H1:ωTx+b=1H2:ωTx+b=−1

距离超平面 HH 距离最近的正负样本正好就分别在 H1H1 H2H2 上,而这样的样本就是 支持向量 。 
这里写图片描述  
那么,假设超平面能将正负样本正确分类,则要满足如下条件: 
对于任意样本 (xi,yi)(xi,yi) 有,若 yi=1yi=1 ,即为正样本,满足 ωTxi+b>0ωTxi+b>0 ;若 yi=1yi=−1 ,即为负样本,满足 ωTxi+b<0ωTxi+b<0 。 
令: 
{ωTxi+b1,yi=+1ωTxi+b1,yi=1(3)(3){ωTxi+b≥1,yi=+1ωTxi+b≤−1,yi=−1

使用之前推出的任意点 xx 到超平面的距离的公式,不难发现,超平面 H1H1 H2H2 之间的距离是: 
d=2ωd=2‖ω‖

这个东西就叫做 间隔 (margin)。 
而SVM的目标是就是找到一个超平面,使得 间隔 取到最大值,同时也要能保证正确地划分正负样本。

对偶问题

既然我们的目标是最大化间隔(margin),那么可以给出如下问题: 

maxω,b2ωs.t.yi(ωTxi+b)1,i=1,2,...,mmaxω,b2‖ω‖s.t.yi(ωTxi+b)≥1,i=1,2,...,m

其中的约束条件: yi(ωTxi+b)1yi(ωTxi+b)≥1 由前面的式子(3)的约束条件推导得到。 
欲最大化 2ω2‖ω‖ ,那么等价于最小化 ω‖ω‖ ,那么也等价于最小化 ω2‖ω‖2 。 
那么上面的优化问题可以改写为: 
minω,bω22s.t.yi(ωTxi+b)1,i=1,2,...,mminω,b‖ω‖22s.t.yi(ωTxi+b)≥1,i=1,2,...,m

好的,上示就是SVM的基本型。 
接下来考虑如何求解这个问题,找到最合适的 ωω bb 。 
我们要用到拉格朗体乘数法进行求解,由于约束条件中还带有不等式约束,所以还需要考虑KKT条件。


补充:拉格朗日乘数法与KKT条件

通常的优化问题有三种:

  • 无约束优化问题: 
    minxf(x)minxf(x)
  • 约束条件有等式优化问题: 
    minxf(x)s.t.hi(x)=0,i=0,1,...,nminxf(x)s.t.hi(x)=0,i=0,1,...,n
  • 约束条件有不等式优化问题: 
    minxf(x)s.t.hi(x)=0,gi(x)0,i=0,1,...,nminxf(x)s.t.hi(x)=0,gi(x)≤0,i=0,1,...,n

分别考虑这几种情况吧: 
无约束优化问题:求导,令导数为0,求得的解就是极值,随后从中选出最优解。 
约束条件有等式优化问题:使用拉格朗日乘数法,把等式约束 hi(x)hi(x) 乘以一个拉格朗日系数并与 f(x)f(x) 加在一个式子中,这个函数称为拉格朗日函数,而系数称为拉格朗日乘子。通过拉格朗日函数对各个变量求导,令其为零,可以求得候选值集合,然后验证求得最优值。 

L(a,x)=f(x)+ahi(x)L(a,x)=f(x)+a∗hi(x)

约束条件有不等式优化问题 :同样使用拉格朗体乘数法,最常使用的就是KKT条件。与前面一样,将所有等式约束与不等式约束和 f(x)f(x) 写为一个函数,拉格朗日函数。通过一些条件,这些条件是可以求出最优值的必要条件,这个条件就是KKT条件。 
L(a,b,x)=f(x)+agi(x)+bhi(x)L(a,b,x)=f(x)+a∗gi(x)+b∗hi(x)

我们主要考虑的就是约束条件有不等式优化问题,毕竟我们的SVM的基本式就是有不等式约束。

拉格朗日乘数法

假设给出如下问题: 

minxf(x)s.t.hi(x)=0,gi(x)0,i=0,1,...,nminxf(x)s.t.hi(x)=0,gi(x)≤0,i=0,1,...,n

对于等式约束与不等式约束,将其与 f(x)f(x) 组合,构成拉格朗日函数: 
L(a,b,x)=f(x)+agi(x)+bhi(x)L(a,b,x)=f(x)+a∗gi(x)+b∗hi(x)
。 
对各参数求导取0,联立求得最优值。

KKT条件

对于含有不等式约束的优化问题,将其转换为对偶问题: 

maxa,bminxL(a,b,x)s.t.ai0,i=1,2,...,nmaxa,bminxL(a,b,x)s.t.ai≥0,i=1,2,...,n

其中 L(a,b,x)L(a,b,x) 为拉格朗日函数。 
L(a,b,x)=f(x)+agi(x)+bhi(x)L(a,b,x)=f(x)+a∗gi(x)+b∗hi(x)

KKT条件就是说,原始问题的最优值 xx∗ 与对偶问题最优值 aa∗ bb∗ 要满足如下关系: 
1.  xL(a,b,x)=0,aL(a,b,x)=0,bL(a,b,x)=0∇xL(a∗,b∗,x∗)=0,∇aL(a∗,b∗,x∗)=0,∇bL(a∗,b∗,x∗)=0 ; 
2.  agi(x)=0a∗gi(x∗)=0 ; 
3.  gi(x)0gi(x∗)≤0 ; 
4.  ai0,hj(x)=0ai≥0,hj(x)=0 ; 
当原始问题和对偶问题的解都满足KKT条件,并且 f(x)f(x) g(x)g(x) 都是凸函数是,原始问题与对偶问题的解相等。

下面简单证明一下: 
就用前面给出的问题: 

minxf(x)s.t.hi(x)=0,gi(x)0,i=0,1,...,nminxf(x)s.t.hi(x)=0,gi(x)≤0,i=0,1,...,n

我们可以构造函数: 
L(a,b,x)=f(x)+agi(x)+bhi(x)L(a,b,x)=f(x)+a∗gi(x)+b∗hi(x)

由于KKT条件还要有 a0a≥0 。 
我们发现: 
maxa,bL(a,b,x)=maxa,b(f(x)+agi(x)+bhi(x))maxa,bL(a,b,x)=maxa,b(f(x)+a∗gi(x)+b∗hi(x))

由于 hi(x)=0hi(x)=0 ,所以 maxa,bbhi(x))=0maxa,bb∗hi(x))=0 。 
由于 gi(x)0gi(x)≤0 a0a≥0 ,所以 maxa,bagi(x))=0maxa,ba∗gi(x))=0 。(这也正是拉格朗日常数的用意所在,只有在 ag(x)=0a∗g(x)=0 L(a,b,x)L(a,b,x) 才能取到最大值,这是KKT的第二个条件) 
最后发现: 
maxa,bL(a,b,x)=maxa,bf(x)=f(x)maxa,bL(a,b,x)=maxa,bf(x)=f(x)

因此我们最初的目标函数可以改写为: 
minxf(x)=minxmaxa,bL(a,b,x)minxf(x)=minxmaxa,bL(a,b,x)

如下展开对偶式子 maxa,bminxL(a,b,x)maxa,bminxL(a,b,x) 可以发现我们的优化是满足 强对偶 (对偶式子的最优值是等于原问题的最优值的): 
假设最后取得的最优值是 xx∗  
maxa,bminxL(a,b,x)=maxa,bminx(f(x)+agi(x)+bhi(x))=maxa,b(minxf(x)+aminxgi(x)+bminxhi(x))=(maxa,bf(x)+maxa,b(aminxgi(x))+maxa,b(bminxhi(x)))maxa,bminxL(a,b,x)=maxa,bminx(f(x)+a∗gi(x)+b∗hi(x))=maxa,b(minxf(x)+a∗minxgi(x)+b∗minxhi(x))=(maxa,bf(x∗)+maxa,b(a∗minxgi(x))+maxa,b(b∗minxhi(x)))

由于 hi(x)=0hi(x)=0 ,所以 maxa,b(bminxhi(x))=0maxa,b(b∗minxhi(x))=0 。 
由于 gi(x)0gi(x)≤0 a0a≥0 ,所以 maxa,b(aminxgi(x))=0maxa,b(a∗minxgi(x))=0 。 
所以上式变为: 
maxa,bminxL(a,b,x)=(maxa,bf(x))=f(x)=minxmaxa,bL(a,b,x)maxa,bminxL(a,b,x)=(maxa,bf(x∗))=f(x∗)=minxmaxa,bL(a,b,x)

这里就证明了,原问题与对偶问题的最优值是相同的。 
原问题可以转换为对偶问题求解


好的,回到SVM的问题上来。 
我们希望优化的问题是: 

minω,bω22s.t.yi(ωTxi+b)1,i=1,2,...,mminω,b‖ω‖22s.t.yi(ωTxi+b)≥1,i=1,2,...,m

建立拉格朗日函数: 
L(ω,b,α)=ω22+i=1mαi(1yi(ωTxi+b))L(ω,b,α)=‖ω‖22+∑i=1mαi∗(1−yi(ωTxi+b))

其中 α=(α1,α2,...,αm)α=(α1,α2,...,αm) 为拉格朗日常数,且由KKT条件有: α0α≥0 。 
L(ω,b,α)L(ω,b,α) 分别对 ωω bb 求导取0: 
这里涉及矩阵求导,不了解请自行百度  
Lω=(12ωTω)ω+mi=1αiωmi=1αiyiωTxiωmi=1αiyibω=ωi=1mαiyixi=0∂L∂ω=∂(12ωTω)∂ω+∂∑i=1mαi∂ω−∂∑i=1mαiyiωTxi∂ω−∂∑i=1mαiyib∂ω=ω−∑i=1mαiyixi=0

Lb=(12ωTω)b+mi=1αibmi=1αiyiωTxibmi=1αiyibb=i=1mαiyi=0∂L∂b=∂(12ωTω)∂b+∂∑i=1mαi∂b−∂∑i=1mαiyiωTxi∂b−∂∑i=1mαiyib∂b=−∑i=1mαiyi=0

所以得到两个式子; 
ω=i=1mαiyixiω=∑i=1mαiyixi

0=i=1mαiyi0=∑i=1mαiyi

将它们代回到拉格朗日函数中,可以消去 ωω bb : 
L(ω,b,α)=ω22+i=1mαi(1yi(ωTxi+b))=12ωTω+i=1mαii=1mαiyiωTxii=1mαiyib=12ωTi=1mαiyixi+i=1mαii=1mαiyiωTxibi=1mαiyi=12ωTi=1mαiyixi+i=1mαib0=i=1mαi12i=1mj=1mαiαjyiyjxixjL(ω,b,α)=‖ω‖22+∑i=1mαi∗(1−yi(ωTxi+b))=12ωTω+∑i=1mαi−∑i=1mαiyiωTxi−∑i=1mαiyib=12ωT∑i=1mαiyixi+∑i=1mαi−∑i=1mαiyiωTxi−b∑i=1mαiyi=−12ωT∑i=1mαiyixi+∑i=1mαi−b∗0=∑i=1mαi−12∑i=1m∑j=1mαiαjyiyjxixj

接下来求原问题的对偶问题: 
maxαminω,bL(ω,b,α)=maxαminω,b(i=1mαi12i=1mj=1mαiαjyiyjxixj)=maxα(i=1mαi12i=1mj=1mαiαjyiyjxixj)maxαminω,bL(ω,b,α)=maxαminω,b(∑i=1mαi−12∑i=1m∑j=1mαiαjyiyjxixj)=maxα(∑i=1mαi−12∑i=1m∑j=1mαiαjyiyjxixj)

KKT条件:  
α0,i=1mαiyi=01yif(xi)0,αi(1yif(xi))=0α≥0,∑i=1mαiyi=01−yi∗f(xi)≤0,αi∗(1−yi∗f(xi))=0

到这里SVM的模型已经出来了。现在我们的问题是如何求出这些αα。有许多程序工具包可以帮助我们求解出合适的αα参数,当然还有一种十分快速高效的算法:SMO。我们不妨先放一放这个问题,先从结果分析看看。 
我们可以求出αα,随后套用前面的公式求出ωωbb: 

ω=i=1mαiyixib=yiωTxiω=∑i=1mαiyixib=yi−ωT∗xi

观察一下不难发现,这里的b可能有很多个解,因为每一个样本集 (xi,yi)(xi,yi) 都会对应一个b的可能取值。 
实际中采用一种更 鲁棒 的方法,即取所有的支持向量求解的b的均值: 
假设 S={i|αi>0,i=1,2,...,m}S={i|αi>0,i=1,2,...,m} 为最后求得的支持向量集合。因为非支持向量的点对应的 αi=0αi=0 ,所以去掉那一部分,只保留支持向量即可求得 bb 。 
b=1|S|sS(ysiSαiyixTixs)b=1|S|∑s∈S(ys−∑i∈SαiyixiTxs)

最后得到模型: 
f(x)=ωTx+b=i=1mαiyixTix+bf(x)=ωTx+b=∑i=1mαiyixiTx+b

由KKT条件: 
{α0αi(1yif(xi))=0{α≥0αi∗(1−yi∗f(xi))=0

分类讨论可以知道,只有可能有两种情况: 
αi=0αi=0 ,此时这个样本在模型中不起作用,因为结果是0。 
αi>0αi>0 ,那么,一定有 1yif(xi)=01−yi∗f(xi)=0 ,则: yif(xi)=1yi∗f(xi)=1 。表示这个样本在最大间隔边界上,是支持向量。 
在这个模型中,除了支持向量的 αi>0αi>0 以外,其他样本都不起作用。如此一来,大部分样本都不会被保留,只会保留支持向量。

这次就先到这里吧,下次在介绍svm的核函数、软间隔以及SMO算法等概念。前面推导分析了基本的SVM模型,也介绍了拉格朗日常数法与KKT条件的应用。不得不说,打公式很累啊。

参考资料: 
《机器学习》周志华 
http://blog.csdn.net/dawnranger/article/details/53133450


  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值