版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Hemk340200600/article/details/85390019
线性可分
在二维平面中,正样本和负样本可以由一条直线完全隔开。假设存在直线
y=ω1x+b使得平面上
ω1x+b≥0处完全是正样本,
ω1x+b<0完全是负样本,那么这条直线就是一个超平面,它将样本完全分开,并且这样的样本被称为线性可分。
超平面
超平面是推广到n维空间后的概念,在一维空间下,超平面就是一个点;在二维空间下,超平面就是一条直线;在三维平面下,超平面就是一个平面;…推广到n维情况,则统称为超平面
支持向量机
在二维平面上,对于一组线性可分的数据,往往可以找到很多条直线作为超平面。支持向量机可以在这若干条直线中,找出最合适的一条直线作为决策边界。如何判断直线足够合适呢?对于一个决策边界,我们希望他能够具有较好的泛化能力。假如正样本均匀分布在y=0的直线上,负样本均匀分布在存在于y=9的直线上。假设我们取y=1,y=5,y=8作为超平面,从直觉上来讲,y=1,y=8两条直线都离一组样本过近,离另外一组样本过远,因此这两条直线都不合适。而y=5作为y=0和y=9的垂线,对于正样本和负样本都留有一定的余地,这使得模型的泛化能力变强。当出现一些噪声,比如y=2上出现了正样本,y=7上出现了负样本的情况,y=5都能够将其归为正确的分类。当然,并不是所有的样本都如我们期望的那样线性可分。
总的来说,支持向量机(support vector machines)可以分为以下三种:
- 当训练样本线性可分时,通过硬间隔最大化,学习一个线性可分SVM。
- 当训练样本近似线性可分时,通过软间隔最大化,学习一个线性SVM。
- 当训练样本线性不可分时,通过核技巧和软间隔最大化,学习一个非线性支持向量机。
算法推导
几何间隔
在超平面确定的情况下,
∣ωx+b∣表示点到超平面的距离,而函数最终预测输出的y(1和-1)与
ωx+b 符号一致,因此可用
y(ωx+b)来表示分类预测的准确程度。定义所有样本点最小的
y(ωx+b)作为函数间隔,
根据高中的知识,我们知道点到直线的距离公式为
d=∣a2+b2
ax0+by0+c∣,点到平面的距离公式为
d=∣A2+B2+C2
Ax0+By0+Cz0+D∣,如果用向量表示,设
ω=(a,b),
f(x)=ωTx+c,那么这个距离正是
∣∣ω∣∣∣f(x)∣。
支持向量
满足
y(ωTx+b)=1的样本点称之为支持向量。对于其他不是支持向量的点,显然有
y(ωTx+b)>1。
令
x
+和
x
−表示两个正负支持向量,满足
y(ωTx+b)=1,推出
{ωTx+=1−bωTx−=−1−b。对于一正一负两个支持向量的间隔等于两个支持向量的差在
ω上的投影,即
γ=∣∣ω∣∣x
+⋅ω
T−∣∣ω∣∣x
−⋅ω
T=∣∣ω∣∣x
+⋅ω
T−x
−⋅ω
T=∣∣ω∣∣1−b+(1+b)=∣∣ω∣∣2。因此,我们的目标就是最大化这个间隔,也就是
w,bmax∣∣ω∣∣2,s.t.yi(ωTxi+b)≥1(i=1,2,...,m)
最大化
∣∣ω∣∣2相当于最小化
∣∣ω∣∣,为了计算方便,将上述式子转化为
w,bmin21∣∣ω∣∣2,s.t.yi(ωTxi+b)≥1(i=1,2,...,m)..................(1)
对偶问题
该问题的拉格朗日函数可以写为:
L(ω,b,a)=21∣∣ω∣∣2+i=1∑mai(1−yi(ωTxi+b)).....................(2)
公式(1)等价于求解
w,bmin(an≥0maxL(w,b,a)),考虑两种情况:
- 如果某个b,w不符合原始问题的条件,即某个$1-y_i(\omega^Tx_i+b)>,则内部的max操作会将a推向无穷大,在min操作中会被淘汰。
- 如果某个b,w满足原始问题的约束,则内部max会将所有的a推向0,在外部的min操作中就会取得满足条件的b,w中目标函数最小的组合。
对于一个确定的a’,根据
max≥any,有
w,bmin(an≥0maxL(w,b,a))≥w,bminL(w,b,a′)
因为对于a’都有上式成立,所以
w,bmin(an≥0maxL(w,b,a))≥an≥0max(w,bminL(w,b,a′))
因此得到其对偶问题为:
an≥0max(w,bminL(w,b,a′))
该拉格朗日函数式子的KKT条件为:
⎩⎪⎨⎪⎧ai≥01−yi(ωTxi+b)≥0ai(1−yi(ωTxi+b))=0
公式(2)分别对
ω和b求偏导得到:
⎩⎪⎨⎪⎧∂ω∂L=ω−i=1∑maiyixi∂b∂L=i=1∑maiyi
根据拉格朗日乘子法,分别令偏导为0,得到
⎩⎪⎨⎪⎧ω=i=1∑maiyixi..........(3)i=1∑maiyi=0..............(4)
将公式(3)和(4)代入(2)中得到
L(ω,b,a)=21ωTω+i=1∑mai−i=1∑maiyi(ωTxi+b)=21ωTω+i=1∑mai−ωTi=1∑maiyixi−bi=1∑maiyi=21ωTi=1∑maiyixi+i=1∑mai−ωTi=1∑maiyixi−b⋅0=i=1∑mai−21ωTi=1∑maiyixi=i=1∑mai−21i=1∑mj=1∑maiajyiyjxixjs.t.i=1∑maiyi=0,ai≥0,i=1,2,...m
于是我们得到了只包含变量a的表达式,从上面的式子可以得到
amini=1∑mai−21i=1∑mj=1∑maiajyiyjxixj......(5)s.t.i=1∑maiyi=0,ai≥0,i=1,2,...m
通过求解公式(5)得到a后,并回代得到
ω和b,我们最终可以到超平面:
f(x)=ωTx+b=i=1∑maiyixiTx+b..........(6)
结合式子(2)以及KKT条件,可以知道对于任意的训练样本
(xi,yi),若
ai=0,则其不会在(6)中出现,不影响模型训练。若
ai>0,则
yi(ωTxi+b)=1,即该样本一定是支持向量。不难发现,最终模型只与支持向量有关;
非线性SVM
对于非线性的问题,上面的SVM并不能够有效解决,必须用到非线性模型才可以分类。对于二维平面上散落的点,我们不一定能够用一条直线就将其分开,比如圆形、椭圆形、矩形或其他不规则的决策边界。对于这样的问题,我们可以将训练样本映射到一个更高的维度,并且在这个高维度中样本是线性可分的,这样我们就又可以用回前面的公式。
想象一个平面上分散着线性不可分的样本点,一个高手一拍桌子,样本点飞上了天空,并且刚好有一个平面可以将正样本和负样本隔开。令
ϕ(x)表示将x映射到高维空间后的特征向量,于是在特征空间中,模型变为
f(x)=ωTϕ(x)+b..........(7)
最小化函数为:
w,bmin21∣∣ω∣∣2,s.t.yi(ωTϕ(xi)+b)≥1(i=1,2,...,m)...............(8)
其对偶问题变为:
amaxi=1∑mai−21i=1∑mj=1∑maiajyiyjϕ(xi)Tϕ(xj).........(9)s.t.i=1∑maiyi=0,ai≥0,i=1,2,...m
若要计算,由于样本已经被映射到高维空间,如果要计算高纬度的
ϕ(xi)Tϕ(xj)通常是困难的,于是我们想利用样本在原特征空间下,通过某个函数
K(xi,xj)得到其在高维空间下的內积。则式子(9)变为
amaxi=1∑mai−21i=1∑mj=1∑maiajyiyjK(xi,xj).........(10)s.t.i=1∑maiyi=0,ai≥0,i=1,2,...m
求解后得到
f(x)=ωTϕ(x)+b=i=1∑maiyiϕ(xi)Tϕ(xj)+b(11)=i=1∑maiyiK(xi,xj)+b
核函数
上面提到的
K(xi,xj),其实就是核函数,它用来映射原始样本
xi,xi在高维特征空间下的內积,从而避免了直接在高维空间中进行计算。由于核函数的构造较为复杂,因此人们通常从一些常用的核函数中选择,而不是自己构造。一些常用的核函数如下:
- 线性核:
K(xi,xj)=xiTxj
- 多项式核:
K(xi,xj)=(xiTxj)d(d是多项式的次数,d=1时为线性核)
- 高斯核:
K(xi,xj)=exp(2σ2∣∣xi−xj∣∣2),(σ>0)
- 拉普拉斯核:
K(xi,xj)=exp(σ∣∣xi−xj∣∣),(σ>0)
- Sigmoid核:
K(xi,xj)=tanh(βxiTxj+θ),(β>0,θ>0)
松弛变量
当样本是线性不可分的时候,往往需要映射到高维空间内计算。但有时仅仅只是因为数据有噪音,比如说,有一两个噪声,偏离了正常的位置。这些噪声如果作为支持向量的话,超平面将不得不变得偏离,间隔也会变小。如果我们能够允许数据点在一定程度上偏离超平面,这样我们依旧能够得到较好的超平面。因此我们定义一个变量
ξ,使得约束条件变为:
yi(ωTxi+b)≥1−ξ,i=1,2,...,n
ξi称为松弛变量,是样本
xi允许偏移的量。当
ξ很大时,任意的超平面都符合条件。所以在目标函数加上一项,使得
ξ的总和也要最小,新的优化目标为
min21∣∣ω∣∣2+Ci=1∑mξi(12)s.t.yi(ωTxi+b)≥1−ξi,i=1,2,...mξi≥0,i=1,2,...m
其中C作为惩罚参数,当C很大时,对分类错误的惩罚较大;当C较小时,对分类错误的惩罚较小,公式()要使最小间隔尽量大,误分类点尽量少,C是调和两者的权重系数。
公式(12)的拉格朗日函数为
L(ω,b,a,ξ,μ)=21∣∣ω∣∣2+Ci=1∑mξi+i=1∑mai(1−ξi−yi(ωTxi+b))−i=1∑mμiξi..........(13)
该式子的KKT条件为:
⎩⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎧ai≥01−ξi−yi(ωTxi+b)≥0ai(1−ξi−yi(ωTxi+b))=0ξi≥0μi≥0μiξi=0
求导后令偏导数为0,得
⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧ω=i=1∑maiyixi.........(14)i=1∑maiyi=0.........(15)∂ξi∂L=C−ai−μi=0i=1,2,...m(16)
将公式(14)(15)(16)带入(13)得到
amaxi=1∑mai−21i=1∑mj=1∑maiajyiyjxixj.............(17)s.t.i=1∑maiyi=0,ai≥0,μi≥0,0≤ai≤C,i=1,2,...m
SMO算法
那么如何求解以上公式中的a呢?这里要用到的是SMO算法,即序列最小最优化算法。a需要满足两个条件,因此我们同时更新两个变量,保证两个基本条件可以满足。假设我们更新变量
a1,a2,则其他变量
ai(i=3,4,...m)是固定的,令
ξ=−i=3∑maiyi,则有
a1y1+a2y2=ξ。优化问题的子问题变为:
a1,a2minW(a1,a2)=21K11a12+21K22a22+y1y2K12a1a2−(a1+a2)+y1a1i=3∑myiaiKi1+y2a2i=3∑myiaiKi2s.t.a1y1+a2y2=ξ,0≤ai≤C,i=1,2,...m
由于
a1y1+a2y2=ξ等价于
{a1+a2=ξa1−a2=ξ。由于
a1和
a2都位于0和C之间,目标函数的约束域是以(0,0),(0,C),(C,0),(C,C)围成的正方形区域,其中存在的
a1+a2=ξ和
a1−a2=ξ两条直线。由条件
a1y1+a2y2=ξ,yi2=1得
a1=(ξ−a2y2)y1,回代到
W(a1,a2)得到只包含
a2的函数
W(a2),对其求导并令其为0,有
Ei=(j=1∑majyjK(xj,xi)+b)−yi,i=1,2η=K11−2K12+K22=(ϕ(x1)−ϕ(x2))2a2new,unc=a2old+ηy2(E1−E2)
我们的目标是求在正方形内的线段上的最优值,令线段的左端点为L,右端点为H,则有
a1,a2的更新值如下
a2new=⎩⎪⎨⎪⎧H,a2new,unc>Ha2new,unc,L≤a2new,unc≤HL,a2new,unc<La1new=a1old+y1y2(a2old−a2new)
关于
a1,a2变量的选择,SMO采用启发式选择,选择的a应该满足KK条件,并且更新时应该最大限度地它包含三个步骤:
- 扫描所有拉格朗日乘子,把第一个违反KKT条件的作为更新对象,令其为
aj;
- 在所有不违反KKT条件的乘子中,选择使
∣Ei−Ej∣最大的
ai。
- 重新计算
b、Ei,Ej。
SMO算法的主要步骤总结如下:
- 选择接下来要更新的一对
ai和
aj;采用启发式的方式进行选择,使目标函数最大程度接近全局最优值。
- 将
ai和
aj进行优化,保持其他所有的
ak(k̸=i,j)不变。