高斯核函数参数确定_高斯过程

之前看过高斯过程(GP),不过当时也没太看懂,最近花时间认真研究了一下,感觉总算是明白咋回事了,本文基于回归问题解释GP模型的思想和方法。文中的想法是自己思考总结得来,并不一定准确,也可能存在错误性。

为什么要用GP?

回顾一下我们之前在解决回归问题时,就拿线性回归举例,我们为了学习映射函数,总是把函数参数化,例如假设

equation?tex=f%28%5Cmathbf+x%29+%3D+%5Cmathbf+w%5E%7B%5Crm+T%7D%5Cmathbf+x ,然后计算参数
equation?tex=%5Cmathbf+w 的后验分布,把参数估计出来之后,就得到了我们想要学习的函数,接着就可以用这个函数去做预测了。

但是有时候我们并不知道数据到底用什么形式的函数去拟合比较好(是1次的,2次的还是10次的?)。这个时候高斯过程(GP)就闪亮登场了,GP说:“我不需要用参数去刻画函数,你就告诉我训练数据是什么,你想要预测哪些数据,我就能给你预测出结果。“这样一来,我们就省去了去选择刻画函数参数的这样一个过程。

GP是怎么来的?

那么GP是怎么做到的呢?我们先来看这样一件有趣的事情:

假设我们的函数定义域和值域都是

equation?tex=%5Cmathbf+R ,那么如果你的训练集是包含了所有定义域的,那么这个函数
equation?tex=%5Cmathbf+f%5E%2A 我们就得到了,你给任何一个点,我都能通过查表的方式告诉你结果是多少。第二种情况我们的训练集中缺少了
equation?tex=%5C%7B1%2C2%2C3%2C4%5C%7D 这四个点,并且这四个点就是我们需要进行预测的点,如果我们可以通过某种方式建立一个4维的概率分布
equation?tex=p%28%5Cmathbf%7Bf1%2Cf2%2Cf3%2Cf4%7D%29 ,其中
equation?tex=%28%5Cmathbf+%7Bf1%2Cf2%2Cf3%2Cf4%7D%29 分别代表
equation?tex=%5C%7B1%2C2%2C3%2C4%5C%7D 的预测值,那么我们是不是就可以就可以利用这个概率分布,找到对应的概率最高的点把最终的结果给估计出来。

然而,事实上虽然很多实际问题(比如房价的预测),它的定义域和值域都是

equation?tex=%5Cmathbf+R (或者是某个连续的区间),但是我们的训练数据是有限的,而基于这些训练数据,我们要对整个实数域进行预测,如果我们继续利用上面的思想的话,我们需要建立一个无穷维度的概率分布(因为我们需要进行预测的数据点事无穷个的),这显然不可能,不过庆幸的是,在每一次我们需要进行预测的时候,我们所需要进行预测的数据是有限的。假设有N个训练数据
equation?tex=%28%5Cmathbf+X%2C%5Cmathbf+Y%29 ,有N*个需要进行预测的数据
equation?tex=%5Cmathbf+X%5E%2A ,
equation?tex=%5Cmathbf+X_0 表示
equation?tex=%28%5Cmathbf+X%2C%5Cmathbf+X%5E%2A%29 ,那么我们最终其实就是希望得到
equation?tex=p%28%5Cmathbf+f%5E%2A%29(
equation?tex=%5Cmathbf+f%5E%2A 代表了
equation?tex=%5Cmathbf+X%5E%2A 所有预测值的变量的集合)。

高斯过程(GP)

下面我们就开始正式的介绍高斯过程(GP),它是怎么得到这个

equation?tex=p%28%5Cmathbf+f%5E%2A%29,然后去做预测的。在GP中,首先基于训练数据和测试数据,定义了基于定义域
equation?tex=%5Cmathbf+X_0的函数的概率分布

equation?tex=+++p%28%5Cmathbf+f_0%7C%7B%5Cmathbf+X%7D_0%29+%3D+%5Cmathcal+N%28%5Cmathbf+f_0%7C%5Cboldsymbol%5Cmu_0%2C%5Cmathbf+K_0%29%29

其中

