高斯过程学习笔记

news2024/11/13 17:52:36

目录

基础知识

例子


推荐

A Visual Exploration of Gaussian Processes (distill.pub)

AB - Introduction to Gaussian Processes - Part I (bridg.land)

基础知识



高斯过程回归(Gaussian Process Regression) - 知乎 (zhihu.com)

高斯过程(Gaussian Process, GP)是随机过程之一,是一系列符合正态分布的随机变量在一指数集(index set)内的集合

高斯过程回归(Gaussian Process Regression, GPR)是使用高斯过程(Gaussian Process, GP)先验对数据进行回归分析的非参数模型(non-parameteric model)。


协方差(Covariance)在概率论和统计学中用于衡量两个变量的总体误差。
而方差是协方差的一种特殊情况,即当两个变量是相同的情况。
RBF核,若两个特征在指数上(即维度上)越相邻,它们之间的协方差系数就越高,这两个特征特征就越相关;若两个特征特征相隔越远,协方差系数越小,越不相关,所以RBF核可以用来模拟连续变化输出序列。


 

A Visual Exploration of Gaussian Processes (distill.pub)

回归是指找到一个函数尽可能好的接近一组数据点。

高斯过程是一个概率过程方法,对预测函数提供置信度。

高斯过程并不局限于回归 — 它们还可以扩展到分类和聚类任务

边缘化可以理解为在高斯分布的一个维度上做累加,这也符合边缘分布的一般定义。条件作用也有个很好的几何表达——我们可以把它想象成在多元分布上切下一刀,从而获得一个维数更少的高斯分布。

贝叶斯推断的核心思想就是:在获得新的信息以后,更新当前的假设。

kimi:

高斯过程(Gaussian Process)是一种用于非参数贝叶斯推断的机器学习算法。在高斯过程中,"先验"(Prior)是指对从高斯过程生成的函数的预先期望或假设。

先验可以看作是我们关于问题的一些初始知识或假设,它指定了函数值在整个函数空间的分布情况。在高斯过程中,这个分布是一个多元高斯分布,其均值和协方差通过一些指定的函数来定义。

1.均值函数:通常,将均值函数设定为0(或其他常数),这意味着在没有任何观测的情况下,我们假设函数的所有可能值的期望是0。

2.协方差函数(或者说核函数):定义了数据点之间的相似度。给定两个输入,协方差函数的值体现了对应的两个函数值的相似程度。通常选择的核函数使得输入相近的点具有较高的协方差,而相距较远的点具有较小的协方差。

当我们收集到一些观测数据后,我们需要对先验进行更新以获得后验分布。这就是通过贝叶斯规则来实现的,后验分布代表了在给定观测数据情况下,函数的预期分布。在高斯过程中,这个分布是以观测数据为条件的高斯分布。

高斯过程的先验表示了我们对从高斯过程产生的随机函数的预先期望或假设,这是在收集到任何实际观测数据之前就设立的假设。后续的学习过程就是不断地调整和更新这些假设,使得模型的预测更加准确。

coze:

高斯过程的先验是指在没有接收到任何观察数据时,对函数空间中可能的值进行的假设或预测。这通常包括两个部分:一个均值函数(mean function)和一个协方差函数(covariance function),这两者共同定义了函数在所有可能的输入集合中可能的输出值的分布。

  1. 均值函数:这个函数通常被定义为0,或者一些基于实际问题的初始预期值。也就是说,如果我们完全没有关于接收到的输入的任何有用信息,那么均值函数给出的就是我们对函数输出的预测。

  2. 协方差函数:也被称为核函数(Kernel function),它定义了输入值之间的相互依赖关系。基于协方差函数,我们可以知道对于一个给定输入以及其相对位置,期望输出值可能的变化性越大还是越小。

1.7. 高斯过程 - sklearn (scikitlearn.com.cn)

高斯过程 (GP) 是一种常用的监督学习方法,旨在解决回归问题概率分类问题

高斯过程模型的优点如下:

* 预测内插了观察结果(至少对于正则核)。

* 预测结果是概率形式的(高斯形式的)。这样的话,人们可以计算得到经验置信区间并且据此来判断是否需要修改(在线拟合,自适应)在一些区域的预测值。

