您的位置:首页 > 编程语言 > Python开发

支持向量机SVM原理详解+白板推导

2018-03-05 22:07 447 查看
感知机是SVM的基础,详细介绍请戳http://blog.csdn.net/akirameiao/article/details/79436859

原理

线性可分支持向量机

问题的输入输出

X = {x1,x2,...,xnx1,x2,...,xn}

Y = {+1, -1}

模型:

感知机的目的是找到一个可以正确分类数据的超平面S:ω⋅x+b=0ω⋅x+b=0, 得到感知机模型 f(x)=sign(ω⋅x+b)f(x)=sign(ω⋅x+b),其中ω⋅x+b>0ω⋅x+b>0为正类,ω⋅x+b<0ω⋅x+b<0为负类。SVM和感知机最大的差别就是SVM寻找的间隔最大的超平面,所谓间隔,可以理解为实例点到超平面最小的距离,所以SVM找的是把数据正确分隔的”最开”的超平面。

间隔

函数间隔:对于给定的训练数据集T和超平面(ω,bω,b), 定义超平面关于样本点(xi,yixi,yi)的函数间隔为 γ̂ i=yi(ω⋅xi+b)γ^i=yi(ω⋅xi+b)

几何间隔:对于给定的训练数据集T和超平面(ω,bω,b), 定义超平面关于样本点(xi,yixi,yi)的几何间隔为 γi=1||ω||yi(ω⋅xi+b)=γ̂ i||ω||γi=1||ω||yi(ω⋅xi+b)=γ^i||ω||

所以我们可以建立模型:

输入: T={(x1,y1),(x2,y2),⋯,(xi,yi)}T={(x1,y1),(x2,y2),⋯,(xi,yi)}

输出: 分离超平面:ω⋅x+b=0ω⋅x+b=0 决策函数:f(x)=sign(ω⋅x+b)f(x)=sign(ω⋅x+b)

策略:

接下来的问题就是找到间隔最大的超平面,记超平面关于实例点的的几何间隔【1||ω||yi(ω⋅xi+b)≥γi1||ω||yi(ω⋅xi+b)≥γi 】, 定义超平面关于所有实例点的几何间隔为【γ=maxγiγ=maxγi】, 则问题就可以写成【 maxω,bγmaxω,bγ ,s.t.yi(ω⋅xi+b)≥γis.t.yi(ω⋅xi+b)≥γi 】

有几何间隔和函数间隔的关系,问题可以改写为【maxγ̂ ||ω||maxγ^||ω||】【s.t.yi(ω⋅xi+b)≥γ̂ ,i=1,2,⋯,Ns.t.yi(ω⋅xi+b)≥γ^,i=1,2,⋯,N】

由于同时成比例的改变 ωω 和 b ,不会影响超平面的位置,也不会影响不等式约束和目标函数的优化,可以令【γ̂ =1γ^=1】,为了求解的方便,把优化目标改成:min12||ω||2min12||ω||2,约束条件改成yi(ω⋅xi+b)−1≥0,i=1,2,⋯,Nyi(ω⋅xi+b)−1≥0,i=1,2,⋯,N

算法:

原始算法:

输入:线性可分数据集T={(x1,y1),(x2,y2),⋯,(xn,yn)}T={(x1,y1),(x2,y2),⋯,(xn,yn)},其中,xi∈Rn,yi∈{+1,−1},i=1,2,⋯,Nxi∈Rn,yi∈{+1,−1},i=1,2,⋯,N

输出:最大间隔分离超平面:ω∗⋅x+b∗=0ω∗⋅x+b∗=0 分类决策函数:f(x)=sign(ω∗⋅x+b∗)f(x)=sign(ω∗⋅x+b∗)

过程:(1)minω,b12||ω||2(1)minω,b12||ω||2, s.t.s.t. yi(ω⋅xi+b)−1≥0,i=1,2,⋯,Nyi(ω⋅xi+b)−1≥0,i=1,2,⋯,N,求的最优解 ω∗,b∗ω∗,b∗

(2)得到分离超平面 w∗⋅x+b=0w∗⋅x+b=0,决策函数 f(x)=sign(ω∗⋅x+b∗)f(x)=sign(ω∗⋅x+b∗)

