转:径向基核函数

转:径向基核函数

(2011-05-20
16:53:54)

转载





  分类: AboutResearch

所谓径向基函数 (Radial Basis Function 简称 RBF), 就是某种沿径向对称的标量函数。
通常定义为空间中任一点x到某一中心xc之间欧氏距离的单调函数 , 可记作 k(||x-xc||), 其作用往往是局部的 ,
即当x远离xc时函数取值很小。

最常用的径向基函数是高斯核函数
,形式为 k(||x-xc||)=exp{- ||x-xc||^2/(2*σ)^2) } 其中xc为核函数中心,σ为函数的宽度参数 ,
控制了函数的径向作用范围。

建议首选RBF核函数,因为:

  1. 能够实现非线性映射;( 线性核函数可以证明是他的一个特例;SIGMOID核函数在某些参数上近似RBF的功能。)

  2. 参数的数量影响模型的复杂程度,多项式核函数参数较多。

  3. the RBF kernel has less numerical difficulties.

———–那么,还记得为何要选用核函数么?———–

对于这个问题,在Jasper’s
Java
Jacal博客《SVM入门(七)为何需要核函数》中做了很详细的阐述,另外博主对于SVM德入门学习也是做了很详细的阐述,有兴趣的可以去学习,丕子觉得这个文章写得相当好,特意转载了过来,留念一下。

如果提供的样本线性不可分,结果很简单,线性分类器的求解程序会无限循环,永远也解不出来。这必然使得它的适用范围大大缩小,而它的很多优点我们实在不原意放弃,怎么办呢?是否有某种方法,让线性不可分的数据变得线性可分呢?

例子是下面这张图:

我们把横轴上端点a和b之间红色部分里的所有点定为正类,两边的黑色部分里的点定为负类。试问能找到一个线性函数把两类正确分开么?不能,因为二维空间里的线性函数就是指直线,显然找不到符合条件的直线。

但我们可以找到一条曲线,例如下面这一条:

显然通过点在这条曲线的上方还是下方就可以判断点所属的类别(你在横轴上随便找一点,算算这一点的函数值,会发现负类的点函数值一定比0大,而正类的一定比0小)。这条曲线就是我们熟知的二次曲线,它的函数表达式可以写为:

问题只是它不是一个线性函数,但是,下面要注意看了,新建一个向量y和a:

这样g(x)就可以转化为f(y)=<a,y>,你可以把y和a分别回带一下,看看等不等于原来的g(x)。用内积的形式写你可能看不太清楚,实际上f(y)的形式就是:

g(x)=f(y)=ay

在任意维度的空间中,这种形式的函数都是一个线性函数(只不过其中的a和y都是多维向量罢了),因为自变量y的次数不大于1。

看出妙在哪了么?原来在二维空间中一个线性不可分的问题,映射到四维空间后,变成了线性可分的

!因此这也形成了我们最初想解决线性不可分问题的基本思路——向高维空间转化,使其变得线性可分。

而转化最关键的部分就在于找到x到y的映射方法。遗憾的是,如何找到这个映射,没有系统性的方法(也就是说,纯靠猜和凑)。具体到我们的文本分类问题,文本被表示为上千维的向量,即使维数已经如此之高,也常常是线性不可分的,还要向更高的空间转化。其中的难度可想而知。

小Tips:为什么说f(y)=ay是四维空间里的函数?

大家可能一时没看明白。回想一下我们二维空间里的函数定义
g(x)=ax+b

变量x是一维的,为什么说它是二维空间里的函数呢?因为还有一个变量我们没写出来,它的完整形式其实是
y=g(x)=ax+b


y=ax+b
看看,有几个变量?两个,二维。
再看看
f(y)=ay

里面的y是三维的变量,再加上f(y)成为四维的了。

用一个具体文本分类的例子来看看这种向高维空间映射从而分类的方法如何运作,想象一下,我们文本分类问题的原始空间是1000维的(即每个要被分类的文档被表示为一个1000维的向量),在这个维度上问题是线性不可分的。现在我们有一个2000维空间里的线性函数

f(x)=<w,x>+b

注意向量的右上角有个 ’哦。它能够将原问题变得可分。式中的
w和x都是2000维的向量,只不过w是定值,而x是变量(好吧,严格说来这个函数是2001维的,哈哈),现在我们的输入呢,是一个1000维的向量x,分类的过程是先把x变换为2000维的向量x,然后求这个变换后的向量x与向量w的内积,再把这个内积的值和b相加,就得到了结果,看结果大于阈值还是小于阈值就得到了分类结果。

你发现了什么?我们其实只关心那个高维空间里内积的值,那个值算出来了,分类结果就算出来了。而从理论上说,
x是经由x变换来的,因此广义上可以把它叫做x的函数(有一个x,就确定了一个x,对吧,确定不出第二个),而w是常量,它是一个低维空间里的常量w经过变换得到的,所以给了一个w
和x的值,就有一个确定的f(x)值与其对应。这让我们幻想,是否能有这样一种函数K(w,x),他接受低维空间的输入值,却能算出高维空间的内积值<w,x>?

如果有这样的函数,那么当给了一个低维空间的输入x以后,

g(x)=K(w,x)+b


f(x)=<w,x>+b

这两个函数的计算结果就完全一样,我们也就用不着费力找那个映射关系,直接拿低维的输入往g(x)里面代就可以了(再次提醒,这回的g(x)就不是线性函数啦,因为你不能保证K(w,x)这个表达式里的x次数不高于1哦)。

万幸的是,这样的K(w,x)确实存在(发现凡是我们人类能解决的问题,大都是巧得不能再巧,特殊得不能再特殊的问题,总是恰好有些能投机取巧的地方才能
解决,由此感到人类的渺小),它被称作核函数(核,kernel),而且还不止一个,事实上,只要是满足了Mercer条件的函数,都可以作为核函数。核
函数的基本作用就是接受两个低维空间里的向量,能够计算出经过某个变换后在高维空间里的向量内积值。几个比较常用的核函数,俄,教课书里都列过,我就不敲
了(懒!)。

回想我们上节说的求一个线性分类器,它的形式应该是:

现在这个就是高维空间里的线性函数(为了区别低维和高维空间里的函数和向量,我改了函数的名字,并且给w和x都加上了
’),我们就可以用一个低维空间里的函数(再一次的,这个低维空间里的函数就不再是线性的啦)来代替,

又发现什么了?f(x’)
和g(x)里的α,y,b全都是一样一样的!这就是说,尽管给的问题是线性不可分的,但是我们就硬当它是线性问题来求解,只不过求解过程中,凡是要求内积
的时候就用你选定的核函数来算。这样求出来的α再和你选定的核函数一组合,就得到分类器啦!

明白了以上这些,会自然的问接下来两个问题:

1. 既然有很多的核函数,针对具体问题该怎么选择?

2. 如果使用核函数向高维空间映射后,问题仍然是线性不可分的,那怎么办?

第一个问题现在就可以回答你:对核函数的选择,现在还缺乏指导原则!各种实验的观察结果(不光是文本分类)的确表明,某些问题用某些核函数效果很
好,用另一些就很差,但是一般来讲,径向基核函数是不会出太大偏差的一种,首选。(我做文本分类系统的时候,使用径向基核函数,没有参数调优的情况下,绝
大部分类别的准确和召回都在85%以上,可见。虽然libSVM的作者林智仁认为文本分类用线性核函数效果更佳,待考证)

对第二个问题的解决则引出了我们下一节的主题:松弛变量。

==================

核函数有很多种,如线性核、多项式核、Sigmoid 核和 RBF(Radial Basis function)核。本文选定 RBF核为 SVM
的核函数(RBF 核K(x, y) = exp(-γ || x -y ||的平方),γ >0)。因为RBF
核可以将样本映射到一个更高维的空间,可以处理当类标签(Class Labels)和特征之间的关系是非线性时的样例。Keerthi
等[25]证明了一个有惩罚参数C 的线性核同有参数(C,γ )(其中C为惩罚因子,γ 为核参数)的 RBF
核具有相同的性能。对某些参数,Sigmoid核同 RBF 核具有相似的性能[26]。另外,RBF
核与多项式核相比具有参数少的优点。因为参数的个数直接影响到模型选择的复杂性。非常重要的一点是0< Kij
≤1与多项式核相反,核值可能趋向无限(γxi xj + r >1)或者0< γxi xj + r
< 1,跨度非常大。而且,必须注意的是Sigmoid核在某些参数下是不正确的(例如,没有两个向量的内积)。

用交叉验证找到最好的参数 C 和γ 。使用 RBF 核时,要考虑两个参数 C 和γ
。因为参数的选择并没有一定的先验知识,必须做某种类型的模型选择(参数搜索)。目的是确定好的(C,γ)使得分类器能正确的预测未知数据(即测试集数
据),有较高的分类精确率。值得注意的是得到高的训练正确率即是分类器预测类标签已知的训练数据的正确率)不能保证在测试集上具有高的预测精度。因此,通
常采用交叉验证方法提高预测精度。k 折交叉验证(k-fold cross validation)

=========================

参考自:

1、互动百科

2、Jasper’s Java Jacal–《SVM入门(七)为何需要核函数》

3、博文:svmlight使用的几点讨论

转:径向基核函数,布布扣,bubuko.com

时间: 2024-10-03 14:24:38

转:径向基核函数的相关文章

RBF高斯径向基核函数【转】