* 通用性: 可以指定不同的:内核(kernels)。虽然该函数提供了常用的内核,但是也可以指定自定义内核。

高斯过程模型的缺点包括: * 它们不稀疏,例如,模型通常使用整个样本/特征信息来进行预测。 * 高维空间模型会失效,高维也就是指特征的数量超过几十个。

kimi.ai描述:

在统计学和概率论中,似然函数是一种关于统计模型中的参数的函数,表示模型参数中的似然性。似然函数是概率密度函数(probability density function, PDF)或概率质量函数(probability mass function, PMF)的泛化,用于参数估计和模型选择。

似然函数的定义

似然函数 \( L \) 通常表示为 \( L(\theta | x) \),其中:
- \( \theta \) 是模型参数,
- \( x \) 是观测数据。

似然函数的应用

1. **参数估计**:似然函数用于点估计,如最大似然估计(MLE)。在最大似然估计中,选择参数 \( \theta \) 的值使得观测数据的似然性最大。

2. **模型选择**:似然比检验(Likelihood Ratio Test, LRT)用于比较两个模型的拟合优度,通过比较它们的似然函数值来决定哪个模型更适合数据。

3. **贝叶斯统计**:在贝叶斯框架下,似然函数与先验概率结合,通过贝叶斯定理计算后验概率。

与概率的区别

似然函数与概率函数不同,主要区别在于:
- 概率函数 \( P(x | \theta) \) 描述在给定参数 \( \theta \) 下,观测 \( x \) 发生的概率。它是随机事件 \( x \) 的概率度量。
- 似然函数 \( L(\theta | x) \) 是在观测 \( x \) 已知的情况下,参数 \( \theta \) 的函数。它不是概率,而是一种衡量参数 \( \theta \) 相对于观测数据 \( x \) 的“合适度”。

最大似然估计(MLE)

最大似然估计是一种常用的参数估计方法,它寻找能够使观测数据出现概率最大的参数值。数学上,最大似然估计可以通过求解以下优化问题得到:
\[
\hat{\theta}_{MLE} = \arg\max_{\theta} L(\theta | x)
\]

其中,\( \hat{\theta}_{MLE} \) 是最大似然估计值。

似然函数是统计学中的核心概念之一,它为基于观测数据推断模型参数提供了一种方法。

【理解】似然函数-CSDN博客



正态分布(高斯分布)学习笔记 - 知乎 (zhihu.com)
高斯过程样本与一般机器学习的样本区别在于,高斯过程中样本各特征之间存在相关关系,这种相关关系是通过协方差矩阵来体现的。
比如在一些时间序列模型里面,各个变量输出的时间序列在时间前后都会体现出一种相关性(比如平滑过渡等),这种模型输出就很适合使用高斯过程来模拟。
各个维度特征之间的协方差可以通过高斯过程核(kernel)来模拟。

核函数&径向基核函数 (Radial Basis Function)--RBF-CSDN博客
原来在二维空间中一个线性不可分的问题,映射到四维空间后,变成了线性可分的!因此这也形成了我们最初想解决线性不可分问题的基本思路——向高维空间转化,使其变得线性可分。而转化最关键的部分就在于找到x到y的映射方法。
这样一种函数K(w,x),接受低维空间的输入值,却能算出高维空间的内积值<w’,x’>。它被称作核函数(核,kernel),而且还不止一个,事实上,只要是满足了Mercer条件的函数(后面会具体写出),都可以作为核函数。
核函数的基本作用就是接受两个低维空间里的向量,能够计算出经过某个变换后在高维空间里的向量内积值。
径向基函数 (Radial Basis Function 简称 RBF), 就是某种沿径向对称的标量函数。 通常定义为空间中任一点x到某
一中心xc之间欧氏距离的单调函数 ,可记作 k(||x-xc||), 其作用往往是局部的 , 即当x远离xc时函数取值很小。
最常用的径向基函数是高斯核函数 ,形式为 k(||x-xc||)=exp{- ||x-xc||^2/(2*σ)^2) } 其中x_c为核函数中心,σ为函数的宽度参数 , 控制了函数的径向作用范围。如果x和x_c很相近那么核函数值为1,如果x和x_c相差很大那么核函数值约等于0。由于这个函数类似于高斯分布,因此称为高斯核函数,也叫做径向基函数(Radial Basis Function 简称RBF)。它能够把原始特征映射到无穷维。它能够把原始特征映射到无穷维。
高斯核函数能够比较x和z的相似度,并映射到0到1,回想logistic回归,sigmoid函数可以,因此还有sigmoid核函数等等。