equation?tex=+++%5Cboldsymbol%5Cmu_0+%3D+m%28%5Cmathbf+X_0%29%2C%5B%5Cmathbf+K_0%5D_%7Bi%2Cj%7D+%3D+%5Ckappa%28%5B%5Cmathbf+X_0%5D_i%2C%5B%5Cmathbf+X_0%5D_j%29
equation?tex=%5Ckappa 是正定的核函数。
equation?tex=%5Cmathbf+f_0 代表了
equation?tex=%5Cmathbf+X_0 所有预测值的变量的集合。这里有一个关键的思想,如果核函数认为两个输入是非常相似的,那么函数给出的输出值也会非常的相似。(在这样的刻画中,我们发现
equation?tex=%5Cboldsymbol%5Cmu_0 其实好像并没有太大的作用,事实上,我们通常令
equation?tex=m%28%5Cmathbf+x%29+%3D+0 )。这个定义总体给出了三个信息:
  1. 在本次训练中,我们的定义域是
    equation?tex=%5Cmathbf+X_0
  2. 在这个定义域中,如果
    equation?tex=%5Cmathbf+x_i%2C%5Cmathbf+x_j 基于核函数是非常接近的,那么你们的输出值也会非常接近。
  3. 我们是用高斯分布去进行刻画(用高斯的好处,至少有一点条件概率密度函数很好算)。

我们把上面的概率分布展开:

equation?tex=%5Cleft%28%5Cbegin%7Barray%7D%7Bl%7D+%7B%5Cmathbf%7Bf%7D%7D+%5C%5C+%7B%5Cmathbf%7Bf%7D_%7B%2A%7D%7D+%5Cend%7Barray%7D%5Cright%29+%5Csim+%5Cmathcal%7BN%7D%5Cleft%28%5Cleft%28%5Cbegin%7Barray%7D%7Bl%7D+%7B%5Cboldsymbol%7B%5Cmu%7D%7D+%5C%5C+%7B%5Cboldsymbol%7B%5Cmu%7D_%7B%2A%7D%7D+%5Cend%7Barray%7D%5Cright%29%2C%5Cleft%28%5Cbegin%7Barray%7D%7Bll%7D+%7B%5Cmathbf%7BK%7D%7D+%26+%7B%5Cmathbf%7BK%7D_%7B%2A%7D%7D+%5C%5C+%7B%5Cmathbf%7BK%7D_%7B%2A%7D%5E%7BT%7D%7D+%26+%7B%5Cmathbf%7BK%7D_%7B%2A+%2A%7D%7D+%5Cend%7Barray%7D%5Cright%29%5Cright%29

其中

equation?tex=%5Cmathbf%7BK%7D%3D%5Ckappa%28%5Cmathbf%7BX%7D%2C+%5Cmathbf%7BX%7D%29+%5Ctext+%7B+is+%7D+N+%5Ctimes+N%2C+%5Cmathbf%7BK%7D_%7B%2A%7D%3D%5Ckappa%5Cleft%28%5Cmathbf%7BX%7D%2C+%5Cmathbf%7BX%7D_%7B%2A%7D%5Cright%29+%5Ctext+%7B+is+%7D+N+%5Ctimes+N_%7B%2A%7D%2C+%5Ctext+%7B+and+%7D+%5Cmathbf%7BK%7D_%7B%2A+%2A%7D%3D%5Ckappa%5Cleft%28%5Cmathbf%7BX%7D_%7B%2A%7D%2C+%5Cmathbf%7BX%7D_%7B%2A%7D%5Cright%29+%5Ctext+%7B+is+%7D+N_%7B%2A%7D+%5Ctimes+N_%7B%2A%7D

利用高斯分布的性质(通过联合分布计算条件分布),我们可以得到

equation?tex=%5Cbegin%7Baligned%7D+p%5Cleft%28%5Cmathbf%7Bf%7D_%7B%2A%7D+%7C+%5Cmathbf%7BX%7D_%7B%2A%7D%2C+%5Cmathbf%7BX%7D%2C+%5Cmathbf%7Bf%7D%5Cright%29+%26%3D%5Cmathcal%7BN%7D%5Cleft%28%5Cmathbf%7Bf%7D_%7B%2A%7D+%7C+%5Cboldsymbol%7B%5Cmu%7D_%7B%2A%7D%2C+%5Cmathbf%7B%5CSigma%7D_%7B%2A%7D%5Cright%29+%5C%5C+%5Cboldsymbol%7B%5Cmu%7D_%7B%2A%7D+%26%3D%5Cboldsymbol%7B%5Cmu%7D%5Cleft%28%5Cmathbf%7BX%7D_%7B%2A%7D%5Cright%29%2B%5Cmathbf%7BK%7D_%7B%2A%7D%5E%7BT%7D+%5Cmathbf%7BK%7D%5E%7B-1%7D%28%5Cmathbf%7Bf%7D-%5Cboldsymbol%7B%5Cmu%7D%28%5Cmathbf%7BX%7D%29%29+%5C%5C+%5Cboldsymbol%7B%5CSigma%7D_%7B%2A%7D+%26%3D%5Cmathbf%7BK%7D_%7B%2A+%2A%7D-%5Cmathbf%7BK%7D_%7B%2A%7D%5E%7BT%7D+%5Cmathbf%7BK%7D%5E%7B-1%7D+%5Cmathbf%7BK%7D_%7B%2A%7D+%5Cend%7Baligned%7D

