核函数 订阅
支持向量机通过某非线性变换 φ( x) ,将输入空间映射到高维特征空间。特征空间的维数可能非常高。如果支持向量机的求解只用到内积运算,而在低维输入空间又存在某个函数 K(x, x′) ,它恰好等于在高维空间中这个内积,即K( x, x′) =<φ( x) ⋅φ( x′) > 。那么支持向量机就不用计算复杂的非线性变换,而由这个函数 K(x, x′) 直接得到非线性变换的内积,使大大简化了计算。这样的函数 K(x, x′) 称为核函数。 展开全文
支持向量机通过某非线性变换 φ( x) ,将输入空间映射到高维特征空间。特征空间的维数可能非常高。如果支持向量机的求解只用到内积运算,而在低维输入空间又存在某个函数 K(x, x′) ,它恰好等于在高维空间中这个内积,即K( x, x′) =<φ( x) ⋅φ( x′) > 。那么支持向量机就不用计算复杂的非线性变换,而由这个函数 K(x, x′) 直接得到非线性变换的内积,使大大简化了计算。这样的函数 K(x, x′) 称为核函数。
信息
应    用
随机过程,机器学习
外文名
kernel function
类    型
函数
中文名
核函数
学    科
统计学,机器学习
核函数历史
早在1964年Aizermann等在势函数方法的研究中就将该技术引入到机器学习领域,但是直到1992年Vapnik等利用该技术成功地将线性SVMs推广到非线性SVMs时其潜力才得以充分挖掘。而核函数的理论则更为古老,Mercer定理可以追溯到1909年,再生核希尔伯特空间(ReproducingKernel Hilbert Space, RKHS)研究是在20世纪40年代开始的。
收起全文
精华内容
下载资源
问答
  • 核函数

    千次阅读 2015-10-20 18:41:01
    核函数

    由于下一篇要学机器学习的另外一种模型——核模型,里面涉及到核函数,所以先找了一下核函数的相关知识。

    在知乎上看到了一些比较好的解答,详细参考:http://www.zhihu.com/question/24627666

    首先举一个核函数把低维空间映射到高维空间的例子(这也解决了大部分人认为只有降维才能简化问题的错误观点~~)


    上图放在直角坐标系中,位于一二象限,我们关注的是北京四合院下面的紫色字体和红色的大门,我们把红色大门看成'+'数据,把紫色的字看成'-'数据,他们的横纵坐标是两个特征,显然在这个二维空间内,'+'、'-'两类数据不是线性可分的。

    我们现在考虑核函数,即"内积平方"。

    这里面 是二维空间中的两个点。

    这个核函数对应着二维空间到三维空间的映射,表达式是:


    可以验证


    在这个P映射下,原来二维空间的图就转换为三维空间的图了(前后为x周,左右为y轴,上下为z轴):


    注意到绿色平面可以完美分割紫色和红色,也就是说二类数据('+' '-')在三维空间中变成线性可分的了。

    三维空间的这个判决边界再映射回二维空间中是这样的:


    这是一条双曲线,不是线性的。

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

    如上面的例子所说,核函数的作用就是隐含着一个从低维空间到高维空间的映射,而这个映射可以把低维空间中线性不可分的两类点变成线性可分的。

    当然,我举的这个具体例子强烈地依赖于数据在原始空间中的位置。
    事实中使用的核函数往往比这个例子复杂得多。它们对应的映射并不一定能够显式地表达出来;它们映射到的高维空间的维数也比我举的例子(三维)高得多,甚至是无穷维的。这样,就可以期待原来并不线性可分的两类点变成线性可分的了。

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

    在机器学习中常用的核函数,一般有这么几类,也就是LibSVM中自带的这几类:

    1>线性:

    2>多项式:

    3>Radial basis function(RBF径向基函数):

    4>Sigmoid:

    上面的例子是多项式核函数的情况。

    在实用中,很多使用者都是盲目地试验各种核函数,并扫描其中的参数,选择效果最好的。至于什么样的核函数适用于什么样的问题,大多数人都不懂。

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

    下面是另外一个人对核函数相关概念的区分和解释:

    1. kernel 和 SVM 完全是两个正交的概念。早在SVM提出之前,reproducing kernel Hilbert space(RKHS)的应用就比较广泛了,一个经典的例子就是信号处理中signal detection的问题:给一条time series我如何知道它不是一个random walk的噪音而是有一个特定的pattern在里面呢?在这个情景下,RKHS理论就给出了一个通过现实求解likelihood ratio的假设检验方案,其中的kernel实际上是某个随机过程 R(t) 在两个不同时间点的correlation。

    2. 很多人觉得kernel定义了一个从低维度到高维度的映射,这是不准确(而非不正确)首先,并不是所有空间都像欧式空间那样有所谓“维度”的良好定义,很多空间是没有维度的意义的,或者可以认为维度都是无穷大,这样就无法区分不同的RKHS了。但是kernel确实可以定义一个映射,而且确实是一个非常强大的映射,很多方法在这个映射下是可以直接推广到kernel space的,包括SVM,logistic regression, least squre,dimension reduction。

    3.那么这个映射是什么呢?我略过数学的setup(估计也没有人看)简单讲讲RKHS是什么一个故事:实际上RKHS的定义是反过来的,首先在原空间上考虑所有连续函数,这些连续函数可以做加法和数乘,所以真主给他们(中的一部分)施加一个内积结构,比如所有二阶多项式其系数在欧式空间展开构成的内积就是高票主提供的例子;这个内积实现中的一部分就可以对应到原空间中的两两之间点的kernel。所以RKHS是先有内积才有kernel的,但是另个一个牛逼的定理说,只要kernel满足一些条件,就存在这样一个(唯一的)内积结构与之对应。

    4. kernel有什么作用?kernel不仅可以建立点对点的映射(如SVM那样),还可以建立原空间上一个分布对点的映射,有兴趣的读者请谷歌 kernel embedding of distributions。 在这一个映射下,人们会关心这么一个问题,给两组数据,我如何知道他们是不是从同一个分布中来的呢?在kernel map下,两组数据被map成了kernel space的两个点,我们可以看看在那个空间里他们距离是远还是近,如果很近就很可能是同一个点加上一点sample variance,以此来判断两组数据是不是同一个分布(two sample test)。

    5. 最后谈一谈不同的核函数,应用中最常见的估计就是RBF kernel了比如Gaussian kernel,这类kernel的强大之处在于他们提供的embedding space非常丰富(当然有人可以理解为维度非常高,但是既然是无穷维,谈维度已经没有意义了),以至于原空间中不同的分布可以被直接map到不同的点,这类kernel有个名字叫characteristic kernel。回到我们最初的kernel 定义到底什么样的kernel才能reproduce如此丰富的embedding 空间呢?答案是能把整个连续函数空间填满(dense)的kernel。比如一般的多项式kernel就不行,因为二阶多项式的线性组合不能表示更高阶的多项式函数了。这种能把整个连续函数空间填满的kernel,叫universal kernel。一个重要的结果是universal kernel就是characteristic kernel,换句话说只要你能把连续函数空间填满,那么原空间上不同的分布在这个map下都会变成不同的点。

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

    下面是另一位学者关于核函数背后的intuition的介绍

    intuition也很简单,比如我们有一个一维的数据分布是如下图的样子,你想把它用一个直线来分开,你发现是不可能的,因为他们是间隔的。所以不论你画在哪,比如绿色竖线,都不可能把两个类分开。


    但是我们使用一个简单的升维的方法,把原来一维的空间投射到二维中,x->(x, x^2)。比如:

    0->(0,0) 
    1->(1,1)
    2->(2,4)

    这时候就线性可分了。


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


    理论上,由于train set是有限的,当你把data投射到无限维度的空间上是一定可以在train set上完美分类的,至于在test set上当然就呵呵了。

    记得要选取合适(试试各种)kernel function来“避免过拟合”

    此外推荐一个比较好的支持向量机(SVM)的文章: 支持向量机通俗导论(理解SVM的三层境界)

    展开全文
  • 核函数: 当数据非线性可分时,可将数据从低维空间映射到高维空间,使数据在高维空间线性可分,之后在优化时需要计算内积,复杂度很高。而核函数准确地说是一种核技巧,能够简便的计算内积,从而能够简便地解决非...

    核函数:

    实际应用中,我们经常遇到数据线性不可分问题,可将数据从低维空间映射到高维空间,使数据在高维空间线性可分,之后在优化时需要计算内积,复杂度很高。这个时候就可以使用核函数,而核函数准确地说是一种核技巧,它也是从低维到高维的一种转换,但是却避免了直接在高维空间中进行复杂计算,可以在低维上进行计算,但实质上却能将分类效果表现在高维上,从而能够简便地解决非线性问题。

    SVM核函数的选择:

    吴恩达老师老师的建议:
    1、当样本特征数目远远大于样本数量时,特征维度已经够高,这个时候往往数据线性可分,可考虑使用线性核函数。
    2、当样本数量一般,样本特征维度也不高时,可以考虑高斯核
    3、当样本数量较多,样本特征较少时,可考虑人工增加一些特征,使样本线性可分,然后再考虑使用线性核函数的SVM或者LR.

    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 43,494
精华内容 17,397
关键字:

核函数