深入解析高斯过程:数学理论、重要概念和直观可视化全解

与其他算法相比,高斯过程不那么流行,但是如果你只有少量的数据,那么可以首先高斯过程。在这篇文章中,我将详细介绍高斯过程。并可视化和Python实现来解释高斯过程的数学理论。

多元高斯分布

多元高斯分布是理解高斯过程所必须的概念之一。让我们快速回顾一下。如果你已经熟悉多元高斯分布,可以跳过这一部分。

多元高斯分布是具有两个以上维度的高斯分布的联合概率。多元高斯分布具有以下的概率密度函数。

x 是具有 D × 1 维度的输入数据,μ 是具有与 x 相同维度的均值向量,Σ 是具有 D × D 维度的协方差矩阵。

多元高斯分布具有以下重要特性:

  1. 多元高斯分布的边缘分布仍然遵循高斯分布。
  2. 多元高斯分布的条件分布仍然遵循高斯分布。

让我们通过可视化来检验这些概念。假设 D 维数据遵循高斯分布。对于特性1,当我们将输入数据维度 D 分为前 L 维和其余的 D-L=M 维时,我们可以如下描述高斯分布。

那么,当我们对x₁的分布进行边缘化时,x₁的概率分布可以写成:

根据公式(1),在进行边缘化时,我们可以取消其他变量。上图表展示了二维高斯分布的情况。边缘化分布映射到每个轴上;其形式是高斯分布。当我们根据一个轴切割多元高斯分布时,截面的分布仍然遵循高斯分布。

对于特征 2,我们使用相同的 D 维多元高斯分布和两部分划分的输入数据 x₁ 和 x₂。多元高斯分布的条件概率可以写为:

上图显示了二维高斯分布(等高线)和条件高斯分布(虚线)。在每种条件下,高斯分布的形状是不同的。

线性回归与维度诅咒

在深入研究高斯过程之前,首先需要说明线性回归模型的一个主要缺点。高斯过程与这一概念密切相关,并能克服这个缺点。

让我们回顾一下线性回归模型。线性回归模型可以使用基函数 𝝓(x) 灵活表达数据。

对于基函数,我们可以使用非线性函数,例如多项式项或余弦函数。因此通过将非线性基函数应用于 x,线性回归模型可以把握非线性关系。例如下入显示了使用径向基函数时的一个示例情况。

它能够把握复杂的数据结构。但我们仍然称之为线性回归模型,因为从参数 w 的角度看,这个方程仍然满足线性关系。我们也可以像多元线性回归一样推导参数。以下方程式是线性回归模型的矩阵和线性代数形式。我们假设有 N 个数据点和 p+1 个参数。

简化后

在将基函数应用于每个输入数据后,矩阵 𝚽 的值变成常数。这不是很像多元线性回归吗?实际上,参数的解析推导是相同的。

这里有一个陷阱,即线性回归模型在公式(4)中假设一个独立变量。因此当输入数据维度的数量增加时,参数的数量会呈指数级增长。如果我们增加基函数的数量,可以获得模型的灵活性,但计算量会不切实际地增加。这个问题被称为维度诅咒。有没有方法可以在不增加计算量的情况下提高模型的灵活性呢?可以应用高斯过程定理。下一节将介绍什么是高斯过程。

高斯过程的数学理论

上面已经看到,当参数数量增加时,线性回归模型存在维度诅咒问题。解决这个问题的方法是对参数进行期望处理,并创建一个不需要计算参数的情况。这是什么意思呢?继续上面的线性回归模型,公式如下。

现在我们假设参数 w 遵循高斯分布,输出 y 也将遵循高斯分布,因为矩阵 𝚽 只是一个常数值矩阵。我们假设参数遵循以下高斯分布:

可以计算出输出分布的参数如下:

y的分布如下:

可以通过取其期望来取消参数的计算。因此即使有无限多的参数,它们也不会影响计算。x 和 y 之间的这种关系遵循高斯过程。高斯过程的定义是:

高斯过程是具有无限多参数的多元高斯分布。公式(7)指的是根据给定数据从高斯过程中得到的边缘高斯分布。它源于边缘元高斯分布仍然遵循高斯分布的特性。通过充分利用高斯过程,在考虑无限维度参数的同时构建模型。

这里还有一个问题,如何选择矩阵 𝚽?当关注上述公式中的协方差矩阵部分并将其设置为 K 时,每个元素可以写成:

根据公式(9),协方差矩阵的每个元素都是 𝟇(xᵢ) 和 𝟇(xⱼ) 的内积的常数倍。由于内积类似于余弦相似性,当 xᵢ 和 xⱼ 相似时,公式(9)的值会变大。

为了满足协方差矩阵对称、正定且具有逆矩阵的特性,需要适当选择 𝟇(x)。为了实现这些特性,可以使用核函数来表示 𝟇(x)。

使用核函数的一个好处是,可以通过核函数获取 𝟇(x) 的内积,而无需显式计算 𝟇(x)。这种技术被称为核技巧。下面我们总结一些最常用的核函数:

高斯核

线性核

周期核(又称exp - sin平方核)

