您的位置:首页 > 其它

机器学习有很多关于核函数的说法,什么是核函数?核函数的作用是什么?

2015-07-03 15:09 741 查看
转自知乎
详细的公式什么的,网络上搜索kernel function, kernel methods 有很多,我就不仔细说了,简单地说说背后的intuition。
intuition也很简单,比如我们有一个一维的数据分布是如下图的样子,你想把它用一个直线来分开,你发现是不可能的,因为他们是间隔的。所以不论你画在哪,比如绿色竖线,都不可能把两个类分开。



但是我们使用一个简单的升维的方法,把原来一维的空间投射到二维中,x->(x, x^2)。比如:
0->(0,0)
1->(1,1)
2->(2,4)
这时候就线性可分了



再举个例子,在一个二维平面里面,这样的情况是不可能只用一个平面来分类的,但是只要把它投射到三维的球体上,就可能很轻易地分类。



理论上,由于train set是有限的,当你把data投射到无限维度的空间上是一定可以在train set上完美分类的,至于在test set上当然就呵呵了。
记得要选取合适(试试各种)kernel function来“避免过拟合”。
【王赟Maigo的回答(46票)】:
我来举一个核函数把低维空间映射到高维空间的例子。
下面这张图位于第一、二象限内。我们关注红色的门,以及“北京四合院”这几个字下面的紫色的字母。我们红色的门上的点看成是“+”数据,紫色字母上的点看成是“-”数据,它们的横、纵坐标是两个特征。显然,在这个二维空间内,“+”“-”两类数据不是线性可分的。



我们现在考虑核函数



,即“内积平方”。
这里面



是二维空间中的两个点。
这个核函数对应着一个二维空间到三维空间的映射,它的表达式是:



可以验证,



在P这个映射下,原来二维空间中的图在三维空间中的像是这个样子:



(前后轴为x轴,左右轴为y轴,上下轴为z轴)(前后轴为x轴,左右轴为y轴,上下轴为z轴)
注意到绿色的平面可以完美地分割红色和紫色,也就是说,两类数据在三维空间中变成线性可分的了。
而三维中的这个判决边界,再映射回二维空间中是这样的:



这是一条双曲线,它不是线性的。这是一条双曲线,它不是线性的。
================================================
如上面的例子所说,核函数的作用就是隐含着一个从低维空间到高维空间的映射,而这个映射可以把低维空间中线性不可分的两类点变成线性可分的。
当然,我举的这个具体例子强烈地依赖于数据在原始空间中的位置。
事实中使用的核函数往往比这个例子复杂得多。它们对应的映射并不一定能够显式地表达出来;它们映射到的高维空间的维数也比我举的例子(三维)高得多,甚至是无穷维的。这样,就可以期待原来并不线性可分的两类点变成线性可分的了。
================================================
机器学习中常用的核函数,一般有这么几类,也就是LibSVM中自带的这几类:
1) 线性:



2) 多项式:



3) Radial basis function:



4) Sigmoid:



我举的例子是多项式核函数中



的情况。
在实用中,很多使用者都是盲目地试验各种核函数,并扫描其中的参数,选择效果最好的。至于什么样的核函数适用于什么样的问题,大多数人都不懂。很不幸,我也属于这大多数人,所以如果有人对这个问题有理论性的理解,还请指教。
================================================
核函数要满足的条件称为Mercer's condition
由于我以应用SVM为主,对它的理论并不很了解,就不阐述什么了。
使用SVM的很多人甚至都不知道这个条件,也不关心它;有些不满足该条件的函数也被拿来当核函数用。
【知乎用户的回答(4票)】:
关于这点的误解实在太多。
核函数和映射没有关系。核函数只是用来计算映射到高维空间之后的内积的一种简便方法。
一般英文文献对Kernel有两种提法,一是Kernel Function,二是Kernel Trick。从Trick一词中就可以看出,这只是一种运算技巧而已,不涉及什么高深莫测的东西。
具体巧在哪里呢?我们如果想进行原本就线性不可分的数据集进行分割,那么选项一是容忍错误分类,即引入Soft Margin;选项二是我们可以对Input Space做Feature Expansion,把数据集映射到高维中去,形成了Feature Space。我们几乎可以认为(引用Caltech的课堂用语“We are safe but
not certain
”)原本在低维中线性不可分的数据集在足够高的维度中存在线性可分的超平面。
围绕选项二,那么我们所做的就是要在Feature Space套用原本在线性可分情况下的Input Space中使用过的优化方法,来找到那个Maximaizing Margin的超平面。原理机制一模一样,是二次规划,唯一不同是代入数据的不同,我们需要代入



而不是



。这时(在假设我们已知了如何选取mapping之后)才有了核函数的概念。
具体Trick的意义,就是简化计算二次规划中间的一步内积计算。也即中间步骤有一步必须求得



,而我们可以定义核函数



,使得我们在不需要显式计算每一个



、甚至不需要知道



长什么样的情况下,直接求出



的值来。
也就是说,核函数、内积、相似度这三个词是等价的。因为inner product其实就是一种similarity的度量。核函数和映射是无关的。
但为什么这么多的认知中核函数是一种映射呢。一来这两件事一般先后进行,所以常常被混为一谈。二来就像前面所述,核函数让人们不需要知道



长什么样,不需要知道怎么选取映射,就能够算出内积。因此这常常被认作是一种implicit mapping。这是由Mercer Theorem保证的,即只要核函数满足一定条件,那么映射空间一定存在。
【NiYun的回答(4票)】:
核函数的本质就是高维空间中两个向量的内积。
看到校友贴了Yiming Yang的Slides,我也贴一张701的Slide:



翻译:核函数是在集合X上定义的函数K,从X^2映射到实数(应为非负实数)翻译:核函数是在集合X上定义的函数K,从X^2映射到实数(应为非负实数)
核函数表示高维空间的一种内积。
核函数必须满足对称性(K(x,y) = K(y, x))及半正定性(K(x,y)>=0)。根据Mercer's_theorem,我们知道任何满足对称性和半正定型的函数都是某个高维希尔伯特空间的内积。
【知乎用户的回答(1票)】:
支持向量机通俗导论(理解SVM的三层境界)
看一下这里的核函数部分,感觉这个是中文资源中讲的比较好的。
【ysdeng的回答(0票)】:
主要是svm用到了吧,其他的但不一定用核函数的方法
【bonnenuit的回答(0票)】:
借题问一下大神们,符合核函数映射之后线性可分的数据集对应的特征,正负样本在一维或者二维或者三维中(能可视化的前提下),数据集的分布,最好是什么样的? 换句话说,正负样本的数据在一维或者二维中交叠覆盖在一起的(线性不可分),怎么知道这个dataset能不能在核函数映射之后线性可分?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: