为了账号安全,请及时绑定邮箱和手机立即绑定

支持向量机(SVM)和python实现(一)

标签:
人工智能

1. 问题的提出

若存在一个样本集,其中有两类数据,我们希望将他们分类

https://img1.sycdn.imooc.com//5b950bd10001641507200249.jpg

像上图(a)那样的样本集,SVM的目的就是企图获得一个超平面(在这个例子中超平面是一个直线),这个超平面可以完美的分割不同的数据集,我们用下面的线性方程来表示这个超平面:

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


对于二维空间的超平面,实际上就是:

[w1w2][xy]+b=0[w1w2][xy]+b=0


我们再观察图(b)和(c)的两个直线,很明显b中的直线对样本集的划分更好一些,因为,在直线边缘的样本点离直线更远一些,这样就提高了样本划分的鲁棒性,所以我们就有了一个寻找超平面的最开始的理念:找到的这个超平面要离2组样本集尽量的远,即点到超平面的距离尽量大。
这里直接给出点到超平面的距离:

d=∣∣ωTx+b∣∣∥ω∥d=|ωTx+b|‖ω‖


我们现在再给出样本的类别标签,红色点为-1,蓝色点为1,则有:

{ωTxi+b>0ωTxi+b<0yi=1yi=−1{ωTxi+b>0yi=1ωTxi+b<0yi=−1


如果我们要求再高一些,我们希望这些点到超平面的距离都要大于d,则有:

{(ωTxi+b)/∥ω∥≥d(ωTxi+b)/∥ω∥≤dyi=1yi=−1{(ωTxi+b)/‖ω‖≥dyi=1(ωTxi+b)/‖ω‖≤dyi=−1


不等式两边同时除以d,可以得到:

{ωTdxi+bd≥1ωTdxi+bd≤−1yi=1yi=−1{ωdTxi+bd≥1yi=1ωdTxi+bd≤−1yi=−1


其中

ωd=ω∥ω∥d,bd=b∥ω∥dωd=ω‖ω‖d,bd=b‖ω‖d


实际上ωTdxi+bd=0ωdTxi+bd=0和ωTxi+b=0ωTxi+b=0是同样的超平面,既然如此我们就把ωdωd和bdbd继续叫做ωω和bb,那么我们就获得了SVM优化问题的约束条件:

{ωTxi+b≥1ωTxi+b≤−1yi=1yi=−1(1.1)(1.1){ωTxi+b≥1yi=1ωTxi+b≤−1yi=−1


https://img1.sycdn.imooc.com//5b950bd70001956809220812.jpg

(图片来自https://www.cnblogs.com/freebird92/p/8909546.html)

如上图所示的距离超平面最近的几个训练样本点使(1.1)中的等号成立,这些点我们称为“支持向量”,两个异类支持向量到超平面的距离之和为2∥ω∥22‖ω‖2,我们希望这个值越大越好,即12∥ω∥212‖ω‖2越小越好,所以我们的问题就变成了:

min12∥ω∥2s.t. yi(ωTxi+b)≥1,i=1,2,...,m.(1.2)(1.2)min12‖ω‖2s.t. yi(ωTxi+b)≥1,i=1,2,...,m.


2. 对偶问题

式(1.2)是一个凸二次规划问题,我们可以使用拉格朗日乘子法获取其对偶问题来求解,引入拉格朗日乘子αi≥0i=1,2,...,mαi≥0i=1,2,...,m,则式(1.2)写为:

L(ω,b,α)=12∥ω∥2+∑i=1mαi(1−yi(ωTxi+b))(2.1)(2.1)L(ω,b,α)=12‖ω‖2+∑i=1mαi(1−yi(ωTxi+b))


对ωω,b求偏导为0可得:

ω=∑i=1mαiyixi0=∑i=1mαiyi(2.2)(2.2)ω=∑i=1mαiyixi0=∑i=1mαiyi


将(2.2)带入(2.1)可得:

L(ω,b,α)=12∥ω∥2+∑i=1mαi(1−yi(ωTxi+b))=12ωTω−ωT∑i=1mαiyixi+∑i=1mαi−∑i=1mαiyib=12ωT(ω−2∑i=1mαiyixi)+∑i=1mαi=∑i=1mαi−12∑i=1,j=1mαiαjyiyjxTixj(2.3)(2.3)L(ω,b,α)=12‖ω‖2+∑i=1mαi(1−yi(ωTxi+b))=12ωTω−ωT∑i=1mαiyixi+∑i=1mαi−∑i=1mαiyib=12ωT(ω−2∑i=1mαiyixi)+∑i=1mαi=∑i=1mαi−12∑i=1,j=1mαiαjyiyjxiTxj


最后的对偶问题为:

max.∑i=1mαi−12∑i=1,j=1mαiαjyiyjxTixjs.t. αi≥0∑i=1mαiyi(2.4)(2.4)max.∑i=1mαi−12∑i=1,j=1mαiαjyiyjxiTxjs.t. αi≥0∑i=1mαiyi


解出αα后求出ωω和b就可以得到模型:

f(x)=ωTx+b=∑i=1mαiyixix+b(2.5)(2.5)f(x)=ωTx+b=∑i=1mαiyixix+b


因为式(1.2)含有不等式约束,因此对偶问题应满足KKT条件,这里稍微说一下KKT条件怎么获得的。


KKT条件

https://img1.sycdn.imooc.com//5b950be10001968e07200275.jpg

(图来自https://zhuanlan.zhihu.com/p/24638007

不等式约束g(x)≤0g(x)≤0即为图中的可行解区域,最优解x∗x∗的位置有两种情况:在可行区域边界上或者在可行区域内部。
在边界上:这种情况下g(x)=0g(x)=0,目标函数f(x)f(x)在可行解区域边缘更大,可行解区域其他地方更小,而g(x)g(x)在可行解区域内小于0,外部大于0,意味着f(x)f(x)的梯度方向与约束条件函数g(x)g(x)的梯度方向相反,则在最优解处满足下式:

∇f(x∗)+λ∇g(x∗)=0∇f(x∗)+λ∇g(x∗)=0


根据上式可以推出当最优解在边界上时λ>0λ>0
在区域内:这种情况相当于约束条件不存在,因此拉格朗日乘子λ=0λ=0,g(x)<0g(x)<0
这样就得出了KKT条件

g(x)≤0λ≥0λg(x)=0{g(x)≤0λ≥0λg(x)=0


其中第一个式子是约束本身,第二个式子是对拉格朗日乘子的描述,第三个式子是综合上述2种情况后获得的表达。


现在我们再回到之前的对偶问题中,(2.4)需要满足的KKT条件为:

αi≥0yif(xi)−1≥0αi(yif(xi)−1)=0{αi≥0yif(xi)−1≥0αi(yif(xi)−1)=0


于是,对于任意训练样本,总有αi=0αi=0或yif(xi)=1yif(xi)=1,当αi=0αi=0时,该样本不会对目标函数产生影响,若αi>0αi>0,则必有yif(xi)=1yif(xi)=1,此时对应样本位于最大间隔边界上,是一个支持向量。


3. 核函数

前面我们举的例子都是线 性可分的,如果找不到一条直线将两个数据集分离的时候该怎么办呢?
https://img1.sycdn.imooc.com//5b950be9000153be05470331.jpg
(图片来自http://www.360doc.com/content/14/0526/16/10724725_381159791.shtml
对于这样的问题,我们可以通过将样本点从原始空间映射到一个更高维的特征空间,使在这个新的特征空间内,样本点变得线性可分,就像上图描述的那样,我们用φ(x)φ(x)来表示将x映射后的特征向量,于是我们就可以将模型写为:

f(x)=ωTφ(x)+b=∑i=1mαiyiφ(x)Tφ(xi)+b(3.1)(3.1)f(x)=ωTφ(x)+b=∑i=1mαiyiφ(x)Tφ(xi)+b


对偶问题也描述为:

max.∑i=1mαi−12∑i=1,j=1mαiαjyiyjφ(xi)Tφ(xj)s.t. αi≥0∑i=1mαiyi(3.2)(3.2)max.∑i=1mαi−12∑i=1,j=1mαiαjyiyjφ(xi)Tφ(xj)s.t. αi≥0∑i=1mαiyi


求解(3.2)涉及到计算φ(xi)Tφ(xj)φ(xi)Tφ(xj)考虑到样本x映射到特征空间后维数可能很高,因此直接计算φ(xi)Tφ(xj)φ(xi)Tφ(xj)是很困难的,为了避免这种情况,我们引入下面这样的函数:

κij=κ(xi,xj)=⟨φ(xi),φ(xj)⟩=φ(xi)Tφ(xj)κij=κ(xi,xj)=⟨φ(xi),φ(xj)⟩=φ(xi)Tφ(xj)


即xixi和xjxj在特征空间的内积等于他们在原始样本空间中通过函数κ(xi,xj)κ(xi,xj)计算的结果,于是式(3.2)就可以重新写为:

max.∑i=1mαi−12∑i=1,j=1mαiαjyiyjκijs.t. αi≥0∑i=1mαiyi(3.3)(3.3)max.∑i=1mαi−12∑i=1,j=1mαiαjyiyjκijs.t. αi≥0∑i=1mαiyi


式(3.1)重写为:

f(x)=ωTφ(x)+b=∑i=1mαiyiκ(xi,x)+b(3.4)(3.4)f(x)=ωTφ(x)+b=∑i=1mαiyiκ(xi,x)+b


这里的κ(xi,xj)κ(xi,xj)就是核函数,显然,如果已知合适的φ(x)φ(x),我们很容易就可以写出核函数κ(xi,xj)κ(xi,xj),但是在一个任务中我们通常都不知道φ(x)φ(x)是什么形式的,那么我们该怎么取核函数呢?


令χχ为输入空间,κ(xi,xj)κ(xi,xj)是定义在χ×χχ×χ上的对称函数,则κκ是核函数当且仅当对于任意数据D={x1,x2,...,xm}D={x1,x2,...,xm},“核矩阵”K总是半正定的:

K=κ(x1,x1)...κ(xi,x1)...κ(xm,x1)...............κ(x1,xj)...κ(xi,xj)...κ(xm,xj)...............κ(x1,xm)...κ(xi,xm)...κ(xm,xm)K=[κ(x1,x1)...κ(x1,xj)...κ(x1,xm)...............κ(xi,x1)...κ(xi,xj)...κ(xi,xm)...............κ(xm,x1)...κ(xm,xj)...κ(xm,xm)]


只要一个对称函数所对应的核矩阵半正定,他就能作为核函数使用,实际上,对于一个半正定核矩阵,总能找到一个与之对应的映射φφ,换言之,任何一个核函数都隐式地定义了一个称为“再生和希尔伯特空间”的特征空间。前面说过,我们希望选取合适的核函数使样本在新特征空间内线性可分,因此特征空间的好坏对SVM的性能至关重要,下面给出一些常用的核函数:

  • 线性核:κij=κ(xi,xj)=xTixjκij=κ(xi,xj)=xiTxj

  • 多项式核:κij=κ(xi,xj)=(xTixj)dκij=κ(xi,xj)=(xiTxj)d

  • 高斯核:κij=κ(xi,xj)=exp(−∥xi−xj∥22σ2)κij=κ(xi,xj)=exp(−‖xi−xj‖22σ2)

  • 拉普拉斯核:κij=κ(xi,xj)=exp(−∥xi−xj∥σ)κij=κ(xi,xj)=exp(−‖xi−xj‖σ)

  • Sigmoid核:κij=κ(xi,xj)=tanh(βxTixj+θ)κij=κ(xi,xj)=tanh(βxiTxj+θ)

此外,还可以通过函数组合得到核函数:

  • 存在2个核函数κ1κ1和κ2κ2,他们的线性组合aκ1+bκ2aκ1+bκ2也是核函数

  • 存在2个核函数κ1κ1和κ2κ2,他们的直积κ1⊗κ2κ1⊗κ2也是核函数

  • 存在核函数κ1κ1,对于任意函数g(x)g(x),κ=g(x)κ1g(x)κ=g(x)κ1g(x)也是核函数

支持向量机(SVM)和python实现(二)https://blog.csdn.net/z962013489/article/details/82559626

原文出处:https://blog.csdn.net/z962013489/article/details/82499063

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消