核函数

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

在知乎上看到了一些比较好的解答,详细参考: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的三层境界)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/246747.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于Matlab编程的思考(待续)

Matlab编程的规范化思考 1.并行化 2.释放内存 3.需要调参的变量太多,可考虑将变量都放到一个结构体里面。 4.find(y),就是要找到y中那些非零项的指引 5.代码运行出现问题的时候,在命令行输入why就可以得到答案 6.输入bench可以给电脑跑分。 7.hom…

拉普拉斯锐化图像

在图像增强中,平滑是为了消除图像中噪声的干扰,或者降低对比度,与之相反,有时为了强调图像的边缘和细节,需要对图像进行锐化,提高对比度。 图的边缘是指在局部不连续的特征。 简要介绍一下原理&#xff1…

运动捕捉数据的描述ASF/AMC

运动捕捉数据有多种格式:ASF/AMC,BVH,C3D等,这三个是比较常用的,一般的matlab实验用的是ASF/AMC,其次就是BVH。 ASF/AMC文件格式是Acclaim Games公司设计开发的,全称是Acclaim Skeleton File/A…

应用深度学习(台大陈蕴侬李宏毅) Part1

History of Deep Learning Big Data & GPU 端到端 Universality Theorem Core Factors for Applied Deep Learning 参考文献 http://v.qq.com/vplus/578e2d6f5e1fadc1/foldervideos/8n1000201qzzkx5 Deep Learning ◦Goodfellow, Bengio, and Courville, “Deep Learning…

世界坐标

世界坐标是最直观反映人体在世界坐标系下运动位置的变化信息,对分析运动行为有重要的作用。下面介绍如何根据ASF/AMC文件计算人体各个关节的世界坐标。 根据前面讲的ASF/AMC文件的格式,可以知道人体运动可以看做是通过根节点root的平移以及其他关节绕其父…

人工神经网络——径向基函数(RBF)神经网络

此博客排版不好,重新用Markdown写了一篇,同时附上了代码,戳这里 本文摘自:《模式识别与智能计算——matlab技术实现第三版》与《matlab神经网络43个案例分析》 【注】蓝色字体为自己的理解部分 径向基函数神经网络的优点&#xf…

李宏毅机器学习课程-Transfer Learning

深度学习 -> 强化学习 ->迁移学习(杨强教授报告) 李宏毅机器学习课程-Transfer Learning 迁移学习-吴恩达 freeze 待处理的 理解深层神经网络中的迁移学习及TensorFlow实现 Transfer Learning模式 Similar domain, different task…

matlab实现RBF的相关函数

摘自《matlab神经网络43个案例分析》 (1)newrb() 该函数可以用来设计一个近似径向基网络(approximate RBF)。调用格式为: [net,tr]newrb(P,T,GOAL,SPREAD,MN,DF) 其中P为Q组输入向量组成的R*Q位矩阵,T为Q组目标分类向量组成的S*Q维矩阵。GOAL为均方误…

李宏毅机器学习课程-Structured Learning

Simple structured learning framework for python pystruct-github Slides for explaining structured prediction and PyStruct -github 一、Structured Learning-Unifed Framework 之前的input and output 都是vectors Training阶段就是找一个F来评估&#xff…

matlab之norm函数

简单点说就是用来计算范数的一个函数。 假设A是一个矩阵,那么norm(A)或者norm(A,2)计算的就是A的2范数;同理norm(A,1)计算的就是1范数了. 2范数:计算步骤是先计算A*A‘(这里A’代表转置,也就是原矩阵*(原…

matlab之unwrap函数

网上的说法: 要计算一个系统相频特性,就要用到反正切函数,计算机中反正切函数规定,在一、二象限中的角度为0~pi,三四象限的角度为0~-pi。 若一个角度从0变到2pi,但实际得到的结果是…

Python xrange与range的区别

xrange 与 range xrange 用法与 range 完全相同,所不同的是生成的不是一个list对象,而是一个生成器。 要生成很大的数字序列的时候,用xrange会比range性能优很多,因为不需要一上来就开辟一块很大的内存空间。 xrange 和 range 这…

受限玻尔兹曼机准备知识——蒙特卡洛方法

先了解几个基本概率知识,不急着看蒙特卡洛方法的定义,具体的MC方法参考网上各种资料。 两个比较好的学习MC方法的文章:蒙特卡洛方法入门 (结合了实例)和 蒙特卡洛方法 (推荐,非常详细) 更新日志:2016-11-19&#xff…

受限玻尔兹曼机准备知识——MCMC方法和Gibbs采样

先点明几个名词 MCMC方法:马尔可夫链-蒙特卡洛方法 (千万别叫成梅特罗波利斯蒙特卡罗方法了) Metropolis-Hastings采样:梅特罗波利斯-哈斯廷斯采样 Gibbs采样:吉布斯采样 还是介绍一下学习MCMC和Gibbs采样比较好的一个资料:随机采…

受限玻尔兹曼机——简单证明

花了很久看了一下玻尔兹曼机,感觉水有点深,总之一步一步来嘛~~~~ 先说一下一个非常好的参考资料: 受限玻尔兹曼机(RBM)学习笔记 ,有兴趣的可以再看看这篇文章的参考文献或者博客,写的也非常好&…

受限玻尔兹曼机RBM实现及能量值思考——matlab实现

网址:http://www.cs.toronto.edu/~hinton/MatlabForSciencePaper.html 这个代码主要是在mnist上做手写数字识别的代码,贴出来的目的主要是想研究一下在迭代过程中能量的变化情况。 1. 标准能量函数 标准的能量函数的表达式为: 那么就将这个…

Cheat_Sheet ---Keras、Matlab、Matplotlib、Numpy、Pandas、Scikit-Learn、SciPy

Cheat_Sheet ---KerasCheat_Sheet ---MatlabCheat_Sheet ---MatplotlibCheat_Sheet ---NumpyCheat_Sheet ---PandasCheat_Sheet ---Scikit-LearnCheat_Sheet ---SciPy参考文献 http://ddl.escience.cn/f/IDkq#path%2F8215264

WPF中DataContext的绑定技巧-粉丝专栏

(关注博主后,在“粉丝专栏”,可免费阅读此文) 先看效果: 上面的绑定值都是我们自定义的属性,有了以上的提示,那么我们可以轻松绑定字段,再也不用担心错误了。附带源码。 …

matlab实现unix时间戳到标准时间的转换

【注】给定时间精确到小时的情况下的转换 函数: function [ date ] ConvertDate( x ) %将unix时间戳转换为标准时间 % date datestr(1426406400/86400 datenum(1970,1,1)); date datestr((x-3600*248*3600)/86400 70*36519datenum(1900,1,0)); end结果&#…

failed to initialize nvml driver/library version mismatch ubuntu

英伟达驱动版本是384.130显示的NVRM version: NVIDIA UNIX x86_64 Kernel Module是:384.130。 若是旧的版本就会出现如下问题。 这个问题出现的原因是kernel mod 的 Nvidia driver 的版本没有更新,一般情况下,重启机器就能够解决,…