XVec表示X向量.||XVec||表示向量长度.r表示两点距离.r^2表示r的平方.k(XVec,YVec) = exp(-1/(2*sigma^2)*(r^2))= exp(-gamma*r^2)...... 公式-1这里, gamma=1/(2*sigma^2)是参数, r=||XVec-YVec||实际上,可看作是计算2个点X与Y的相似性.很多参考书上,把YVec写作XVec',即 k(XVec, XVec'),也是一样的含义:两点相似性.由于Matlab上面XVec'代表XVec的转置

径向基网络(RBF network)

来源:http://blog.csdn.net/zouxy09/article/details/13297881 1.径向基函数 径向基函数(Radical Basis Function,RBF)方法是Powell在1985年提出的.所谓径向基函数,其实就是某种沿径向对称的标量函数.通常定义为空间中任一点x到某一中心c之间欧氏距离的单调函数,可记作k(||x-c||),其作用往往是局部的,即当x远离c时函数取值很小.例如高斯径向基函数: 当年径向基函数的诞生主要是为了解决多变量插值的问题.可以看

径向基神经网络初学

[径向基神经网络训练算法及其性能研究 2.1]-RBF定义:假设x,x0属于Rn,以x0为中心,x到x0的径向距离为半径形成的||x-x0||构成的函数系φ(||x-x0||)称为径向基函数.

径向基网络(RBF network)之BP监督训练

径向基网络(RBF network)之BP监督训练 转载:http://blog.csdn.net/zouxy09/article/details/13297881 分类: 机器学习 神经网络 C/C++编程2013-10-28 18:17 3083人阅读 评论(1) 收藏 举报 神经网络机器学习RBF 径向基网络(RBF network)之BP监督训练 [email protected] http://blog.csdn.net/zouxy09 之前看了流行学习的时候,感觉它很神奇,可以将一个

机器学习之径向基神经网络(RBF NN)

本文基于台大机器学习技法系列课程进行的笔记总结. 主要内容如下图所示: 首先介绍一下径向基函数网络的Hypothesis和网络的结构,然后介绍径向基神经网络学习算法,以及利用K-means进行的学习,最后通过一个实例加深对RBF神经网络认识和理解. RBF神经网络的Hypothesis和网络结构 我们从基于Gaussian kernel的support vector machine中在无限维度中进行特征转换来获取一个large margin的边界,这个Gaussian kernel就是一个Rad

径向基网络对蝴蝶花分类

1.径向基网络简介 径向基网络的拓扑结构图如下所示,其网络有三层构成,第一层是输入层,第二层是隐含层,第三层是输出层.采用径向基函数(常用高斯函数)作为基函数,将输入向量空间转换到隐含层空间,实现对原问题的线性可分.径向基网络核心是隐含层采用了径向基函数,它计算的是输入向量和基函数中心之间的欧式距离,而不是输入向量与权值的内积.基函数一般采用的是高斯函数. 2.径向基网络学习算法 径向基网络需要训练的有三个参数 隐含层中基函数的中心 隐含层中基函数的标准差 隐含层与输出层间的权值 算法核心步骤

径向基神经网络

预备知识: cover定理: 在复杂的模式分类问题中,将数据映射到高维空间比映射到低维空间更可能线性可分 径向基函数: 空间中的任意点到某一中心之间的欧式距离(也可以是其他的距离函数)的单调函数 径向基神经网络是由一个三层的结构组成,包括输入层,隐含层,输出层,隐含层的激活函数一般是非线性的径向基函数,输出层是线性函数或hardlim函数 普通径向基神经网络中,隐含层神经元的个数是样本的数量,径向基函数的中心是对应的样本,所求插值函数要求通过所有的样本点,即 F(Xp)=dp p表示样本个数,F

径向基(RBF)神经网络python实现

1 from numpy import array, append, vstack, transpose, reshape, 2 dot, true_divide, mean, exp, sqrt, log, 3 loadtxt, savetxt, zeros, frombuffer 4 from numpy.linalg import norm, lstsq 5 from multiprocessing import Process, Array 6 from random import sa

径向基(RBF)神经网络

RBF网络能够逼近任意非线性的函数.可以处理系统内难以解析的规律性,具有很好的泛化能力,并且具有较快的学 习速度.当网络的一个或多个可调参数(权值或阈值)对任何一个输出都有影响时,这样的网络称为全局逼近网络. 由于对于每次输入,网络上的每一个权值都要调整,从而导致全局逼近网络的学习速度很慢,比如BP网络.如果对于 输入空间的某个局部区域只有少数几个连接权值影响输出,则该网络称为局部逼近网络,比如RBF网络.接下来重点 先介绍RBF网络的原理,然后给出其实现.先看如下图 正则化的RBF网络参考这里