高斯过程回归(Gaussian process regression)原理详解及python代码实战-CSDN博客

点积、叉积、内积、外积【汇总对比】-CSDN博客
空间中两个向量的内积是一个标量,通常用尖括号表示,在欧氏向量空间中内积是笛卡尔坐标的点积或标量积。
两个数字序列的相应条目的乘积之和。在欧几里得几何中,两个向量的笛卡尔坐标的点积被广泛使用。它通常被称为欧几里得空间的内积(或很少称为投影积),是内积的一种特殊情况,尽管它不是可以在欧几里得空间上定义的唯一内积。
内积,点乘的几何意义是可以用来表征或计算两个向量之间的夹角,以及在b向量在a向量方向上的投影。
叉积或向量积(有时是有向面积积,以强调其几何意义)是在三维有向欧几里得向量空间,并用符号x表示. 给定两个线性独立的向量 a和b,叉积a × b(读作“a cross b”)是一个垂直于a和b的向量,因此垂直于包含它们的平面。
外积,外积的运算结果是一个张量而不是一个标量。

AB - Introduction to Gaussian Processes - Part I (bridg.land)

高斯过程提供了丰富的建模能力和不确定性估计。

机器学习中的大多数现代技术倾向于通过参数化函数然后对这些参数进行建模(例如线性回归中的权重)来避免这种情况。然而,GP 是直接对函数进行建模的非参数模型。这带来了一个非常重要的好处:我们不仅可以对任何黑盒函数进行建模,还可以对我们的不确定性进行建模。

GP 背后的关键思想是可以使用无限维多元高斯分布对函数进行建模。换句话说,输入空间中的每个点都与一个随机变量相关联,并且这些变量的联合分布被建模为多元高斯分布。

详细对比深度神经网络和高斯过程_高斯混合模型和深度模型区别-CSDN博客

例子

高斯过程--GPyTorch回归教程-CSDN博客

Implementing a custom kernel in GPyTorch — GPyTorch 0.1.dev97+gf73fa7d documentation

Q:这里面是如何表示高斯噪声的,为什么可以这么表示?

# True function is sin(2*pi*x) with Gaussian noise train_y = torch.sin(train_x * (2 * math.pi)) + torch.randn(train_x.size()) * math.sqrt(0.04)

A:train_y 表示的是正弦函数 sin⁡(2𝜋𝑥)的值,叠加上了高斯噪声(也称为正态噪声)。高斯噪声是一种具有正态分布(高斯分布)概率密度函数的随机变量,其密度函数呈对称的钟形曲线形状。

  1. torch.randn(train_x.size()):这个函数生成一个与 train_x 形状相同的张量,其元素是从标准正态分布(均值为0,方差为1)中随机抽取的值。torch.randn 是 PyTorch 中用于生成服从标准正态分布的随机数的函数。

  2. math.sqrt(0.04):这个值是高斯噪声的标准差,它是噪声方差的平方根。在这个例子中,方差是 0.04,所以标准差是 0.2。

  3. *:乘法操作符用于将每个从标准正态分布中抽取的随机数乘以噪声的标准差,从而得到具有指定方差的高斯噪声。

因此,torch.randn(train_x.size()) * math.sqrt(0.04) 表示的是生成一个与 train_x 形状相同的张量,其元素是从均值为0、方差为0.04的正态分布中抽取的随机数。这样得到的噪声被添加到正弦函数的值上,从而模拟实际观测数据中可能存在的随机波动或噪声。