上面的可视化展示了使用每个核函数对一维高斯过程的采样。可以看到相应的核函数的特征。

最后让我们回顾一下高斯过程。使用核函数,可以重新写定义为:

高斯过程回归

最后我们将高斯过程应用于回归。

1、如何对高斯过程模型进行拟合和推理

假设有N个输入数据x和对应的输出数据y。

为简单起见我们对输入数据x应用归一化进行预处理,这意味着x的平均值为0。如果x和y的关系如下,f服从高斯过程。

所以输出y遵循以下多元高斯分布。

在拟合过程中,只需要通过核函数计算协方差矩阵,输出 y 分布的参数被确定为恰好为1。除了核函数的超参数外,高斯过程没有训练阶段。

在推理过程中,由于高斯过程没有像线性回归模型那样的权重参数,所以需要重新拟合(包括新数据)。但是可以利用多元高斯分布的特性来节省计算量。

设m个新数据点。

新数据点的分布也遵循高斯分布,因此我们可以将其描述为:

还记得最前面的公式(2),条件多元高斯分布的参数。

将此公式代入式(11),得到的参数为:

这是高斯过程回归模型的更新公式。当我们想要从中采样时,我们使用由Cholesky分解导出的下三角矩阵。

以上就是所有高斯过程的数学推导。但是在实际使用时不需要从头开始实现高斯过程回归,因为Python中已经有很好的库。

在将介绍如何使用Gpy库实现高斯过程。

2、高斯过程模型用于一维数据

我们将使用一个由带有高斯噪声的正弦函数生成的示例数据:

 # Generate the randomized sampleX = np.linspace(start=0, stop=10, num=100).reshape(-1, 1)y = np.squeeze(X * np.sin(X)) + np.random.randn(X.shape[0])y = y.reshape(-1, 1)

我们使用 RBF 核,因为它非常灵活且易于使用。我们使用GPy,只需几行代码就可以声明 RBF 核和高斯过程回归模型。

 # RBF kernelkernel = GPy.kern.RBF(input_dim=1, variance=1., lengthscale=1.)# Gaussian process regression using RBF kernelm = GPy.models.GPRegression(X, y, kernel)

上面的x点是输入数据,蓝色曲线表示该点的高斯过程回归模型的预期值,浅蓝色阴影区域表示 95% 的置信区间。

数据点较多的区域具有较窄的置信区间,而数据点较少的区域则具有较宽的区间。

3、多维数据的高斯过程模型

我们将使用scikit-learn中的糖尿病数据集。

 # Load the diabetes dataset and create a dataframediabetes = datasets.load_diabetes()df = pd.DataFrame(diabetes.data, columns=diabetes.feature_names)

这个数据集已经经过了预处理(归一化),所以可以直接实现高斯过程回归模型。

 # datasetX = df[['age', 'sex', 'bmi', 'bp']].valuesy = df[['target']].values# set kernelkernel = GPy.kern.RBF(input_dim=4, variance=1.0, lengthscale=1.0, ARD = True)# create GPR modelm = GPy.models.GPRegression(X, y, kernel = kernel)

正如你所看到的,还有很大的改进空间。比如说更改内核的选择或超参数优化,或者收集更多的数据。

总结

本文讨论了高斯过程的数学理论和实际实现。当拥有少量数据时,这种技术是非常有帮助的。但是由于计算量取决于数据的数量,它不适合大数据。

https://avoid.overfit.cn/post/db2546da62d249fa9265f26e9f25bb87

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

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

相关文章

flink使用StatementSet降低资源浪费

