SVM支持向量机作为一种常用的分类器可以说是应用非常广泛的,我们直接进入正题,来手动推导SVM,让大家一起加深SVM的算法流程。首先SVM的意义就是在空间中找到一个超平面,把空点中的两个线性可分的点集完全分开,我们把这个超平面定义成w⋅xi+b=0,其中w是一个n维的向量xi表示空间中的点。与此同时,我们不仅需要用超平面将空间中的两个点集分开,同时需要超平面两侧距离超平面最近的样本点到超平面的距离最大化。我们在二维的平面看看这些数据吧:

从二维平面可以看出,我们最终的目的就是最大化margin,两个类别中存在距离超平面最近的点我们称作支持向量,支持向量所在的与超平面平行的两个平面之间的距离被称为margin。在n维空间中,点x到直线wT⋅xi+b=0的距离为∥w∥∣wTx+b∣,其中∥w∥=w12+w22 + ... + wd2,根据定义每个类别到超平面最近的点和超平面的距离为d,那么这个类别其他所有的点到超平面的距离都是大于d的,可以得到如下式子:
⎩⎪⎨⎪⎧∥w∥wTxi+b⩾dyi=1∥w∥wTxi+b⩽−dyi=1
同时也可以知道:
⎩⎪⎨⎪⎧wTxi+b>0yi=1wTxi+b<0yi=−1
所以可以得到:
yi(wTxi+b)>0
因为margin就是最小的距离,所以可以得到以下式子:
maxmargin=maxmin∥w∥∣∣wTxi+b∣∣;s.t.yi(wTxi+b)>0
上述式子等价于:
maxmargin=maxmin∥w∥(wTxi+b)yi;s.t.yi(wTxi+b)>0
我们可以将上述公式拆开来看:
maxmargin=max∥w∥1min(wTxi+b)yi;s.t.yi(wTxi+b)>0
我们再来看看分类的图,我们要将所有的点分成+1和-1两个类,那么如图所示:

由上图可知,所有的点一定会在平面wTxi+b=1和wTxi+b=−1两侧,所以minyi(wTxi+b)=1,再结合上述公式我们可以得到:
maxmargin=max∥w∥1;s.t.yi(wTxi+b)⩾1
这个问题同样可以等价于:
maxmargin=min21∥w∥2;s.t.yi(wTxi+b)⩾1
接下来就是求解SVM优化问题的过程:
1.构造拉格朗日函数
因为约束函数yi(wTxi+b)⩾1⇔1−yi(wTxi+b)⩽0,所以我们可以构造柱函数的拉格朗日函数:
L(w,b,λ)=21∥w∥2 + i=1∑mλi[1−(wTxi+b)yi]
其中λi⩾0,i=1,2,...,m。
2.求拉格朗日函数对于w和b最小
原来的目标函数为:
maxmargin=w,bminλmaxL(w,b,λ)
上述式子我们可以用对偶关系转化一下:
maxmargin=λmaxw,bminL(w,b,λ);s.t.λi⩾0
一般来说要求一个数学表达式的极值的话,我们采用求偏导的方法,首先我们对w求偏导,可以得到:
∂w∂L=w−i=1∑mλixiyi=0⇔w=i=1∑mλixiyi
对b求偏导数可以得到:
∂b∂L=i=1∑mλiyi=0
再将结果带入拉格朗日表达式中:
L(w,b,λ)=21i=1∑mj=1∑mλiλjyiyjxixj+i=1∑mλi−i=1∑mλiyi((j=1∑mλjyjxj)xi+b)
我们继续优化拉格朗日表达式:
L(w,b,λ)=21i=1∑mj=1∑mλiλjyiyjxixj+i=1∑mλi−i=1∑mj=1∑mλiλjyiyjxixj−bi=1∑mλiyi
因为i=1∑mλiyi=0,所以整个式子可以简化成:
L(w,b,λ)=i=1∑mλi−21i=1∑mj=1∑mλiλjyiyjxixj
3.求minw,bL(w,b,λ)对λ最大
上述说过用对偶转换,整体的目标函数可以写成:
w,bminL(w,b,λ)=λmaxL(w,b,λ)
那么现在的求解变成了如下表达式:
λmaxL(w,b,λ)=λmax[i=1∑mλi−21i=1∑mj=1∑mλiλjyiyjxixj];s.t.i=1∑mλiyi=0λi⩾0
为了方便计算,我们将表达式前面加上一个负号,那么求极大值就变成了极小值:
λminL(w,b,λ)=λmin[21i=1∑mj=1∑mλiλjyiyjxixj−i=1∑mλi];s.t.i=1∑mλiyi=0λi⩾0
4.求解w∗和b∗
对于原始问题和对偶问题,充分必要条件就是满足KTT条件,于是可以得到如下公式:
1.∂w∂L(w,b,λ)=0
2.∂b∂L(w,b,λ)=0
3.∂λ∂L(w,b,λ)=0
4.λi(1−yi(wTxi+b))=0
5.λi⩾0
6.1−yi(wTxi+b)⩽0
我们假设整个问题的最优解是w∗,b∗和λ∗,由KTT条件可以推断出不可能所有的λi都是0,如果所有的λi都等于0的话,那么w∗=0,这显然是错误的,所以至少有一个λ是大于0的,这个时候根据第4个公式可以得到:1−yi(w∗xi+b∗)=0因为由公式1可以得到:
w∗=i=1∑mλi∗yixi
这个时候我们可以将w∗带入到1−yi(w∗xi+b∗)=0中去,因为yi=±1,所以yi2=1,由上述公式可以得到:
yj−yj2(i=1∑mλi∗yixixj+b∗)=0最终可以求得:
b∗=yj−i=1∑mλi∗yixixj=yj−i=1∑mλi∗yi(xixj)
这个时候我们就求出了所有的w∗和b∗,就可以求出分类的超平面为:
i=1∑mλi∗yi(xxi)+b∗=0
同理,分类决策函数就可以写成:
f(x)=sign(i=1∑mλi∗yi(xxi)+b∗)
到这里,整个SVM的推导过程就完成了,希望这篇博文能够帮助大家对SVM分类的理解有所帮助,SVM是一种基础的很重要的分类算法,也希望大家能够理解和掌握,文中如有纰漏,请大家不吝指教;如有转载,也请标明出处,谢谢大家。