这种噪声模型在实际应用中非常常见,因为它可以模拟许多自然和人造系统中的随机波动。例如,在测量数据时,测量设备可能会引入随机误差;在金融模型中,市场波动可以被视为具有正态分布的随机过程。通过在模型中加入高斯噪声,可以更准确地模拟这些现象,并使模型更能适应现实世界的数据。

  1. 所有参数梯度置零
  2. 调用模型,计算损失loss
  3. loss反向传播填充梯度
  4. 优化器优化
  • train()用于优化模型超参数
  • eval()用于通过模型后验做预测

完整代码:

import math
import torch
import gpytorch
from matplotlib import pyplot as plt

# Training data is 100 points in [0,1] inclusive regularly spaced
train_x = torch.linspace(0, 1, 100)
# True function is sin(2*pi*x) with Gaussian noise
train_y = torch.sin(train_x * (2 * math.pi)) + torch.randn(train_x.size()) * math.sqrt(0.04)

# We will use the simplest form of GP model, exact inference
class ExactGPModel(gpytorch.models.ExactGP):
    def __init__(self, train_x, train_y, likelihood):
        super(ExactGPModel, self).__init__(train_x, train_y, likelihood)
        self.mean_module = gpytorch.means.ConstantMean()
        self.covar_module = gpytorch.kernels.ScaleKernel(gpytorch.kernels.RBFKernel())

    def forward(self, x):
        mean_x = self.mean_module(x)
        covar_x = self.covar_module(x)
        return gpytorch.distributions.MultivariateNormal(mean_x, covar_x)

# initialize likelihood and model
likelihood = gpytorch.likelihoods.GaussianLikelihood()
model = ExactGPModel(train_x, train_y, likelihood)

# this is for running the notebook in our testing framework
import os
smoke_test = ('CI' in os.environ)
training_iter = 2 if smoke_test else 50


# Find optimal model hyperparameters
model.train()
likelihood.train()

# Use the adam optimizer
optimizer = torch.optim.Adam(model.parameters(), lr=0.1)  # Includes GaussianLikelihood parameters

# "Loss" for GPs - the marginal log likelihood
mll = gpytorch.mlls.ExactMarginalLogLikelihood(likelihood, model)

for i in range(training_iter):
    # Zero gradients from previous iteration
    optimizer.zero_grad()
    # Output from model
    output = model(train_x)
    # Calc loss and backprop gradients
    loss = -mll(output, train_y)
    loss.backward()
    print('Iter %d/%d - Loss: %.3f   lengthscale: %.3f   noise: %.3f' % (
        i + 1, training_iter, loss.item(),
        model.covar_module.base_kernel.lengthscale.item(),
        model.likelihood.noise.item()
    ))
    optimizer.step()


# f_preds = model(test_x)
# y_preds = likelihood(model(test_x))
#
# f_mean = f_preds.mean
# f_var = f_preds.variance
# f_covar = f_preds.covariance_matrix
# f_samples = f_preds.sample(sample_shape=torch.Size(1000,))

# Get into evaluation (predictive posterior) mode
model.eval()
likelihood.eval()

# Test points are regularly spaced along [0,1]
# Make predictions by feeding model through likelihood
with torch.no_grad(), gpytorch.settings.fast_pred_var():
    test_x = torch.linspace(0, 1, 51)
    observed_pred = likelihood(model(test_x))


with torch.no_grad():
    # Initialize plot
    f, ax = plt.subplots(1, 1, figsize=(4, 3))

    # Get upper and lower confidence bounds
    lower, upper = observed_pred.confidence_region()
    # Plot training data as black stars
    ax.plot(train_x.numpy(), train_y.numpy(), 'k*')
    # Plot predictive means as blue line
    ax.plot(test_x.numpy(), observed_pred.mean.numpy(), 'b')
    # Shade between the lower and upper confidence bounds
    ax.fill_between(test_x.numpy(), lower.numpy(), upper.numpy(), alpha=0.5)
    ax.set_ylim([-3, 3])
    ax.legend(['Observed Data', 'Mean', 'Confidence'])
    plt.show()

AB - Introduction to Gaussian Processes - Part I (bridg.land)

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

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

相关文章

VS2022上通过C++绘图库ROOT库绘制一个3D曲面图