这样我们计算出了我们希望得到的

equation?tex=p%28%5Cmathbf+f%5E%2A%29。至此为止,整个GP就结束了。关于GP那么它有什么优点呢,我认为有两点:
  1. 这一点也是我们上面就说过的,GP是无参的,对于任何一组数据,你不需要知道他的结构是什么,你也不需要去用参数刻画它函数的样子,GP就可以帮你做预测。
  2. GP它刻画出了函数的概率分布。这个非常有用。回顾之前的线性回归的方法,当你把参数
    equation?tex=%5Cmathbf+w 估计出来后,你的函数就确定了,接下来我拿出任何一个数,你都会“毫无感情的”给我一个预测值。但是GP不一样,当我们知道我们预测函数的不确定度(不确定度很高,这个预测的结果就不可靠)之后,我们能探索最不可能实现高效训练的数据区域。这也是贝叶斯优化背后的主要思想。下面这句话我觉得写得非常贴切:如果你给我几张猫和狗的图片,要我对一张新的猫咪照片分类,我可以
    很有信心地给你一个判断。但是,如果你给我一张鸵鸟照片,强迫我说出它是猫还是狗,我就只能信心全无地预测一下。——Yarin Gal。

有噪声观测的情况下

在有噪观测的情况下,我们假设观测模型是这样的

equation?tex=y%3Df%28%5Cmathbf%7Bx%7D%29%2B%5Cepsilon,其中
equation?tex=%5Cepsilon+%5Csim+%5Cmathcal%7BN%7D%5Cleft%280%2C+%5Csigma_%7By%7D%5E%7B2%7D%5Cright%29 ,那么观测的核函数则更新为
equation?tex=%5Cmathbf%7BK%7D%2B%5Csigma_%7By%7D%5E%7B2%7D+%5Cmathbf%7BI%7D_%7BN%7D+%5Ctriangleq+%5Cmathbf%7BK%7D_%7By%7D (假设不同观测之间是独立的),基于这样的假设,联合概率分布和条件概率分布分别是:

equation?tex=%5Cleft%28%5Cbegin%7Barray%7D%7Bl%7D+%7B%5Cmathbf%7By%7D%7D+%5C%5C+%7B%5Cmathbf%7Bf%7D_%7B%2A%7D%7D+%5Cend%7Barray%7D%5Cright%29+%5Csim+%5Cmathcal%7BN%7D%5Cleft%28%5Cmathbf%7B0%7D%2C%5Cleft%28%5Cbegin%7Barray%7D%7Bll%7D+%7B%5Cmathbf%7BK%7D_%7By%7D%7D+%26+%7B%5Cmathbf%7BK%7D_%7B%2A%7D%7D+%5C%5C+%7B%5Cmathbf%7BK%7D_%7B%2A%7D%5E%7BT%7D%7D+%26+%7B%5Cmathbf%7BK%7D_%7B%2A+%2A%7D%7D+%5Cend%7Barray%7D%5Cright%29%5Cright%29
equation?tex=%5Cbegin%7Baligned%7D+p%5Cleft%28%5Cmathbf%7Bf%7D_%7B%2A%7D+%7C+%5Cmathbf%7BX%7D_%7B%2A%7D%2C+%5Cmathbf%7BX%7D%2C+%5Cmathbf%7By%7D%5Cright%29+%26%3D%5Cmathcal%7BN%7D%5Cleft%28%5Cmathbf%7Bf%7D_%7B%2A%7D+%7C+%5Cboldsymbol%7B%5Cmu%7D_%7B%2A%7D%2C+%5Cmathbf%7B%5CSigma%7D_%7B%2A%7D%5Cright%29+%5C%5C+%5Cboldsymbol%7B%5Cmu%7D_%7B%2A%7D+%26%3D%5Cmathbf%7BK%7D_%7B%2A%7D%5E%7BT%7D+%5Cmathbf%7BK%7D_%7By%7D%5E%7B-1%7D+%5Cmathbf%7By%7D+%5C%5C+%5Cboldsymbol%7B%5CSigma%7D_%7B%2A%7D+%26%3D%5Cmathbf%7BK%7D_%7B%2A+%2A%7D-%5Cmathbf%7BK%7D_%7B%2A%7D%5E%7BT%7D+%5Cmathbf%7BK%7D_%7By%7D%5E%7B-1%7D+%5Cmathbf%7BK%7D_%7B%2A%7D+%5Cend%7Baligned%7D

