网站响应式技术,用什么工具可以创建网页,网页设计购物网站建设,辛集城乡建设管理局网站由于下一篇要学机器学习的另外一种模型——核模型#xff0c;里面涉及到核函数#xff0c;所以先找了一下核函数的相关知识。
在知乎上看到了一些比较好的解答#xff0c;详细参考#xff1a;http://www.zhihu.com/question/24627666
首先举一个核函数把低维空间映射到高…由于下一篇要学机器学习的另外一种模型——核模型里面涉及到核函数所以先找了一下核函数的相关知识。
在知乎上看到了一些比较好的解答详细参考http://www.zhihu.com/question/24627666
首先举一个核函数把低维空间映射到高维空间的例子(这也解决了大部分人认为只有降维才能简化问题的错误观点~~) 上图放在直角坐标系中位于一二象限我们关注的是北京四合院下面的紫色字体和红色的大门我们把红色大门看成数据把紫色的字看成-数据他们的横纵坐标是两个特征显然在这个二维空间内、-两类数据不是线性可分的。
我们现在考虑核函数即内积平方。
这里面 是二维空间中的两个点。
这个核函数对应着二维空间到三维空间的映射表达式是 可以验证 在这个P映射下原来二维空间的图就转换为三维空间的图了前后为x周左右为y轴上下为z轴 注意到绿色平面可以完美分割紫色和红色也就是说二类数据( -)在三维空间中变成线性可分的了。
三维空间的这个判决边界再映射回二维空间中是这样的 这是一条双曲线不是线性的。 如上面的例子所说核函数的作用就是隐含着一个从低维空间到高维空间的映射而这个映射可以把低维空间中线性不可分的两类点变成线性可分的。 当然我举的这个具体例子强烈地依赖于数据在原始空间中的位置。 事实中使用的核函数往往比这个例子复杂得多。它们对应的映射并不一定能够显式地表达出来它们映射到的高维空间的维数也比我举的例子三维高得多甚至是无穷维的。这样就可以期待原来并不线性可分的两类点变成线性可分的了。
在机器学习中常用的核函数一般有这么几类也就是LibSVM中自带的这几类
1线性
2多项式
3Radial basis function(RBF径向基函数)
4Sigmoid
上面的例子是多项式核函数的情况。
在实用中很多使用者都是盲目地试验各种核函数并扫描其中的参数选择效果最好的。至于什么样的核函数适用于什么样的问题大多数人都不懂。 下面是另外一个人对核函数相关概念的区分和解释
1. kernel 和 SVM 完全是两个正交的概念。早在SVM提出之前reproducing kernel Hilbert spaceRKHS的应用就比较广泛了一个经典的例子就是信号处理中signal detection的问题给一条time series我如何知道它不是一个random walk的噪音而是有一个特定的pattern在里面呢在这个情景下RKHS理论就给出了一个通过现实求解likelihood ratio的假设检验方案其中的kernel实际上是某个随机过程 R(t) 在两个不同时间点的correlation。
2. 很多人觉得kernel定义了一个从低维度到高维度的映射这是不准确而非不正确的。首先并不是所有空间都像欧式空间那样有所谓“维度”的良好定义很多空间是没有维度的意义的或者可以认为维度都是无穷大这样就无法区分不同的RKHS了。但是kernel确实可以定义一个映射而且确实是一个非常强大的映射很多方法在这个映射下是可以直接推广到kernel space的包括SVMlogistic regression, least squredimension 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的三层境界