周志华《机器学习》西瓜书 小白Python学习笔记(七) ———— 第六章 支持向量机SVM
- 什么是SVM
- SVM求解过程
- 转化为Lagrange对偶问题
- Lagrange对偶问题求解
- 1.
minw,bL(w,b,α)
- 2.
maxαi{minw,bL(w,b,α)}
- 核函数
- 软间隔
什么是SVM
支持向量机(support vector machines,SVM)的基本定义为在特征空间上的间隔最大的线性分类器,那么什么是间隔最大的线性分类器呢?
看这张图,样本空间为
{(x1,y1),(x2,y2),...,(xn,yn)}n个点,
y表示标签取值为-1或1,即图中的黑、白两类点,我们试图找到一个超平面将两类点分隔开,如图,设超平面的表达式为
wx+b=0
那么对于黑、白两种点分别有:
{wxi+b>0wxi+b<0
经过
w和
b的放缩可以整理成
{wxi+b≥1,yi=1wxi+b≤−1,yi=−1
使得两类点中距离这个超平面最近的点有
wxi+b=1,−1(即图片中标红的的点),这些点对应的就是支持向量。
根据数学知识,样本空间内任意一个点
xi到这个超平面的距离为
di=∥w∥∣wxi+b∣
研究支持向量对应的点到超平面的距离时,就变成了
d=∥w∥1
刚才所说的间隔最大的线性分类器中的“间隔”就是指的这个啦!
最优化函数即为
max∥w∥1
条件是
w能将两类点分隔开,即
wxi+b与
yi同号,又因为
∣wxi+b∣≥1,y=1,−1,所以可以表示为
yi(wxi+b)≥1,i=1,…,n
这就是支持向量机的由来。
SVM求解过程
转化为Lagrange对偶问题
回到之前得到的目标函数:
max∥w∥1
s.t.yi(wxi+b)≥1,i=1,…,n
可以转化成:
min21∥w∥2
s.t.yi(wxi+b)≥1,i=1,…,n
对于这个凸二次规划问题,可以通过拉格朗日对偶性质,将其转化为原问题的对偶问题进行求解。首先根据拉格朗日乘子法得到:
L(w,b,α)=21∥w∥2−∑i=1nαi(yi(wxi+b)−1)
其中
αi≥0,i=1,2,...,n
我们令
θ(w)=αi≥0maxL(w,b,α)
易知,只有当这个超平面将两类样本全部分隔开即所有约束条件都满足,即
yi(wxi+b)≥1,i=1,…,n时,
θ(w)=21∥w∥2
所以
θ(w)=⎩⎨⎧21∥w∥2,+∞,约束均成立其他
因此,此时只需要对
θ(w)关于
w,b求最小值就可以回到原目标函数了:
w,bminθ(w)=w,bminαi≥0maxL(w,b,α)=p∗
若将求最大最小值交换顺序,设求得的最优值
d∗:
αi≥0maxw,bminL(w,b,α)=d∗
根据对偶问题的性质,
p∗≥d∗
而
p∗=d∗的条件有两个:
- 优化问题是凸优化问题
- 满足KKT条件
(KKT详见)
Lagrange对偶问题求解
当满足KKT条件时,对偶问题函数为:
αi≥0maxw,bminL(w,b,α)
1.
minw,bL(w,b,α)
第一步是关于
w和
b求最小值,此时
αi看作常数。
对
w和
b分别求偏导,令偏导为0,得:
∂w∂L=w−i=1∑nαiyixi=0⇒w=i=1∑nαiyixi
∂b∂L=i=1∑nαiyi=0⇒i=1∑nαiyi=0
带入原式,得到
L(w,b,α)=21i=1∑Nj=1∑Nαiαjyiyj(xi⋅xj)−i=1∑Nαiyi((j=1∑Nαjyjxj)⋅xi+b)+i=1∑Nαi=−21i=1∑Nj=1∑Nαiαjyiyj(xi⋅xj)+i=1∑Nαi
2.
maxαi{minw,bL(w,b,α)}
第二步,关于
αi求最大值,即:
αimax−21i=1∑Nj=1∑Nαiαjyiyj(xi⋅xj)+i=1∑Nαi
稍微变形后,可以转化为:
αimin21i=1∑Nj=1∑Nαiαjyiyj(xi⋅xj)−i=1∑Nαi
s.t.i=1∑nαiyi=0,αi≥0,i=1,2,⋯,p
对于这个问题,我们通常采用的是序列最小化算法(SMO),得到
α∗,根据
α∗得到
w∗和
b∗。
(最小序列算法SMO:详见)
最终我们可以得到最优解对应的超平面为:
w∗x+b∗=0
那么我们就可以得到最终的目标分类函数为:
f(x)=sign(w∗⋅x+b∗)
核函数
我们以上讨论的都还是线性可分的数据,然而,绝大多数情况下数据并不是线性可分的,此时便不存在一个普通意义上的超平面可以将两类样本分隔开来。于是,我们通过引入核函数,将低维数据映射到高维,在高维空间找到一个超平面,以此来解决在原低维空间上线性不可分的问题。
根据上文中对线性可分数据的SVM算法推导,我们在这一过程中的目标函数只是涉及到了内积,所以我们只需要通过用核函数来取代之前的求内积运算。
看到我们上一步所得到的目标函数
αimin21i=1∑Nj=1∑Nαiαjyiyj(xi⋅xj)−i=1∑Nαi
其中涉及到内积运算的是
(xi⋅xj),于是我们将这一部分替换为核函数
κ(xi,xj)即可。
αimin21i=1∑Nj=1∑Nαiαjyiyjκ(xi,xj)−i=1∑Nαi
s.t.i=1∑nαiyi=0,αi≥0,i=1,2,⋯,p
原超平面的表示为
f(x)=wx+b
且
w=∑i=1nαiyixi
即:
f(x)=i=1∑nαiyixi⋅x+b
引入核函数后,即为:
f(x)=i=1∑nαiyiκ(xi,x)+b
此时,最终的目标分类函数为:
f(x)=sign(i=1∑nαi∗yiκ(xi,x)+b∗)
常见的核函数有:
- 线性核函数
κ(x,xi)=x⋅xi
主要用于线性可分的情况,特征空间到输入空间的维度是一样的。
- 多项式核函数
κ(x,xi)=((x⋅xi)+1)d
多项式核函数可以实现将低维的输入空间映射到高纬的特征空间,
d为多项式的次数。
- 高斯核函数
κ(x,xi)=exp(−δ2∥x−xi∥2)
该核函数是应用最广的一个,在不知道用什么核函数的时候,可以优先使用高斯核函数。
- Sigmoid核函数
κ(x,xi)=tanh(η<x,xi>+θ)
采用sigmoid核函数,那么SVM实际就是一种多层神经网络。
软间隔
需要注意的是,以上我们讨论的无论是线性可分还是线性不可分的情况,最终的目标都是找到一个超平面将两类样本完全分开,但是这在实际问题中往往很难实现,而且即使找到了一个超平面可以将两类样本完全分开也很有可能会导致过拟合等后果。
于是,合理的做法是我们可以允许超平面在少量的样本的分类上出错,这就是“软间隔”的概念;与此相对的,之前的超平面不允许有分类错误的样本,我们称之为“硬间隔”。
之前的Lagrange对偶函数如下,其后半部分即为“ 硬间隔 ”的要求:
L(w,b,α)=21∥w∥2−i=1∑nαi(yi(wxi+b)−1)
将此处不允许有错误改为错误函数(损失函数),并乘一个常数项
C,就是软间隔支持向量机啦!
w,bmin21∥w∥2+Ci=1∑nℓ0/1(yi(wxi+b)−1)
其中
ℓ0/1为“0/1损失函数”,
C为事先确定的正常数.
常用的损失函数有:
- hinge 损失:
ℓhinge(z)=max(0,1−z)
- 指数损失(exponential loss):
lexp(z)=exp(−z)
- 对率损失(logistic loss):
ℓlog(z)=log(1+exp(−z))
其中最常用的为hinge损失函数,采用hinge 损失函数目标函数可化为:
w,bmin21∥w∥2+Ci=1∑nmax{0,1−yi(wxi+b)}
用松弛变量
ξi≥0代替,得:
w,bmin21∥w∥2+Ci=1∑nξi.
可以理解为由原来的约束条件:
s.t.yi(wxi+b)≥1,i=1,…,n
转变成:
s.t.yi(wxi+b)≥1−ξi,i=1,…,n
所以目标函数为:
w,bmin21∥w∥2+Ci=1∑nξi.
s.t.yi(wxi+b)≥1−ξi,ξi≥0,i=1,…,n
之后跟之前的方法相同,转化为对偶问题求解,过程略,对偶问题为:
αmaxs.t.i=1∑nαi−21i,j=1∑nαiαjyiyj⟨xi,xj⟩0≤αi≤C,i=1,…,ni=1∑nαiyi=0
注:图片源自网络