核函数参数的影响

那么核函数对GP有什么影响呢,假设我们选择SE核函数:

equation?tex=%5Ckappa_%7By%7D%5Cleft%28x_%7Bp%7D%2C+x_%7Bq%7D%5Cright%29%3D%5Csigma_%7Bf%7D%5E%7B2%7D+%5Cexp+%5Cleft%28-%5Cfrac%7B1%7D%7B2+%5Cell%5E%7B2%7D%7D%5Cleft%28x_%7Bp%7D-x_%7Bq%7D%5Cright%29%5E%7B2%7D%5Cright%29%2B%5Csigma_%7By%7D%5E%7B2%7D+%5Cdelta_%7Bp+q%7D
equation?tex=%5Cdelta_%7Bpq%7D 表示p=q时取1,否则取0)

这个核函数有三个参数,分别是

equation?tex=%5Cell
equation?tex=%5Csigma_%7Bf%7D%5E%7B2%7D
equation?tex=%5Csigma_%7By%7D%5E%7B2%7D ,分别控制着水平尺度,垂直尺度,以及噪声的方差。通过三幅图我们来看看这三个参数是怎么控制预测的结果的:

f732303ebedf4a2b58b032f6e36f3a15.png

三幅图的超参数

equation?tex=%5Cleft%28%5Cell%2C+%5Csigma_%7Bf%7D%2C+%5Csigma_%7By%7D%5Cright%29 分别是:
equation?tex=%28a%29+%281%2C1%2C0.1%29%2C+%28b%29+%280.3%2C0.108%2C0.00005%29%2C+%28c%29+%283.0%2C1.16%2C0.89%29 。(只改变
equation?tex=%5Cell ,其他的参数是通过优化边际似然函数得到的)

我们可以看到(a)图整体看上去是估计的比较好的,(b)图中,减小了

equation?tex=%5Cell ,我们发现图变得弯弯曲曲的,而且一旦预测的数据点稍微远离训练的数据点,这个不确定度就大大的上升(因为只要输入的距离稍微大一点点,核函数就认为它们已经非常不相似了)。(c)图中,
equation?tex=%5Cell 为3,函数看上去更加的平滑了,但是拟合的效果就显得很差。

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

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

相关文章

uniapp光标自动定义到文本框_特检自动化行吊静力检测方案

主要测量功能使用徕卡测量开发的Windows版数据传输软件,通过蓝牙连接徕卡DISTO,经过简单的测量周期设置,即可实现自动化的距离检测。测量数据还可以输出Excel,甚至可以实时发送至PC运行的第三方软件中,这么强大的软件还…

安装python时需要勾选_一体化污水处理设备安装时需要注意事项

一体化污水处理设备用于处理生活污水和低浓度有机污水,它基本上采用机电完全封闭的结构,不需要专业人员进行管理。它方便且易于清洁,因此引起了很多关注。一体化污水处理设备的安装方法通常为三种:地埋式,地上式和半地…

oracle驱动maven报错_在Maven仓库中添加Oracle JDBC驱动

由于Oracle授权问题,Maven3不提供Oracle JDBC driver,为了在Maven项目中应用Oracle JDBC driver,必须手动添加到本地仓库。一.首先要得到Oracle JDBC Driver2.通过Oracle的安装目录获得,位置在“{ORACLE_HOME}jdbclibojdbc14.jar”二.手动安装…

python3.6程序_python3.6如何生成exe程序

PyInstaller的原理简介PyInstaller其实就是把python解析器和你自己的脚本打包成一个可执行的文件,和编译成真正的机器码完全是两回事,所以千万不要指望成打包成一个可执行文件会提高运行效率,相反可能会降低运行效率,好处就是在运…

java切片_ java中一个极其强悍的新特性Stream详解(非常实用)

java8中有两个非常有名的改进,一个是Lambda表达式,一个是Stream。如果我们了解过函数式编程的话,都知道Stream真正把函数式编程的风格引入到了java中。这篇文章由简入繁逐步介绍Stream。一、Stream是什么从名字来看,Stream就是一个…

java获取网络图片_有了这50套Java毕设项目(源码 案例),offer拿到手软,无偿分享...

简介:又到了开学季,不少人都很是烦恼,手把手教你做Java毕设项目,有教程视频源码100套随意选择,试试手!!列举其中2个系统大纲在线考试系统1.综述网络考试系统的项目背景及国内外发展现状&#xf…

python字典的建立和输出_字典的创建和使用

