机器学习——SVM算法(一):支持向量机的推导

SVM算法(一):支持向量机的推导

SVM,全称是支持向量机(Support Vector Machine)。它是一种二类模型。
与感知机追求最小容错率不同,SVM追求的是间隔最大化,它在保证大致正确分类的同时,一定程度上避免了过拟合。
感知机一般使用梯度下降法进行计算,而SVM则一般使用拉格朗日乘子法进行计算。
另外,通过核函数可以实现非线性的支持向量机。

最优化函数

SVM的基本概念与感知机相似,不做描述。

关于几何间隔r
我们引入变量r,r表示每个样本到超平面的距离。
先给出结论,r=y*(wx+b)/|w|
这个公式的证明其实就是点到直线距离的推广。下面对该式子进行简单的证明。

我们定义向量x‘,表示向量x到超平面上的投影点的向量。
因为x’在超平面上,所以wx'+b=0
同时根据定义,我们可以得到,x'=x-y*r*w/|w|
所以,将两式联立,再加上w*w=||w||^2,经过化简可得 r=(x+b/w)*|w|/(y*w)

w、b的可放缩性证明
对于r=y*(wx+b)/|w|这个式子,如果ww=k*w,bb=k*b,那么这个式子依然成立。将w=ww,b=bb代入依然成立。
所以,这个式子可以对w和b进行放缩使得|w|满足任意值并且保持r不变。
因为|w|对答案的影响和w,b等效,所以我们把|w|放缩到1。
这样的话,r=y*(w*x+b)。

最小间隔最大化
根据刚刚证明的w、b可缩放,我们可以对w和b进行放缩使得r不变。
所以对w和b进行放缩,使得对于任意i,满足yi*(w*xi+b)>=1
其中存在与超平面距离最小的向量,我们称之为支持向量。对于该向量x,w*x+b=1。
我们定义ρ=min(2*ri)=min(2*yi*(w*xi+b)/||w||)
ρ的几何意义就是所有数据点到超平面上的距离的最小值的两倍。
因为yi*(w*xi+b)>=1
所以ρ=min(2*yi*(w*xi+b)/|w|)>=2/||w||

与感知机不同,在SVM算法中我们需要最大化ρ,大概就是让几何间隔r的最小值尽量大使得每个样本的损失尽量平均。
所以这个问题就转化成了在满足yi*(w*xi+b)>=1的情况下最小化||w||。

拉格朗日乘子法

我们已经把问题转化为了给定一些约束,求一个函数的最小值。
我们要最大化 (||w||^2)/2 ,这是一个二次规划问题。

凸优化问题
我们定义约束条件只有以下两类的问题为凸优化问题。
第一类:fi(x)<=0 称为不等式限制条件。
第二类:hi(x)=0 称为等式限制条件。
其中fi(x),f0(x)为在Rn上连续可微的凸函数,hi(x)为仿射函数(最高次数<=1)
这两类条件被称为KTT条件。

对于本问题,约束条件只有第一类,且f0=||w||显然是连续可微的凸函数,所以显然是一个凸优化问题。
所以可以使用拉格朗日乘子法解决。

拉格朗日函数
我们定义拉格朗日函数L(x,λ,v)=f0(x)+Σλi*fi(x)+Σvj*hj(x),其中 x,λ,v为向量,λ>=0。
对于原问题,我们要最小化 L(x,λ,v) 的最大值,也就是 minmize max L(x,λ,v)。
若x满足约束,则max L(x,λ,v)=f0(x)。若x不满足约束则 max L(x,λ,v)=正无穷。
所以我们要求f(x)在满足这些约数条件下的最小值,也就是求拉格朗日函数 L(x,λ,v) 的最大值的最小值。

拉格朗日对偶问题
我们定义对偶函数 g(λ,v)=inf L(x,λ,v)=inf ( f0(x) +Σλi*fi(x)+Σvj*hj(x) )
其中inf为下确界。也就是min L(x,λ,v)。

对偶函数必有上确界
定理:如果λ>=0,那么g(λ,v)<=p* 其中p*指上界

证明:

假设x~是可行解(feasible)
那么f0(x~)>=L(x~,λ,v)>=inf(L(x~,λ,v))=g(λ,v)
因为fi(x)<=0,而hi(x)=0, λ递增
那么可以找到p*使得g(λ,v)有界
所以得证g(λ,v)有上界

求对偶函数g(λ,v)
对于拉格朗日函数 L(x,λ,v) 中x向量中的每个x求偏导,得到若干 ▽Lx(x,λ,v) ,分别将x用λ和v表示然后带回 L(x,λ,v) ,得到的就是对偶函数。

