SVM核函数总结

1、 从线性可分到线性不可分
上一部分根据几何间隔最小得到了目标函数:

maxw1,s.t.,yi(wTxi+b)1,i=1,2,...,n

w1 的最大值,相当于求21w2 的最小值,所以目标函数等价于:

min21w2,s.t.,yi(wTxi+b)1,i=1,2,...,n

现在目标函数式二次的,约束是线性的,所以是一个凸二次规划问题,可以使用现成的QP优化包进行求解。

此外由于此问题的特殊性,可以通过拉格朗日对偶性变化到对偶变量的优化问题,即通过求解和原问题等价的对偶问题得到原始问题的最优解,这就是线性可分条件下支持向量机的对偶算法这么做的目的是:对偶问题往往更容易求解;可以自然的引入核函数,进而推广到非线性分类问题。

拉格朗日对偶性:通过给每一个约束条件加上一个拉格朗日乘子α 定义拉格朗日函数(通过拉格朗日函数,将约束条件融合到目标函数里面,从而只用一个函数表达式便能够清楚地表达出关注的问题):

L(w,b,α)=21w2i=1nαi(yi(wTxi+b)1)

令,θ(w)=maxL(w,b,α),αi0 容易验证,当某个约束条件不满足时,如yi(wTxi+b)<1 ,那么显然有`$\theta(w)=\infty$`(只要令αi= 即可),当所有约束条件都满足时其最优值为:θ(w)=21w2 ,也就是最初要最小化的量,目标函数也就变成了:

minθ(w)=w,bminαi0maxL(w,b,α)=p

得到以上最优解的表达式,但是上式不好求解,故交换max和min的次序得到:

αi0maxw,bminL(w,b,α)=d

交换之后,新的问题是原始问题的对偶问题,新问题的最优值用d 表示,并且有dq (最小中的最大的小于等于最大值中的最小的)。转化后的问题更易求解。

上面得到的dq 在满足某些条件(KKT条件,强对偶,条件约束,Slater条件)的情况下,两者是等价的。一般一个最优化数学模型能够表示成下列标准形式:

min.f(x)s.t.hj(x)=0(j=1,...,p), gk(x)0(k=1,...,q), xXR

其中发f(x)是最小化的函数,h(x)是等式约束,g(x)是不等式约束,p和q分别为等式约束和不等式约束的数量。
对于上述的最优化方程,参考:深度理解拉格朗日乘子法、KKT条件与线性规划对偶理论的微妙关系:

- 如果没有约束条件可以直接对f(x)进行求导,令导数为0,即可求得极大值或极小值,如果是凸函数,可以保证最优解;
- 如果只有等式约束,可以使用拉格朗日乘子法,即把等式约束h(x)用一个系数相乘之后和f(x)写到一个式子中,这个式子就是拉格朗日函数。通过对拉格朗日函数的各变量求导,并令导数为0,可以求得候选值集合,然后验证求得最优值。
- 如果约束条件既带有等式约束又带有不等式约束,则在拉格朗日乘子算法的基础上进行进一步推广,常用的方法就是KKT条件,参考:KKT条件介绍.

对上述偶问题求解的3个步骤:
(1) 首先固定α ,让L关于w和b最小化,分别对w和b求偏导数,并令wL 和bL 等于0,得到:

L(w,b,a)=i=1nαi21i,j=1nαiαjyiyjxiTxj

(2)求对α 的极大值

αmax(i=1nαi21i,j=1nαiαjyiyjxiTxj)s.t.,αi0,i=1,2,...,ni=1nαiyi=0

αi 求出之后就可以根据

w=i=1nαiyixi

求得w,然后通过

b=2maxi:yi=1wTxi+mini:yi=1wTxi

求出b,最终得到分类决策函数。

(3)在求得L(w,b,a)关于w和b最小化,以及对α 的极大之后,最后利用SMO算法求解对偶问题中的拉格朗日乘子α 线性不可分:
根据以上推到得到分类函数为:

f(x)=(i=1nαiyixi)Tx+b=i=1nαiyixi,x+b