直接创建d {age: 23, name: Daniel, sex: 1}输出结果:{age: 23, name: Daniel, sex: 1}dict函数# 通过序列对建立字典vaulues [(name, Daniel), (age, 23), (sex, 1)]print dict(values)# 通过关键字建立字典print dict(nameDaniel, age23, sex1)# 如果 dict 不传…

python字符串出栈方法_1.Python实现字符串反转的几种方法

1.Python实现字符串反转的几种方法题目: 在Python环境下用尽可能多的方法反转字符串,例如将s "abcdef"反转成 "fedcba"第一种:使用字符串切片result s[::-1]第二种:使用列表的reverse方法l list(s)l.reverse()result …

linux将日期和日历信息追加到文件中_Linux常用指令

常用指令 1、帮助指令 man [指令或者配置文件] help 指令 2、文件目录类指令 1、pwd 功能:显示当前工作目录的绝对路径 2、ls [选项] [目录或者文件] 功能:列出文件名和目录使用:ls -l 以列表的形式显示信息ls -a …

python播放音乐同步歌词_使用Python下载歌词并嵌入歌曲文件中的实现代码

使用python扫描本地音乐并下载歌词这次这个真的是干货哦,昨晚弄了半晚上,,,,从8点吃完饭就开始写,一直到了快12点才弄好,,,新手,伤不起呀。。。。先简单的说下…

ajax mysql点赞_php+mysql结合Ajax实现点赞功能完整实例

phpmysql结合Ajax实现点赞功能完整实例131415161718192021222324252627282930313233343536//判断是否已经存在了cookiefunction checkcookie(gindex){var thiscookie goodplus gindex;var mapcookie getCookie(thiscookie)if (mapcookie!null && mapcookie!"&q…

一个搜索框多个按钮_网站搜索栏设计指南:要不要?怎么设计?

在网站的设计过程中,搜索栏是一个很容易被忽略的部分,但用户却依赖它来寻找特定的信息。由于搜索栏是网站中最常用的元素之一,所以搜索栏的设计对用户体验有着重要的影响。网站是否需要搜索栏?搜索栏使用背后的思维和心理是帮助用…

mysql的使用优化问题吗_如何对 mysql 进行优化的问题

3641 天前mingszu-------------------------------------------------------------------------------------------------------------------------------------------------------------------| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Ca…

通过 xlsx 解析上传excel的数据

一、前言 在前端开发中,特别是在后台管理系统中,导入数据(上传excel)到后端是是否常见的功能;而一般的实现方式都是通过接口将excel上传到后端,再有后端进行数据解析并做后续操作。 今天,来记录…

状态机设计的一般步骤_浅谈状态机

来源:公众号【ZYNQ】ID :FreeZynq整理 :李肖遥本文目录前言状态机简介状态机分类Mealy 型状态机Moore 型状态机状态机描述一段式状态机二段式状态机三段式状态机状态机优缺点总结扩展-四段式状态机01. 前言状态机是FPGA设计中一种非常重要、…

java中default_Java 中关于default 访问权限的讨论

Java中关于成员变量访问权限问题一般书中会给出如下表格:简单地描述一下表中的内容:用private 修饰的成员变量只能在类内部访问;用default修饰的成员变量可以再内部访问,也可以被同个包(同一目录)中的类访问;default修…

python手机解释器_python3

Python解释器Linux/Unix的系统上,Python解释器通常被安装在 /usr/local/python3这样的有效路径(目录)里。我们可以将路径 /usr/local/python3/bin 添加到您的Linux/Unix操作系统的环境变量中(最好参照您python的安装路径进行添加),这样您就可以通过 shel…

increment java_Java中的increment()有什么作用?

publicclassThisTest{privateinti0;//第一个构造器:有一个int型形参ThisTest(inti){this.ii1;//此时this表示引用成员变量i,而非函数参数iSystem.out.println("Intconstructori—...public class ThisTest {private int i0;//第一个构造器&#xff…

python保存模块_Python使用Pickle模块进行数据保存和读取的讲解

pickle 是一个 python 中, 压缩/保存/提取 文件的模块,字典和列表都是能被保存的.但必须注意的是python2以ASCII形式保存,而在python3中pickle是使用转换二进制的数据压缩方法保存数据所以,在保存或者读取数据的时候,打开文件应该…

java 输出当月日历_java 实现打印当前月份的日历

实现当前日历的打印,当前日期用*来表示。关键得出这个月的第一天是星期几。基姆拉尔森计算公式W (d2*m3*(m1)/5yy/4-y/100y/400) mod 7在公式中d表示日期中的日数1,m表示月份数。y表示年数。注意1:在公式中有个与其它公式不同的地方&#xff…