ROOT库提供了强大的交互式图形功能。通过使用ROOT库的TCanvas和TApplication类&#xff0c;可以创建一个交互式的图形窗口&#xff0c;可以对图形进行缩放、平移、旋转等操作&#xff0c;并且可以通过鼠标和键盘与图形进行交互&#xff0c;这点实在是太厉害了&#xff0c;也就是…

贪心算法4(c++)

过河的最短时间 题目描述 输入 在漆黑的夜里&#xff0c;N位旅行者来到了一座狭窄而且没有护栏的桥边。如果不借助手电筒的话&#xff0c;大家是无论如何也不敢过桥去的。不幸的是&#xff0c;N个人一共只带了一只手电筒&#xff0c;而桥窄得只够让两个人同时过&#xff0c;如果…

Java进阶学习笔记21——泛型概念、泛型类、泛型接口

泛型&#xff1a; 定义类、接口、方法的时候&#xff0c;同时声明了一个或者多个类型变量&#xff08;如: <E>&#xff09;,称之为泛型类、泛型接口、泛型方法&#xff0c;我们统称之为泛型。 说明这是一个泛型类。 如果不使用泛型&#xff0c;我们可以往ArrayList中传…

【多线程开发 2】从代码到实战TransmittableThreadLocal

【多线程开发 2】从代码到实战TransmittableThreadLocal 本文将从以下几个点讲解TransmittableThreadLocal(为了方便写以下简称ttl)&#xff1a; 前身 是什么&#xff1f; 可以用来做什么&#xff1f; 源码原理 实战 前身 ThreadLocal 要了解ttl就要先了解Java自带的类…

【C语言】指针作为参数(传值调用vs传址调用)

前言 在前面讲了那些指针相关的内容后&#xff0c;是时候探讨一下指针有什么作用了。 在C语言中&#xff0c;指针有多种各不相同的应用&#xff0c;在本篇文章中&#xff0c;我们探讨一下指针作为函数参数的作用&#xff08;对比传值与传址两种不同函数调用方式&#xff09;。…

解决git克隆项目出现fatal无法访问git clone https://github.com/lvgl/lvgl.git

Windows 11系统 报错 $ git clone https://github.com/lvgl/lvgl.git Cloning into lvgl... fatal: unable to access https://github.com/lvgl/lvgl.git/: Failed to connect to github.com port 443 after 21141 ms: Couldnt connect to server 解决方法 git运行这两段代码…

008-Linux后台进程管理(作业控制:、jobs、fg、bg、ctrl + z、nohup)

文章目录 前言 1、& 2、ctrl z 3、jobs 4、fg&#xff1a;将后台进程调到前台执行 5、bg&#xff1a;将一个暂停的后台进程变为执行 6、&和nohup 总结 前言 有时候我们需要将一个进程放到后台去运行&#xff0c;或者将后台程序切换回前台&#xff0c;这时候就…

LabVIEW如何实现多张图拼接

在LabVIEW中实现相机多次拍摄进行拼接的过程&#xff0c;可以分为以下几个步骤&#xff1a;设置相机参数、控制相机拍摄、图像处理与拼接、显示和保存结果。以下是一个详细的实现方案&#xff1a; 1. 设置相机参数 首先需要配置相机的参数&#xff0c;例如分辨率、曝光时间、…

如何用ai打一场酣畅淋漓的数学建模比赛? 给考研加加分!

文章目录 数学建模比赛1. 数学建模是什么&#xff1f;2. 数学建模分工合作2.1 第一&#xff1a;组队和分工合作2.2 第二&#xff1a;充分的准备2.3 第三&#xff1a;比赛中写论文过程 3. 数学建模基本过程4. 2023全年数学建模竞赛时间轴5. 数学建模-资料大全6. 数学建模实战 数…

精品PPT | MES设计与实践,业务+架构+实施(免费下载))

【1】关注本公众号&#xff0c;转发当前文章到微信朋友圈 【2】私信发送 MES设计与实践 【3】获取本方案PDF下载链接&#xff0c;直接下载即可。 如需下载本方案PPT/WORD原格式&#xff0c;请加入微信扫描以下方案驿站知识星球&#xff0c;获取上万份PPT/WORD解决方案&#x…