对偶算法:

首先构建原始问题的拉格朗日函数 L(ω,b,α)=12||ω||2+∑Ni=1αi(1−yi(ω⋅xi+b))L(ω,b,α)=12||ω||2+∑i=1Nαi(1−yi(ω⋅xi+b)) 由拉格朗日对偶性,原始问题的对偶问题的极大极小问题 maxαminω,bL(ω,b,α)maxαminω,bL(ω,b,α) 接下来是求解过程

a. 对ω,bω,b 求偏导数,并令其等于0,【∇ωL(ω,b,α)=ω−∑Ni=1αiyixi=0∇ωL(ω,b,α)=ω−∑i=1Nαiyixi=0 】, 【∇bL(ω,b,α)=∑Ni=1αiyi∇bL(ω,b,α)=∑i=1Nαiyi】,得到【ω=∑Ni=1αiyixi,∑Ni=1αiyi=0ω=∑i=1Nαiyixi,∑i=1Nαiyi=0】

b. 将a中得到的结果代入拉格朗日函数,化简得到

【 minω,bL(ω,b,α)=−12∑Ni=1∑Nj=1αiαjyiyj(xi⋅xj)+∑Ni=1αiminω,bL(ω,b,α)=−12∑i=1N∑j=1Nαiαjyiyj(xi⋅xj)+∑i=1Nαi】

c. 接下来求【maxα−12∑Ni=1∑Nj=1αiαjyiyj(xi⋅xj)+∑Ni=1αimaxα−12∑i=1N∑j=1Nαiαjyiyj(xi⋅xj)+∑i=1Nαi,s.t ∑Ni=1αiyi=0∑i=1Nαiyi=0, αi≥0αi≥0】, 【i=1,2,⋯,Ni=1,2,⋯,N】

d. 转化为求【minα12∑Ni=1∑Nj=1αiαjyiyj(xi⋅xj)−∑Ni=1αiminα12∑i=1N∑j=1Nαiαjyiyj(xi⋅xj)−∑i=1Nαi, s.t∑Ni=1αiyi=0∑i=1Nαiyi=0, αi≥0,i=1,2,⋯,Nαi≥0,i=1,2,⋯,N】

拉格朗日函数的KKT条件

∇ωL(ω,b,α)=0∇ωL(ω,b,α)=0

αi≥0αi≥0

yif(xi)−1≥0yif(xi)−1≥0

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

e. 由KKT条件,ω∗=∑Ni=1α∗yixiω∗=∑i=1Nα∗yixi , 由于ω≠0ω≠0可知存在下标 j,使得α∗j>0αj∗>0 , 那么yi(ω⋅xi+b)=0,yi(ω⋅xi+b)=0,将 ωω 代入,得到 b∗=yj−∑Ni=1α∗iyi(xi⋅xj)b∗=yj−∑i=1Nαi∗yi(xi⋅xj)

输入:线性可分数据集T={(x1,y1),(x2,y2),⋯,(xn,yn)}T={(x1,y1),(x2,y2),⋯,(xn,yn)},其中,xi∈Rn,yi∈{+1,−1},i=1,2,⋯,Nxi∈Rn,yi∈{+1,−1},i=1,2,⋯,N

f.计算出 αα 之后,可以得到ω,bω,b,分离超平面∑Ni=1α∗iyi(x⋅xi)+b∗∑i=1Nαi∗yi(x⋅xi)+b∗ , 分类决策f(x)=sign(∑Ni=1α∗iyi(x⋅xi)+b∗)f(x)=sign(∑i=1Nαi∗yi(x⋅xi)+b∗)

线性支持向量机

如果数据中大部分点是线性可分的,但是存在少数点是线性不可分,这种情况下,就可以使用软间隔支持向量机,每个实例支付一个代价 ξiξi ,将约束条件写成 yi(ω⋅xi+b)≥1−ξiyi(ω⋅xi+b)≥1−ξi , 将优化目标函数写成 12||ω||2+C∑Niξi12||ω||2+C∑iNξi, C是调和两者的参数,这样的叫做软间隔支持向量机

策略:

min12||ω||2+C∑Niξimin12||ω||2+C∑iNξi