背景 项目中有很多ods层(mysql 通过cannal)kafka,需要对这些ods kakfa做一些etl操作后写入下一层的kafka(dwd层)。 一开始采用的是executeSql方式来执行每个ods→dwd层操作,即类似: def main(…

观察者模式在金融业务中的应用及其框架实现

引言 观察者模式(Observer Pattern)是一种行为设计模式,它定义了一种一对多的依赖关系,使得多个观察者对象同时监听某一个主题对象。当这个主题对象发生变化时,会通知所有观察者对象,使它们能够自动更新。…

MISRA C

介绍 MISRA C 是由汽车产业软件可靠性协会(Motor Industry Software Reliability Association)提出的 C 语言编程标准,可提高嵌入式系统软件的安全性和可靠性。这些指南由汽车制造商、零部件供应商和工程咨询公司合作的汽车工业软件可靠性协…

基于STM32的智能农业环境监控系统

目录 引言环境准备智能农业环境监控系统基础代码实现:实现智能农业环境监控系统 4.1 数据采集模块4.2 数据处理与分析4.3 控制系统实现4.4 用户界面与数据可视化应用场景:农业环境管理与优化问题解决方案与优化收尾与总结 1. 引言 智能农业环境监控系…

ComfyUI高清放大的四种方式(工作流附件在最后)

方式一:Latent放大工作流 1.工作流截图 方式二:ESRGAN(传统模型)放大工作流 方式三:算法放大(后期处理)工作流 方式四:Ultimate SD Upscale工作流 这个方式的优势是对于显存底的用…

istitle()方法——判断首字母是否大写其他字母小写

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 语法参考 istitle()方法用于判断字符串中所有的单词首字母是否为大写而其他字母为小写。istitle()方法的语法格式如下: str.istitle() …

2024深圳入户新规出炉!快速了解你的入户“绿色通道”

​朋友们,听说你们都在琢磨深圳户口这事儿?没买房的也想来凑凑热闹,其实,深圳户口不仅仅是为了买房,更多的是为了孩子教育、住房申请、医疗福利等等。各位想在深圳这片热土上大展拳脚的朋友们,现在好消息来…

Spring 动态增强逻辑执行分析

1、假如UserService中存在被增强的public 普通方法,那么spring ioc时就会创建对应的代理对象放置到容器中; 2、那么Controller中注入的userService就是代理对象; Service public class UserService {Transactionalpublic void f2(String us…

python open函数中文乱码怎么解决

首先在D盘下新建一个html文档,接着在里面输入含有中文的Html字符,使用中文格式对读取的字符进行解码,再用utf-8的模式对字符进行编码,然后就能正确输出中文字符。 代码如下: # -*- coding: UTF-8 -*- file1 open(&quo…

5G NR PUSCH物理层过程

物理层过程 加扰 假设要在单个码字q上传输的bit块为 b ( q ) ( 0 ) , . . . , b ( q ) ( M b i t ( q ) − 1 ) b^{(q)}(0),...,b^{(q)}(M_{bit}^{(q)} - 1) b(q)(0),...,b(q)(Mbit(q)​−1) ,其中 M b i t ( q ) M_{bit}^{(q)} Mbit(q)​是总比特数,加…

架构师篇-9、从事件风暴到微服务设计的落地过程

用户付款功能第二个版本的设计实现 单一职责原则(SRP) 软件系统中的每个元素只完成自己职责内的事,将其他的事交给别人去做“职责”通常人理解为一个事情,与该事情相关的事都是它的责任 一个职责是软件变化的一个原因 第二次需求…

设计模式-状态模式和策略模式

1.状态模式 1.1定义 当一个对象的内在状态改变时允许根据当前状态作出不同的行为; 1.2 适用场景 (1)一个对象的行为取决于它的状态,并且它必须在运行时根据状态来决定其行为. (2)代码中包含了大量的与状态有关的条件语句,例如:一个操作含有庞大的多分值语句(if…

pytest测试框架pytest-random-order插件随机执行用例顺序

Pytest提供了丰富的插件来扩展其功能,本章介绍下pytest-random-order插件,随机设置pytest测试用例的运行顺序,并对随机性进行一些控制。 官方文档: https://pytest-cov.readthedocs.io/en/latest/index.html 适配版本说明&#x…

Crontab命令详解:轻松驾驭Linux定时任务,提升系统效率

​🌈 个人主页:danci_ 🔥 系列专栏:《设计模式》《MYSQL》 💪🏻 制定明确可量化的目标,坚持默默的做事。 引言: crond是Linux系统中用来定期执行命令或指定程序任务的一种服务或软件…

AI agent是什么,什么技术栈

AI agent,也称为会话代理或聊天机器人, 是一种通过文本或语音模拟人类对话的计算机程序。 它们旨在以自然且引人入胜的方式理解和响应用户输入。 AI agent 被广泛用于各种应用中,包括客户服务、营销、 销售和教育。 有两种主要类型的 AI agen…

Qt开发报错:Q_INTERFACES Error: Undefined interface

1、背景 VS2019qt5.12.10 从svn拉下来的项目,结果报错: Q_INTERFACES Error: Undefined interface 之前在VS的扩展中在线安装了qt插件, 安装了一半,比较慢,直接强行退出了。。 后来安装了qt官网的插件。。。。 2、报…

nginx架构学习

前言 这篇文章主要记录下对nginx架构的学习记录。 架构设计 优秀的模块化设计 高度模块化的设计是Nginx的架构基础。在Nginx中,除了少量的核心代码,其他一切皆 为模块。 在这5种模块中,配置模块与核心模块都是与Nginx框架密切相关的&…

Pharmacy Management System v1.0 文件上传漏洞(CVE-2022-30887)

前言 CVE-2022-30887 是一个存在于 Pharmacy Management System v1.0 中的远程代码执行(RCE)漏洞。这个漏洞存在于 /php_action/editProductImage.php 组件中。攻击者可以通过上传一个精心制作的图像文件来执行任意代码。 漏洞详细信息 漏洞描述: Pha…

第二十三课,再识字符串

前言,再识字符串 字符串是我们学习python编程第一眼见到的东西,一行print(“hello world”)可谓是太亲切了,但在此之前我们对字符串的认知也仅局限于如何用单引号、双引号、三引号去定义字符串并打印,今天开始我们就更深入地去理…

【大数据】StarRocks的系统架构

StarRocks 架构简洁,整个系统的核心只有 FE(Frontend)、BE (Backend) 或 CN (Compute Node) 两类进程,方便部署与维护,节点可以在线水平扩展,元数据和业务数据都有副本机制,确保整个系统无单点。…