Ant Design pro 6.0.0 搭建使用以及相关配置

一、背景 在选择一款比较合适的中台的情况下&#xff0c;挑选了有arco design、ant design pro、soybean、vue-pure-admin等中台系统&#xff0c;经过筛选就选择了ant design pro。之前使用过arco design 搭建通过组件库拼装过后台管理界面&#xff0c;官方文档也比较全&#…

软件安全复习

文章目录 第一章 软件安全概述1.1 信息定义1.2 信息的属性1.3 信息安全1.4 软件安全1.5 软件安全威胁及其来源1.5.1 软件缺陷与漏洞1.5.1.1 软件缺陷1.5.1.2 漏洞1.5.1.3 软件漏洞1.5.1.4 软件缺陷和漏洞的威胁 1.5.2 恶意软件1.5.2.1 恶意软件的定义1.5.2.2 恶意软件的威胁 1.…

《安富莱嵌入式周报》第337期:超高性能信号量测量,协议分析的开源工具且核心算法开源,工业安全应用的双通道数字I/O模组,低成本脑机接口,开源音频合成器

周报汇总地址&#xff1a;http://www.armbbs.cn/forum.php?modforumdisplay&fid12&filtertypeid&typeid104 视频版&#xff1a; https://link.zhihu.com/?targethttps%3A//www.bilibili.com/video/BV1PT421S7TR/ 《安富莱嵌入式周报》第337期&#xff1a;超高性…

镜子摆放忌讳多

镜子是我们日常生活中不可或缺的物品。在风水中&#xff0c;镜子的作用非常多&#xff0c;能够起到一定的作用。镜子的摆放位置也是非常有讲究的&#xff0c;摆放不好会直接影响到家人的事业、财运、婚姻乃至健康等诸多方面。 第一个风水忌讳&#xff0c;镜子对大门。大门的正前…

开发自定义菜单之创建菜单

文章目录 申请测试账号换取Token接口测试提交自定义菜单查看效果校验菜单配置清空菜单配置结束语 申请测试账号 https://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo?actionshowinfo&tsandbox/index 或 得到appid和secret 换取Token 使用appid和secret换取token令牌…

企业内网开源OA服务器(办公自动化系统),搭建O2OA基于Linux(openEuler、CentOS8)

本实验环境为openEuler系统(以server方式安装)&#xff08;CentOS8基本一致&#xff0c;可参考本文) 目录 知识点实验下载安装O2OA安装mysql配置O2OA 知识点 “O2OA” 是一个开源的、基于Java的办公自动化&#xff08;Office Automation&#xff09;系统。其名称中的“O2OA”…

Linux操作指令大全

目录 &#x1f349;引言 &#x1f349; 基础命令 &#x1f348;pwd &#x1f348;cd &#x1f348;ls &#x1f348;mkdir &#x1f348;rmdir &#x1f348;cp &#x1f348;mv &#x1f348;rm &#x1f349; 文件操作命令 &#x1f348;cat &#x1f348;tac …

Web课外练习9

<!DOCTYPE html> <html> <head><meta charset"utf-8"><title>邮购商品业务</title><!-- 引入vue.js --><script src"./js/vue.global.js" type"text/javascript"></script><link rel&…

关于微信小程序低功耗蓝牙ECharts实时刷新

最近搞了这方面的东西&#xff0c;是刚刚开始接触微信小程序&#xff0c;因为是刚刚开始接触蓝牙设备&#xff0c;所以这篇文章适合既不熟悉小程序&#xff0c;又不熟悉蓝牙的新手看。 项目要求是获取到蓝牙传输过来的数据&#xff0c;并显示成图表实时显示&#xff1b; 我看了…

【全开源】招聘求职小程序系统源码(ThinkPHP+原生微信小程序)

基于ThinkPHP和原生微信小程序开发的招聘平台系统&#xff0c;包含微信小程序求职者端、微信小程序企业招聘端、PC企业招聘端、PC管理平台端 构建高效人才交流平台 一、引言&#xff1a;招聘求职市场的数字化趋势 在数字化时代&#xff0c;招聘求职市场也迎来了巨大的变革。…