s.t.yi(ω⋅xi+b)≥1−ξis.t.yi(ω⋅xi+b)≥1−ξi

ξ≥0ξ≥0

算法:

a.L(ω,b,ξ,α,μ)=12||ω||2+C∑Niξi+∑Niαi[1−ξi−yi(ω⋅xi+b)]+∑Ni(−μiξi)a.L(ω,b,ξ,α,μ)=12||ω||2+C∑iNξi+∑iNαi[1−ξi−yi(ω⋅xi+b)]+∑iN(−μiξi)

展开后得到

L(ω,b,ξ,α,μ)=12||ω||2+C∑Niξi+∑Niαi−∑Niαiξi−∑Niαiyiωxi−∑Niαiyib−∑NiμiξiL(ω,b,ξ,α,μ)=12||ω||2+C∑iNξi+∑iNαi−∑iNαiξi−∑iNαiyiωxi−∑iNαiyib−∑iNμiξi

b.原始问题的对偶问题ω,b,ξω,b,ξ求偏导数,得到

∇ωL=ω−∑Niαiyixi∇ωL=ω−∑iNαiyixi

∇bL=−∑Niαiyi∇bL=−∑iNαiyi

∇ξiL=C−αi−μi∇ξiL=C−αi−μi

令偏导数为0,得到

ω=∑Niαiyixiω=∑iNαiyixi

∑Niαiyi=0∑iNαiyi=0

C−αi−μi=0C−αi−μi=0

c.将b中的结果代入拉格朗日函数,得到对偶问题

【 minω,bL(ω,b,α)=−12∑Ni=1∑Nj=1αiαjyiyj(xi⋅xj)+∑Ni=1αiminω,bL(ω,b,α)=−12∑i=1N∑j=1Nαiαjyiyj(xi⋅xj)+∑i=1Nαi】

d. 接下来求

maxα−12∑Ni=1∑Nj=1αiαjyiyj(xi⋅xj)+∑Ni=1αimaxα−12∑i=1N∑j=1Nαiαjyiyj(xi⋅xj)+∑i=1Nαi,s.t ∑Ni=1αiyi=0∑i=1Nαiyi=0, αi≥0αi≥0】, 【i=1,2,⋯,Ni=1,2,⋯,N】

e. 转化为求

minα12∑Ni=1∑Nj=1αiαjyiyj(xi⋅xj)−∑Ni=1αiminα12∑i=1N∑j=1Nαiαjyiyj(xi⋅xj)−∑i=1Nαi,

s.t ∑Ni=1αiyi=0∑i=1Nαiyi=0,

αi≥0,i=1,2,⋯,Nαi≥0,i=1,2,⋯,N

μi≥0μi≥0

αi(yi(ω⋅xi+b)−1+ξi)=0αi(yi(ω⋅xi+b)−1+ξi)=0

f.计算出 αα 之后,可以得到ω,bω,b,分离超平面∑Ni=1α∗iyi(x⋅xi)+b∗∑i=1Nαi∗yi(x⋅xi)+b∗ , 分类决策f(x)=sign(∑Ni=1α∗iyi(x⋅xi)+b∗)f(x)=sign(∑i=1Nαi∗yi(x⋅xi)+b∗)

非线性支持向量机

当数据在当前输入空间线性不可分时,可以使用映射函数,ϕ(x)ϕ(x) 将样本映射到特征空间,使它们变得线性可分

核函数:

K(xi,xj)=ϕ(xi)⋅ϕ(xj)K(xi,xj)=ϕ(xi)⋅ϕ(xj)

优化目标可以写成

分离超平面∑Ni=1α∗iyiK(x⋅xi)+b∗∑i=1Nαi∗yiK(x⋅xi)+b∗ , 分类决策 f(x)=sign(∑Ni=1α∗iyiK(x⋅xi)+b∗)f(x)=sign(∑i=1Nαi∗yiK(x⋅xi)+b∗)

核函数一般的由高斯核函数、

SMO算法

1.选出两个优化变量αi,αjαi,αj之后,通过代数方法求解二次规划问题

2.选出一个变量αiαi,如何选择第二个变量αjαj

白板推导





面试必会

线性支持向量机

实现

Python代码
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息