原问题与对偶问题的比较
原问题的表达式 min max Lx(x,λ,v)
对偶问题的表达式 max min g(λ,v)
不同的是,原问题时先确定x,然后对于x寻找λ和v使得它最大,然后再找出所有的x中目标函数最小的那个x值即为答案。
而对偶问题则是先确定λ和v,然后找到x使得对偶函数最小,然后再找出所有λ和v中对偶函数值最大的那组对应的x,即为答案。

强对偶性
要使对偶函数的上确界等于原函数的下确界,我们需要一些定理的支撑。
从不知道哪里抄了一个定理:如果满足原问题是凸优化问题,并且至少存在绝对一个绝对可行点,那么该问题就具有强对偶性。
绝对可行点是指一个可以让所有不等式约束都不取等号的可行点。
强对偶性的意思就是原函数的下确界等于对偶函数的上确界。
关于凸优化,并没有深究。
日后会了回来填坑。

关于拉格朗日乘子法的简单应用
noi2012骑行川藏。
emmm就是这个著名的OI题。因为这题只有一个约束条件所以对偶函数只有一维所以xjb二分就好了。
题解见https://blog.csdn.net/wcy_1122/article/details/80097249

最优化计算

化对偶
回到SVM。我们将需要最优化的函数和约束条件放进拉格朗日函数。
L(w,b,λ)=(w*w)/2-Σλi*(yi*(w*xi+b)+1) 其中,w*w为点积。
对于w求偏导可以得到:▽L(w,b,λ)=w+Σλi*yi*xi=0
对于b求偏导可以得到:▽L(w,b,λ)=Σλi*yi=0
所以w=Σλi*yi*xiΣλi*yi=0
将其带回L(w,λ)得到:

g(λ)= (ΣΣλij*yi*yj*(xi*xj))/2-Σλi*(yi*(Σλj*yj*(xi*xj)+b)+1) 
g(λ)= -(ΣΣλij*yi*yj*(xi*xj))/2+Σλi
其中xi*xj为点积。

所以我们需要求 min g(λ)=(ΣΣλi*λj*yi*yj*(xi*xj))/2-Σλi
其中有约束条件 Σλi*yi=0 还有λi>=0
我们可以对此求出向量λ。

代回原问题
w=Σλi*yi*xi
b=yj-Σλi*yi*(xi*xj)
关于j:对于一组λ,至少存在一个下标j,使得λj>0。

线性不可分的支持向量机

软间隔引入
当线性不可分的时候,对于误分类无法满足 yi(w*xi+b)>1 的条件。
我们引入软间隔的概念,将 yi(w*xi+b)>1 改为 yi(w*xi+b)>1-ξ。
相应的,增加一个惩罚函数,使得目标函数被改成 (1/2)||w||^2+cΣξi。

对偶化
通过拉格朗日对偶化,我们把该问题转化成求 min g(λ)=(ΣΣλi*λj*yi*yj*(xi*xj))/2-Σλi
其中有约束条件 Σλi*yi=0 还有 C>=λi>=0
对偶化过程与现行可分的类似,就不再赘述了。

代回原问题
w=Σλi*yi*xi
b=yj-Σλi*yi*(xi*xj)
关于j:对于一组λ,至少存在一个下标j,使得 0<λj

非线性的支持向量机(核函数)

核函数引入
在分类问题中,由于一些原因样本并不那么线性可分,可能需要用一些弯弯曲曲的线才能分开。
这时我们就需要一个映射,将这些不那么线性可分的样本映射到另一个空间里,使得它线性可分。
所以我们就引入了核函数。
核函数其实就是找到一种映射关系,然后把样本通过这层映射关系映射到一个新的空间里,在这个新的空间里运行线性的支持向量机。

核函数的定义
我们定义欧氏空间X,希尔伯特空间H。
若存在映射f(x)为X到H上的映射,且对于任意的 x,z∈X 都满足 K(x,z)=f(x)*f(z) ,则称K(x,z)为核函数,f(x)为映射函数。
其中*为点积

利用核函数表示原问题
利用核函数,最优化问题可以表示为:min g(λ)=(ΣΣλi*λj*yi*yj*K(xi,xj))/2-Σλi
还有分类函数可以表示为y=sgn(wx+b)=sgn(Σλi*yi*xi*x+b)=sgn(Σλi*yi*K(xi,x)+b)

一些常用的核函数
1、多项式核函数
K(x,z)=(x*z+1)^p
2、高斯核函数
K(x,z)=exp(- ||x-z||^2 / 2α^2)

关于SMV的实现,将另写一篇blog介绍。

参考资料:李航《统计学习方法》

猜你喜欢

转载自blog.csdn.net/wcy_1122/article/details/80108647