首页 > 其他 > 详细

SVM-核函数

时间:2016-06-21 08:02:40      阅读:262      评论:0      收藏:0      [点我收藏+]

1.1 SVM非线性可分-核函数
在上一章节中,我们首先假设数据在原始空间上是线性可分的,在这样的前提条件下,我们知道如何求解最大间隔分类器f(x)=wTx+b=mi=1αiy(i)<x(i),x>+b。但实际上,大多数情况下,数据可能并不是线性可分,你无法在原始数据空间上寻找到这样一条分类超平面,使得数据线性可分。

比如,下面这个例子,很明显蓝色点和红色点应该被归类为两个类别,数据本身又是线性不可分的。但是很容易想到,一个理想的分类界面应该是位于两类数据中心的“圆”而不是直线。(转自:http://blog.csdn.net/v_july_v/article/details/7624837
技术分享

那么尝试将这个假想的分界面用数学表达进行描述。如果以X,Y表示二维空间的两个坐标,那么分界面圆的方程可以表示为,

a1X+a2X2+a3Y+a4Y2+a5XY+a6=0

有趣的是,我们可以通过构造另外一个五维度的空间,且其各个坐标值分别为,Z1=X,Z2=X2,Z3=Y,Z4=Y2,Z5=XY,那么上面的式子可以表达为,
i=15aiZi+a6=a1Z1+a2Z2+a3Z3+a4Z4+a5Z5+a6=0

显然在新构造的五维空间下,这个“圆”分界面变成线性的了!那么,可以考虑,如果将所有原始空间的数据通过映射关系:?:R2R5,从原始的二维空间映射为五维空间,数据将有可能变成线性可分的。
?(X,Y)=[X,X2,Y,Y2,XY]T

++++++
如果数据在变换后的高维空间(在上面的例子中是五维度)上是线性可分的,那么我们就可以在这个变换的空间上采用线性SVM计算最优间隔分类器对数据进行分类处理了。SVM在处理线性可分数据时分类器形式为,

f(x)=i=1mαiy(i)<x(i),x>+b

假设映射关系?(x)可以将原始数据映射到特征空间F,且在该空间下,数据是线性可分的,那么在这个空间上的SVM分类器就表示为,

f(x)=i=1mαiy(i)<?(x(i)),?(x)>+b

所以,总结上面的非线性数据分类过程应包含两个过程:1.首先使用一个映射关系将数据变换到一个特征空间F上;2.在特征空间上使用线性学习器对数据进行分类。

但是,这会存在另一个问题:我们对二维空间做映射会得到5个维度的特征空间([x,y,xy,x2,y2]),而如果原始空间是3维度,那么转换后的空间将会有19维度(所有一次、二次、三次项),当原始空间数据维度更高时,变换后的特征空间的维度更是无法估计的。当在高维度变换特征空间计算内积时,开销是相当大的。虽然变换到高维空间可以解决低维空间线性不可分的情况,但又引入额外的计算开销。为了解决这个问题,便引入了核函数的概念。

我们还是以原来二维空间的两个数据点进行表示,假设有x1=(a1,b1)T,x2=(a2,b2)T按照前面的思路,设映射关系与前面介绍的相同,即?(X,Y)=[X,X2,Y,Y2,XY]。所以有,

<?(x1),?(x2)>=[a1,a21,b1,b21,a1b1][a2,a22,b1,b22,a2b2]T=a1a2+a21a22+b1b1+b21b22+a1b1a2b2

我们再来看一个有趣的式子,

(<x1,x2>+c)2=([a1,b1][a2,b2]T+c)2=(a1a2+b1b2+c)2=a21a22+2a1b1a2b2+2a1a2+b21b22+2b1b2+c2

这个式子的基本形式与前一个式子是很类似的。如果我们将变换函数调整为如下形式,
?(X,Y)=[2X,X2,2Y,Y2,2XY,c]

这样再计算<?(x1),?(x2)>,此时它与(<x1,x2>+c)2将会是一样的(具体请自行推导,与上相同,不再赘述)
也就是说,我们得到这样的等式,
(<x1,x2>+c)2=<?(x1),?(x2)>

两者在计算结果上是等效的,但是计算复杂度却不同!<?(x1),?(x2)>是在高维特征空间上计算内积,而(<x1,x2>+c)2却是在低维数据空间上计算内积,而不需要显式得写出在特征空间上的映射数据。我们把这种可以计算在隐式映射特征空间中内积的函数称为核函数,在我们的例子中,核函数定义为,
k(x1,x2)=(<x1,x2>+c)2

那么,好了现在我们可以以较低的计算代价来计算映射特征空间上的内积,再以线性SVM来对数据进行线性分类了。所以,非线性数据SVM分类器可以表示为,

f(x)=i=1mαiy(i)k(x1,x2)+b

这里列举几个常用的核函数,但实际上,对于低维空间上的线性不可分数据,使用核函数映射到高维特征上,并不会代表数据在高维特征空间上一定线性可分,只能说更接近于线性可分了。根据不同问题,选择的核函数及参数也不尽相同。
多项式核函数
k(x1,x2)=(<x1,x2>+R)d
高斯核函数

k(x1,x2)=exp(?||x1?x2||22σ2)
这个核可以将原始空间映射为无穷维度空间。不过,如果σ选得很大的话,高次特征上的权重实际上衰减得非常快,所以实际上(数值上近似一下)相当于一个低维的子空间;反过来,如果σ选得很小,则可以将任意的数据映射为线性可分——当然,这并不一定是好事,因为随之而来的可能是非常严重的过拟合问题。不过,总的来说,通过调控参数,高斯核实际上具有相当高的灵活性,也是使用最广泛的核函数之一。
线性核
k(x1,x2)=<x1,x2>

1.2松弛变量处理outliers
在某些情况下,精确地寻找SVM线性分界面可能并不是我们最想得到的,有些情况因为一些特例的存在使得问题变得不那么理想。比如下面这个例子,左边的图是SVM线性分类结果,右图表示引入一个特例而导致分类界面发生巨大变化,导致间隔(几何间隔)变得更小。

技术分享

为了使得当前的SVM分类器对这种情况不那么敏感,我们引入一个松弛变量δi

技术分享

可以看到,我们允许部分数据的函数间隔小于1,如果说,对于某个数据,其函数间隔为1?ξ,那么为了不使松弛变量值过大,我们在目标函数中加入惩罚权重Cξ,这样可以保证大多数数据样本的函数间隔不会小于1,但允许部分outliers的存在,这样最终优化的分界面就不会出现右图的情况。

这样,拉格朗日函数将变为,

技术分享

最终的对偶问题变为,

技术分享

我们可以看到,与没有加入松弛变量时候唯一不同的地方是αi的取值范围不同。相应KKT条件中αi和函数间隔对应关系发生如下变化,

技术分享

1.3 SMO求解对偶问题参数αi
SMO(sequential minimal optimization)算法,提供了一种高效的方法来解决优化问题中的对偶问题。在介绍SMO是如何求解SVM中优化问题之前,我们首先需要介绍一下坐标上升法,这种方法是SMO中用到的重要理论。

1.3.1坐标上升法
考虑优化问题,

maxαW(α1,α2,?,αm)

W是关于参数αi的优化问题。坐标上升法的主要思想是,每次迭代过程中,只相对于一个变量αi进行优化,而其他变量保持不变。而在迭代过程中,对所有变量的优化顺序可以按照α1,α2,?,αm,α1,α2,...进行。伪代码形式如下,

技术分享

如果优化参数只有两个α1,α2,那么坐标上升法优化过程可以图示为如下表示,

技术分享

横坐标表示参数α1,纵坐标表示α2。我们可以看出,优化过程迭代交替优化两个参数,每次迭代过程中,保持一个变量值不变,而优化另外一个变量使得目标函数趋近极值点。这里最中心的点为最大值点。

1.3.2 SMO算法
在前面,我们已经提到过对偶问题形式为,

技术分享

我们可以采用坐标上升法来依次优化每个参数αi。假设保持变量α2,...,αm不变,优化α1使得目标函数W(α)最大。但是,通过等式约束条件,我们可以知道,

α1y(1)=?i=2mαiy(i)

等式两边同时乘以y(1),我们可以得到,
α1=?y(1)i=2mαiy(i)

这是因为y(1){?1,1},所以有(y(1))2=1,所以说,参数α1是完全由其他参数和标签数据决定的,在优化过程中α1的值并不会发生改变!所以相对于一个变量进行优化是行不通的,那么可以考虑改进为,相对于两个变量进行优化。
假设优化参数为α1,α2,那么有公式,
α1y(1)+α2y(2)=?i=3mαiy(i)

由于等式右边为一个常量,所以可以重写表示上面等式为,
α1y(1)+α2y(2)=ζ

由于0αiC,所以两个变量的取值是局限在边长为C的矩形框内。参考如下图,

技术分享

直线表示约束α1y(1)+α2y(2)=ζ。为了满足边界约束和等式约束,α2取值范围为Lα2H。根据等式约束α1y(1)+α2y(2)=ζ,可以将α1表示为α2的函数,

α1=(ζ?α2y(2))y(1)

那么优化目标函数就可以写成,
W(α1,α2,...,αm)=W((ζ?α2y(2))y(1),α2,...,αm)

如果将参数带入原对偶问题,可以看出这其实是个二次方程式子,也就是说形式上可以表示为aα22+bα2+c。那么问题就简单了,求解α2就可以通过求导置0的方法求得,然后再根据α1,α2的等式约束,可以将参数α2求解出来。特别注意的是,在求解α2时,需要满足边界约束,当超过边界时,α2值处理为,

技术分享

SMO每次选择两个参数,按照上面介绍的算法思路进行优化直至达到收敛条件,SMO优化SVM对偶问题的思路表示为,

技术分享

总结:经过前两个章节的介绍,我们已经了解到:SVM是寻找线性可分数据的最大间隔的分类器,在数据线性不可分时,可以通过核函数的方法将数据转换为高维空间上进行计算,这个过程可以使得原始线性不可分的数据在高维空间上更接近于线性可分。核函数不仅实现了这种低维到高维空间的变换,同时也减少了在高维空间计算内积的高复杂性,而是将问题锁定在低维空间上的内积运算,大大降低了运算复杂度。但是选择何种核函数,确定何种参数,还需要根据具体问题具体分析。

如有问题,欢迎指正~

SVM-核函数

原文:http://blog.csdn.net/fishmemory/article/details/51692597

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!