可以看出对于新的数据点x的预测,只需要计算它和训练数据的内积即可。此外因为所有的非支持向量训练数据点锁对应的系数α 都是等于0的,因此对于内积的计算实际只是针对少量的支持向量而不是所有的训练数据。因为

αi0maxL(w,b,α)=αi0max(21w2i=1nαi(yi(wTxi+b)1))

对于支持向量,蓝色部分等于0,对于非支持向量yi(wTxi+b)>1 并且αi0 所有只有当α=0 时L才能取得最大值。

这里我们就得到了“最大间隔超平面分类器”。但是目前为止研究的都是线性可分的,但是实际中很多数据都是线性不可分的,例如,

上图表示的数据集是线性不可分的,无法找到一个超平面将红色和蓝色的点分开,所以是线性不可分的。这种情况我们通过引入核函数(Kernal Function),将线性不可分转换为线性可分。

2、核函数(Kernal Function)

事实上,大部分时候数据并不是线性可分的,这个时候满足这样条件的超平面就根本不存在。对于非线性的情况,SVM 的处理方法是选择一个核函数 κ(⋅,⋅) ,通过将数据映射到高维空间,来解决在原始空间中线性不可分的问题。具体来说,在线性不可分的情况下,支持向量机首先在低维空间中完成计算,然后通过核函数将输入空间映射到高维特征空间,最终在高维特征空间中构造出最优分离超平面,从而把平面上本身不好分的非线性数据分开,如下图:  

 

如果用原始的方法,那么在用线性学习器学习一个非线性关系,需要选择一个非线性特征集,并且将数据写成新的表达形式,这等价于应用一个固定的非线性映射,将数据映射到特征空间,在特征空间中使用线性学习器,因此,考虑的假设集是这种类型的函数:

f(x)=i=1Nwiϕi(x)+b

这里的ϕ 是从输入空间到输出空间的映射,因此建立非线性学习器分为两步:
- 首先使用一个非线性映射将数据变换到一个特征空间;
- 在特征空间使用线性学习器分类

对偶形式就是线性学习器的一个重要性质,这就意味着假设可以表达为训练点的线性组合,因此决策规则可以用测试点和训练点的内积来表示:

f(x)=i=1Nαiyiϕ(xi)ϕ(x)+b

如果有一种方式可以在特征空间中直接计算内积ϕ(x)ϕ(z) ,就像在原始输入点的函数中一样,就有可能将上面两步融合到一起,建立一个非线性的学习器,这种直接计算方法称为核方法:核实一个函数K,对所有的x,zX ,满足K(x,z)=ϕ(x)ϕ(z) ,这里的ϕ 是从X空间到特征空间F的映射。

核函数如何处理非线性数据?
下图中的数据是线性不可分的,

实际上,上图是两个不同半径的圆加上少量噪声生成的,所以一个理想的分解应该是一个圆圈而不是一条直线(超平面)。用x1,x2 表示这个二维平面的两个坐标,我们知道一条二次曲线(圆形是二次曲线的一种)的方程可以写成

a1x1+a2x12+a3x2+a4x22+a5x1x2+a6=0

如果我们构造另外一个五维空间,其中五个坐标值分别为z1=x1,z2=x12,z3=x2,z4=x22,z5=x1x2 ,那上面的方程在新的坐标系下可以写作:

i=15aizi+a6=0

关于新坐标Z,这正是一个超平面方程,也就是通过上面的映射ϕ:R2R5 ,将X按照上面规则映射到Z,在新的空间中将原来的数据变成了线性可分,从而使用之前推到的线性分类算法就可以就行处理,这就是核方法处理非线性的基本思想。
回到上面的例子,因为两个圆形是预先生成的,其方程中只包括x12,x22,x2 ,映射到特征空间只有三维,z1=x12,z2=x22,z3=x2 ,映射过程如下图:

刚才的计算过程貌似是没有问题的,但是我们发现,原本一个二维空间的数据映射成额一个五维空间(所有一阶和二阶的组合),如果原始空间是三维的,那么久需要扩展到19维空间(x1,x2,x3,x12,x22,x32,x1x2,x1x3,x2x3,x13,x23,x33,x12x2,x12x3,x22x1,x22x3,x32x1,x32x2,x1x2x3 ),这个数量会呈指数级增长。Kernal应运而出。
上面的例子中将二维空间映射到了五维空间,映射函数式ϕ() ,相当于把原来的函数:f(x)=i=1Nαiyixix+b 映射成

