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

本文涉及的产品
实时数仓Hologres,5000CU*H 100GB 3个月
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 这篇文章探讨了高斯过程作为解决小数据问题的工具,介绍了多元高斯分布的基础和其边缘及条件分布的性质。文章通过线性回归与维度诅咒的问题引出高斯过程,展示如何使用高斯过程克服参数爆炸的问题。作者通过数学公式和可视化解释了高斯过程的理论,并使用Python的GPy库展示了在一维和多维数据上的高斯过程回归应用。高斯过程在数据稀疏时提供了一种有效的方法,但计算成本限制了其在大数据集上的应用。

与其他算法相比,高斯过程不那么流行,但是如果你只有少量的数据,那么可以首先高斯过程。在这篇文章中,我将详细介绍高斯过程。并可视化和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 sample

 X = 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 kernel
 kernel = GPy.kern.RBF(input_dim=1, variance=1., lengthscale=1.)

 # Gaussian process regression using RBF kernel
 m = GPy.models.GPRegression(X, y, kernel)

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

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

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

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

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

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

 # dataset
 X = df[['age', 'sex', 'bmi', 'bp']].values
 y = df[['target']].values

 # set kernel
 kernel = GPy.kern.RBF(input_dim=4, variance=1.0, lengthscale=1.0, ARD = True)

 # create GPR model
 m = GPy.models.GPRegression(X, y, kernel = kernel)

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

总结

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

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

目录
相关文章
|
20天前
|
调度 开发者
核心概念解析:进程与线程的对比分析
在操作系统和计算机编程领域,进程和线程是两个基本而核心的概念。它们是程序执行和资源管理的基础,但它们之间存在显著的差异。本文将深入探讨进程与线程的区别,并分析它们在现代软件开发中的应用和重要性。
38 4
|
4月前
|
开发工具 Android开发 开发者
移动应用开发之旅:从概念到市场的全景解析
在数字化浪潮的推动下,移动应用成为了我们日常生活的一部分。本文将带你穿越移动应用开发的迷宫,探索那些让应用从一个简单的想法变成数百万用户手中宝贝的秘密。我们将一探究竟,了解移动操作系统的基础、开发工具的选择、设计原则的应用,以及市场策略的实施。无论你是开发者还是对移动应用充满好奇的旁观者,这篇文章都将为你揭示移动应用背后的魔法。
54 0
|
2月前
|
机器学习/深度学习 自然语言处理 JavaScript
信息论、机器学习的核心概念:熵、KL散度、JS散度和Renyi散度的深度解析及应用
在信息论、机器学习和统计学领域中,KL散度(Kullback-Leibler散度)是量化概率分布差异的关键概念。本文深入探讨了KL散度及其相关概念,包括Jensen-Shannon散度和Renyi散度。KL散度用于衡量两个概率分布之间的差异,而Jensen-Shannon散度则提供了一种对称的度量方式。Renyi散度通过可调参数α,提供了更灵活的散度度量。这些概念不仅在理论研究中至关重要,在实际应用中也广泛用于数据压缩、变分自编码器、强化学习等领域。通过分析电子商务中的数据漂移实例,展示了这些散度指标在捕捉数据分布变化方面的独特优势,为企业提供了数据驱动的决策支持。
124 2
信息论、机器学习的核心概念:熵、KL散度、JS散度和Renyi散度的深度解析及应用
|
1月前
|
算法 Java 数据库连接
Java连接池技术,从基础概念出发,解析了连接池的工作原理及其重要性
本文详细介绍了Java连接池技术,从基础概念出发,解析了连接池的工作原理及其重要性。连接池通过复用数据库连接,显著提升了应用的性能和稳定性。文章还展示了使用HikariCP连接池的示例代码,帮助读者更好地理解和应用这一技术。
56 1
|
1月前
|
消息中间件 存储 负载均衡
Apache Kafka核心概念解析:生产者、消费者与Broker
【10月更文挑战第24天】在数字化转型的大潮中,数据的实时处理能力成为了企业竞争力的重要组成部分。Apache Kafka 作为一款高性能的消息队列系统,在这一领域占据了重要地位。通过使用 Kafka,企业可以构建出高效的数据管道,实现数据的快速传输和处理。今天,我将从个人的角度出发,深入解析 Kafka 的三大核心组件——生产者、消费者与 Broker,希望能够帮助大家建立起对 Kafka 内部机制的基本理解。
79 2
|
2月前
|
人工智能 资源调度 数据可视化
【AI应用落地实战】智能文档处理本地部署——可视化文档解析前端TextIn ParseX实践
2024长沙·中国1024程序员节以“智能应用新生态”为主题,吸引了众多技术大咖。合合信息展示了“智能文档处理百宝箱”的三大工具:可视化文档解析前端TextIn ParseX、向量化acge-embedding模型和文档解析测评工具markdown_tester,助力智能文档处理与知识管理。
|
2月前
|
存储 NoSQL MongoDB
MongoDB 概念解析
10月更文挑战第12天
35 0
MongoDB 概念解析
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
Transformer图解以及相关的概念解析
前言 transformer是目前NLP甚至是整个深度学习领域不能不提到的框架,同时大部分LLM也是使用其进行训练生成模型,所以transformer几乎是目前每一个机器人开发者或者人工智能开发者不能越过的一个框架。接下来本文将从顶层往下去一步步掀开transformer的面纱。 transformer概述 Transformer模型来自论文Attention Is All You Need。 在论文中最初是为了提高机器翻译的效率,它使用了Self-Attention机制和Position Encoding去替代RNN。后来大家发现Self-Attention的效果很好,并且在其它的地
|
2月前
|
机器学习/深度学习 算法 C语言
【Python】Math--数学函数(详细附解析~)
【Python】Math--数学函数(详细附解析~)
|
2月前
|
JSON 关系型数据库 API
ElasticSearch 的概念解析与使用方式(二)
ElasticSearch 的概念解析与使用方式(二)
35 1

推荐镜像

更多
下一篇
DataWorks