高斯过程(Gaussian Processes)原理
高斯过程(Gaussian Processes, GP)是概率论和数理统计中随机过程的一种,是多元高斯分布的扩展,被应用于机器学习、信号处理等领域。博主在阅读了数篇文章和博客后才算是基本搞懂了GP的原理,特此记录。本文目前暂对高斯过程的公式推导和高斯过程回归原理及其优缺点进行讲解和阐述,后续根据个人学习进度再更新源码等内容。
一、一维高斯分布
我们从最简单最常见的一维高斯分布开始。
众所周知,一维高斯分布,又叫一维正态分布的概率密度函数为:
式中,表示均值,
表示方差,均值和方差唯一的决定了曲线的形状。当
为0,
为1时称为标准正态分布。
二、多维高斯分布
从一维高斯分布推广到多维高斯分布。
假设各维度之间相互独立,则其概率密度函数为:
其中, 分别是第一维、第二维...的均值,
分别是第一维、第二维...的方差。
使用向量和矩阵表示上式,令
则有
将公式(5)和公式(6)代入公式(2)可得
其中,是均值向量,
是协方差矩阵,由于我们假设了各维度之间是相互独立的,所以
是一个对角矩阵。当各维度变量相关时,上式的形式仍然一致,但此时协方差矩阵 不再是对角矩阵,只具备半正定和对称的性质。上式通常也简写为:
三、高斯过程
在概率论和统计学中,高斯过程(Gaussian process, GP)是观测值出现在一个连续域(例如时间和空间)的随机过程。在高斯过程中,连续输入空间中每一点都是与一个正态分布的随机变量相关联。此外,这些随机变量的每个有限集合都有一个多维正态分布,换句话说他们的任意有限线性组合是一个正态分布。高斯过程的分布是所有(无限多个)随机变量的联合分布,正因如此,它是连续域(例如时间和空间)上的函数分布。
下面通过一个例子来了解一下高斯过程。
假设我们在周一到周四每天的 7:00 测试了 4 次心率,如下图中 4 个点,可能的高斯分布如图所示(瘦高的那条)。这是一个一维高斯分布,只有每天 7: 00 的心率这个维度。
现在不仅在每天的 7: 00 测心率(横轴),在 8:00 时也进行测量(纵轴),这个时候变成两个维度(二维高斯分布),如下图所示。
更进一步,如果我们在每天的无数个时间点都进行测量,则变成了下图的情况。注意下图中把测量时间作为横轴,则每个颜色的一条线代表一个(无限个时间点的测量)无限维的采样。当对每次对无限维进行采样得到无限多个点时,其实可以理解为我们采样得到了一个函数。
当从函数的视角去看待采样,理解了每次采样无限维相当于采样一个函数之后,原本的概率密度函数就不再是点的分布 ,而变成了函数的分布。这个连续的无限维高斯分布就是高斯过程。用偏理论的话语表述就是,对于所有,
都服从多元高斯分布,则称
是一个高斯过程,表示为:
一个高斯过程被一个均值函数和协方差函数唯一地定义,并且一个高斯过程的有限维度的子集都服从一个多元高斯分布(为了方便理解,可以想象二元高斯分布两个维度各自都服从一个高斯分布)。
同时,高斯过程的协方差函数就是其核函数。核函数是高斯过程的核心,它决定了一个高斯过程的性质。核函数在高斯过程中起衡量任意两个点之间的“距离”的作用。不同的核函数有不同的衡量方法,得到的高斯过程的性质也不一样。最常用的一个核函数为高斯核函数,也就是径向基函数 RBF。其基本形式如下,其中和
是高斯核的超参数。
和
表示高斯过程连续域上的两个不同的时间点,
是一个二范式,简单点说就是表示
和
之间的距离。
一些常用的核函数如下:
四、高斯过程回归
高斯过程回归是使用高斯过程先验对数据进行回归分析的非参数模型(指系统的数学模型中非显式地包含可估参数)。简单来讲可以看作是根据先验+观测值推出后验的过程。
根据均值和协方差
,我们可以定义一个高斯过程,但是此时并没有任何的观测值,是一个先验。在获得了一组观测值之后,可以根据观测值修正这个高斯过程的均值函数和核函数。
设为训练集,训练数据独立同分布,分布未知,我们定义高斯过程回归模型(Gaussian Process Regression,以下简称GPR)的表达式为:
其中是独立同分布的噪声变量,服从
。
在GPR中,我们假设服从均值为0的GP:
设是测试集,独立同分布且和
的分布相同。
定义:
我们的任务就是计算posterior predictive distribution ,既然
满足GP,噪声
也满 足高斯分布,根据高斯分布性质可知,这个分布一定是高斯分布。
根据高斯过程的性质,有:
其中:
同样的,对噪声也有类似的结论:
因为两个独立多元高斯变量的和还是多元高斯变量,因此有:
根据多元高斯分布的性质(性质3),可以看出,满足多元高斯分布:
利用这个性质有:
上式的具体推导可以参考此链接。
这样就完成了预测。
五、高斯过程回归算法的优缺点
- 优点
- (采用 RBF 作为协方差函数)具有平滑性质,能够拟合非线性数据;
- 高斯过程回归天然支持得到模型关于预测的不确定性(置信区间),直接输出关于预测点值的概率分布;
- 通过最大化边缘似然这一简洁的方式,高斯过程回归可以在不需要交叉验证的情况下给出比较好的正则化效果。
- 缺点
- 高斯过程是一个非参数模型,每次的 inference 都需要对所有的数据点进行(矩阵求逆)。对于没有经过任何优化的高斯过程回归,n个样本点时间复杂度大概是
,空间复杂度是
,在数据量大的时候高斯过程变得 intractable;
- 高斯过程回归中,先验是一个高斯过程,likelihood 也是高斯的,因此得到的后验仍是高斯过程。在 likelihood 不服从高斯分布的问题中(如分类),需要对得到的后验进行 approximate 使其仍为高斯过程;
- RBF 是最常用的协方差函数,但在实际中通常需要根据问题和数据的性质选择恰当的协方差函数。
- 高斯过程是一个非参数模型,每次的 inference 都需要对所有的数据点进行(矩阵求逆)。对于没有经过任何优化的高斯过程回归,n个样本点时间复杂度大概是
六、参考链接
高斯过程 Gaussian Processes 原理、可视化及代码实现 -
高斯过程回归 - 简书
如何通俗易懂地介绍 Gaussian Process? - 知乎
[公式推导]用最简洁的方法证明多元正态分布的条件分布 - 司徒鲜生 - 博客园
高斯过程和高斯过程回归 - 知乎
高斯过程(Gaussian Processes)原理相关推荐
- python 高斯过程_高斯过程 Gaussian Processes 原理、可视化及代码实现
本文搬运于个人博客,欢迎点击这里查看原博文. 高斯过程 Gaussian Processes 是概率论和数理统计中随机过程的一种,是多元高斯分布的扩展,被应用于机器学习.信号处理等领域.本文对高斯过程 ...
- 1.7. 高斯过程(Gaussian Processes)
针对机器学习的高斯过程(Gaussian Processes for Machine Learning,即 GPML) 是一个通用的监督学习方法,主要被设计用来解决 回归 问题. 它也可以扩展为 概率 ...
- 高斯过程是什么?从视觉上理解机器学习中的高斯过程——Gaussian Process
--如何将一组小型构建块转变为解决回归问题的灵活的工具. 目录 Introduction 简介 Multivariate Gaussian distributions 多元高斯分布 Marginali ...
- 高斯过程 (Gaussian Process)
本博客转载自https://blog.csdn.net/u010016927/article/details/76856036 **针对机器学习的高斯过程(Gaussian Process for M ...
- 跟着Leo机器学习:sklearn之 Gaussian Processes
1.7. Gaussian Processes sklearn 框架 函数导图 1.7.1. Gaussian Process Regression (GPR) from sklearn.datase ...
- sklearn Gaussian Processes(高斯过程)
高斯过程回归(GPR) GPR示例 具有噪声级估计的 GPR和内核岭回归的比较 高斯过程分类(GPC) GPC示例 GPC的概率预测 GPC在XOR数据集上的图示 虹膜数据集上的高斯过程分类(GPC) ...
- 论文笔记Deep Gaussian Processes深度高斯过程
0.摘要 在本文中,我们介绍了深度高斯过程 (GP) 模型. 深度 GP 是基于高斯过程映射的深度信念网络. 数据被建模为多元 GP 的输出. 然后,该高斯过程的输入由另一个 GP 管理. 单层模型等 ...
- 论文笔记 Dependent Gaussian Processes 相关高斯过程
0.摘要 高斯过程通常根据它们的协方差函数进行参数化. 然而,这使得处理多个输出变得困难,因为确保协方差矩阵是正定的是有问题的. 另一种表述是将高斯过程视为与平滑内核卷积的白噪声源,并改为对内核进行参 ...
- 论文笔记 Inference in Deep Gaussian Processes using Stochastic Gradient Hamiltonia使用随机梯度哈密顿量蒙特卡罗推理深度高斯过程
使用随机梯度哈密顿量蒙特卡罗推理深度高斯过程 0.摘要 深度高斯过程 (DGP) 是高斯过程的层次概括,它将经过良好校准的不确定性估计与多层模型的高度灵活性相结合. 这些模型的最大挑战之一是精确推断是 ...
最新文章
- 让你提升命令行效率的 Bash 快捷键
- 编写五子棋的完整python代码_python实现五子棋小程序
- python2默认编码_解决Python2.x编码之殇
- Java和pathion_Spring配置中的classpath:与classpath*:的区别
- 2021年快手大健康行业数据价值报告
- 工作中遇到的问题--使用注解进行增加删除修改的验证
- 程序猿应该记住的几条基本规则
- LumaQQ.NET,基于LumaQQ的.NET开源QQ开发包
- 管理新语:员工随口回答,并不是有意忽悠,而是都这样
- MapGIS云认证失败
- linux邮件报警命令,linux 邮件报警,监控内存cup
- Java导入导出Excel控件简介
- 使用tornado的异步非阻塞
- Win10怎么关闭开机启动项
- messagebox 确认 取消
- CAN总线基础知识点
- 基于高德地图实现的公交线路查询功能
- wrf模式计算机配置,用WRF模型进行气象模拟入门(2)——WPS的配置与使用
- DedeCMS找后台目录漏洞
- jvm-sandbox实战之编写简单案例
热门文章
- mysql 怎么用SQL语句将老身份证号15位补位到新身份证号18位
- BI数据库管理RPD配置
- Pycharm 错误代码 Process finished with exit code 0
- Rendering Gooey Materials With Multiple Layers
- 吸金500亿后的O2O,到底该如何变现?
- 3D Slicer——配准篇(基于Elastix形变配准)详细教程
- Spring Gateway locator 自动路由兼容context-path
- 单片机shell命令_单片机的DB指令使用
- 安装spark,Could not locate executable null\bin\winutils.exe in the Hadoop binaries报错
- 解决 golang json 中 invalid character ‘\r‘ in string literal 报错