f(x)=i=1Nαiyiϕ(xi)ϕ(x)+b

而其中α 可以通过如下对偶问题得到:

αmax(i=1nαi21i,j=1nαiαjyiyjϕ(xi)ϕ(x))
s.t.,αi0,i=1,2,...,n
i=1nαiyi=0

 

关于映射函数ϕ() ,以上面为例x1=(η1,η2),x2=(ξ1,ξ2) ,映射成五维空间之后ϕ(x1)=(η12,η1,η22,η2,η1η2),ϕ(x2)=(ξ12,ξ1,ξ22,ξ2,ξ1ξ2) ,所以:

ϕ(xi)ϕ(x)=η1ξ1+η12ξ12+η2ξ2+η22ξ22+η1ξ1η2ξ2

并且注意到:

(x1,x2+1)2=2η1ξ1+η12ξ12+2η2ξ2+η22ξ22+2η1ξ1η2ξ2+1

两者有很多相似之处,实际上我们只需要把某几个维度线性缩放一下,然后再加上一个常数维度。具体来说,假设有这样一个映射:

ψ(x1)=(2η1,η12,2η2,η22,2η1η2,1)

内积ψ(x1),ψ(x2) 和(x1,x2+1)2 是相等的,它们和(x1,x2+1)2 之间的区别在于:
- 一个是映射到高维空间中,然后再根据内积的公式进行计算;
- 而另一个则直接在原来的低维空间中进行计算,而不需要显式地写出映射后的结果。
完美解决了映射维度爆炸的问题,这里把计算两个向量在隐式映射过后的空间中的内积函数叫做核函数(Kernal Function),刚刚的例子中的核函数就是:

k(x1,x2)=(x1,x2+1)2

核函数能够简化映射空间中的内积运算-刚刚碰巧的是,在SVM里面需要计算的地方也是内积形式的,对比刚刚的式子,现在可以将分类函数写为:

f(x)=i=1Nαiyik(xi,x)+b

其中α 可以用下面的式子求得:

αmax(i=1nαi21i,j=1nαiαjyiyjk(xi,x)
s.t.,αi0,i=1,2,...,n
i=1nαiyi=0

这样一来就避免了直接在高维空间中进行计算,而结果却是等价的。当然这里的例子非常简单,所以可以手工构造出核函数,但是对于任意映射想构造出核函数还是很困难的。
几个核函数:
通常人们会根据问题和数据规模从一些常用的核函数中选择,比如,

  •  多项式核

k(x1,x2)=(x1,x2+R)d ,在刚刚的例子中(R=1,d=2);

  •  高斯核

k(x1,x2)=exp(x1x22/2σ2) ,这个核就是之前提到的会将原始空间映射到无穷维空间,不过如果σ 选的很大,高次特征上的权重会衰减的很快,所以近似一个低维的子空间;反之,如果σ 选的很小,可以将任意数据映射为线性可分,这不一定是件好事,因为随之而来的是严重的过拟合问题。不过总的来说,通过调控σ ,高斯核具有很强的灵活性。应用也是最广泛;

  • 线性核

k(x1,x2)=x1,x2 这就是实际空间的内积,这个核存在的主要目的是使得“映射后空间中的问题”和“映射前空间中的问题”两者在形式上统一起来。

核函数的本质:
      - 实际中,我们会经常遇到线性不可分的样例,此时,我们的常用做法是把样例特征映射到高维空间中去;
      - 但进一步,如果凡是遇到线性不可分的样例,一律映射到高维空间,那么这个维度大小是会高到可怕的;
      - 此时,核函数就隆重登场了,核函数的价值在于它虽然也是将特征进行从低维到高维的转换,但核函数绝就绝在它事先在低维上进行计算,而将实质上的分类效果表现在了高维上,也就如上文所说的避免了直接在高维空间中的复杂计算。


猜你喜欢

转载自blog.csdn.net/weixin_38405636/article/details/80677115