前言
最近看了Andrew Ng的机器学习视频中的支持向量机,视频的内容比较浅显,没有深入解释支持向量机中的数学原理。但是对于一个比较执着于知道为什么的人,笔者还是去网上查找了有关支持向量机原理以及实现的相关资料。在查找的过程中,笔者发现支持向量机的内容还是蛮多的,于是笔者根据自己的理解,并且参考了一些相关资料,最终写下了支持向量机的四篇博客。
机器学习:支持向量机(SVM)与Python实现第(一)篇——此篇主要介绍了分类间隔,引入SVM。
机器学习:支持向量机(SVM)与Python实现第(二)篇——此篇主要介绍了使用拉格朗日乘子来简化SVM问题的优化。
机器学习:支持向量机(SVM)与Python实现第(三)篇——此篇主要介绍非线性分类(核函数)以及松弛变量。
机器学习:支持向量机(SVM)与Python实现第(四)篇——此篇主要介绍SMO算法并用python实现了简单的SVM分类器。
上一节经过我们的推导,最终把问题变成:
minγ,w,b 12∥w∥2s.t. y(i)(wTx(i)+b)≥1, i=1,...,m
接下来我们就要来看看如何来高效解决这个问题。
拉格朗日对偶性
首先我们先暂时放下SVM和最大间隔分类器,而来谈谈如何解决含有限制的优化问题。这种问题的一般形式是:
minw f(w)s.t. hi(w)=0, i=1,...,l
对于这种问题,一般我们使用拉格朗日乘子(
对拉格朗日乘子的理解请参考)来解决,即我们定义:
L(w,β)=f(w)+∑i=1lβihi(w)
其中,
βi 叫做拉格朗日乘子。
接下来我们对
L(w,β) 求偏导,并且令偏导数为0:
∂L∂wi=0; ∂L∂βi=0
这样就可以求解出w和
β 了。
上面列举的限制条件是等式的情况,有时候限制条件是不等式。考虑下面的原始优化问题:
minw f(w)s.t. gi(w)≤0, i=1,...,khi(w)=0, i=1,...,l (1)
为了求解出这个问题,我们可以定义下面的泛化拉格朗日函数:
L(w,α,β)=f(w)+∑i=1kαigi(w)+∑i=1lβihi(w)
其中,
α和β 叫做拉格朗日乘子。
接下来详细推导一下KKT条件:
hi(w)=0⇒L(w,α,β)=f(w)+∑i=1kαigi(w)∵ αi≥0gi(w)≤0}⇒∑i=1kαigi(w)≤0∴ maxα L(w,α,β)=f(w) (2)∴ minw f(w)=minw maxα L(w,α,β) (3)
而另一方面:
maxα minw L(w,α,β)=maxα[minw f(w)+minw αg(w)]=maxα minw f(w)+maxα minw αg(w)=minw f(w)+maxα minw αg(w)
∵ αi≥0gi(w)≤0}⇒minw αg(w)={0−∞if α=0 or g(w)=0if α>0 or g(w)<0∴α=0 or g(w)=0⇒maxα minw L(w,α,β)=minw f(w)+maxα minw αg(w)=minw f(w) (4)
联合(3), (4),我们可以得到以下结论:
αigi(w)=0,i=1,...,kαigi(w)≤0,i=1,...,kαi≥0,i=1,...,k⎫⎭⎬⎪⎪⇒minw maxα L(w,α,β)=maxα minw L(w,α,β) (5)
我们把
maxα minw L(w,α,β) 称为原问题
minw maxα L(w,α,β) 的对偶问题,上式表明当满足一定条件时,原问题和对偶问题的解以及
minw f(w) 的解是相同的。上面的推导就是为了得到式(5)。
现在假设最优解为w∗ ,那么在最优解处α=0 or g(w∗)=0 。把w∗ 代入(2)式得到maxα L(w∗,α,β)=f(w∗) ,而由式(4)得maxα minw L(w,α,β)=f(w∗) 。所以,L(w∗,α,β)=minw L(w,α,β) ,这说明w∗ 也是L(w,α,β) 的极值点,即
∂L(w,α,β)∂w|w=w∗=0
我们的最开始的问题是minw f(w) ,经过推导把原问题变成对偶问题,只要解出对偶问题,原问题也就解了,前提是又多了几个条件,原问题和对偶问题才是等价的。所以等价的对偶问题为:
s.t. maxα minw L(w,α,β)∂∂wiL(w,α,β)=0,i=1,...,n∂∂βiL(w,α,β)=0,i=1,...,lαigi(w)=0,i=1,...,kαigi(w)≤0,i=1,...,kαi≥0,i=1,...,k
其中,限制条件也叫做KKT条件。
优化间隔分类器
好了,现在回到我们一开始的问题,我们要优化的目标是:
minγ,w,b 12∥w∥2s.t. y(i)(wTx(i)+b)≥1, i=1,...,m
我们可以将限制条件改写为以下形式:
gi(w)=−y(i)(wTx(i)+b)+1≤0
请注意,从KKT条件中,我们会发现当
αi>0 时,
gi(w)=0 ,即
y(i)(wTx(i)+b)=1 。而符合
gi(w)=0 的那些点就是在虚线的点,如下图所示:
图中三个在虚线上的点就叫做支持向量。也就只有在这三个点的时候,
gi(w) 才是0,
αi 才不是0。其他时候,
αi 都是0。这是一个很好的性质,后面我们会说到。
现在我们来构造一个拉格朗日函数:
L(w,b,α)=12∥w∥2∑i=1mαi[y(i)(wTx(i)+b)−1]
这里没有等式限制,所以没有
β 。
现在我们来找它的对偶问题。根据上面的KKT条件有:
s.t. maxα minw 12∥w∥2−∑i=1mαi[y(i)(wTx(i)+b)−1]∂∂wiL(w,b,α)=0,i=1,...,n∂∂bL(w,b,α)=0αigi(w)=0,i=1,...,kαigi(w)≤0,i=1,...,kαi≥0,i=1,...,k
之所以要对b也求偏导,是因为
上一篇博文说过,b是
θ0 ,所以w和b组成完整的向量
θ 。
我们现在直接对w和b求偏导并让其等于0。如下:
∵∂∂wL(w,b,α)=w−∑i=1mαiy(i)x(i)=0∴w=∑i=1mαiy(i)x(i) (6)∂∂bL(w,b,α)=∑i=1mαiy(i)=0 (7)
将上面的结果代入到拉格朗日函数中,我们可以得到:
L(w,b,α)=∑i=1mαi−12∑i,j=1my(i)y(j)αiαj(x(i))Tx(j)−b∑i=1mαiy(i) (8)
从方程(7)我们知道式(8)的最后一项为0。即:
L(w,b,α)=∑i=1mαi−12∑i,j=1my(i)y(j)αiαj(x(i))Tx(j) (9)
现在w已经没有了,所以的对偶问题就变成:
maxα s.t W(α)=∑i=1mαi−12∑i,j=1my(i)y(j)αiαj(x(i))Tx(j)αi≥0, i=1,...,m∑i=1mαiy(i)=0
本来上面的对偶问题是先最小化,再最大化的,但是w已经不在了,所以对w进行最小化也就不用了。所以现在的问题就是找到一组
α 来最大化
W(α) 。假设我们解出了
α∗ ,将其代入方程(6)就可以解出w,假设为
w∗ 。然后就可以解出b,如下:
b∗=−maxi:y(i)=−1 w∗Tx(i)+mini:y(i)=1 w∗Tx(i)2
这个式子的意思就是,找到上图中在虚线上的点,因为虚线上的点满足
wTx+b=1 or −1 这样就可以计算出b了。
在我们继续去求解上面的优化问题前,我们来看一些有趣的结论。假设我们现在已经训练好了模型,那么对于一个新的数据,我们希望对它做一个预测,于是我们先计算wTx+b 的值,如果计算出来的值大于0,我们就预测y=1。根据方程(6)这个计算可以写成:
wTx+b=(∑i=1mαiy(i)x(i))Tx+b=∑i=1mαiy(i)⟨x(i),x⟩+b (10)
所以,为了计算这个预测,我们需要计算这个求和,但是,我们从前面知道,只有在虚线上面的点(支持向量)对应的
αi 才不是0,其他的时候
αi 都是0。而一般来说,支持向量是比较少的,所以上面的计算量其实很小。
到现在为止,我们已经越来越接近结果了,但是我们从一开始到现在只是谈论到了线性分隔器,那么对于非线性的分类呢?第三篇我们将一起来学习一种叫做核函数的东西,有了它,妈妈再也不用担心我解决不了非线性的分类了。