高斯过程学习笔记

目录

基础知识

例子


推荐

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)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Mac】 CleanMyMac X for mac V4.15.2中文修复版安装教程

软件介绍 CleanMyMac X是一款为Mac设计的优秀软件&#xff0c;旨在帮助用户优化其设备的性能并提供清理和维护功能。以下是 CleanMyMac X的一些主要功能和特点&#xff1a; 1.系统性能优化&#xff1a;软件可以扫描和修复潜在的性能问题&#xff0c;包括无效的登录项、大文件…

【Web】CISCN 2024初赛 题解(全)

目录 Simple_php easycms easycms_revenge ezjava mossfern sanic Simple_php 用php -r进行php代码执行 因为ban了引号&#xff0c;考虑hex2bin&#xff0c;将数字转为字符串 php -r eval(hex2bin(16进制)); 注意下面这段报错&#xff0c;因为加不了引号&#xff0c;开…

[集群聊天服务器]----(十一) 使用Redis实现发布订阅功能

接着上文&#xff0c;[集群聊天服务器]----(十)Nginx的tcp负载均衡配置–附带截图&#xff0c;我们配置nginx&#xff0c;使用了多台服务端来提高单机的并发量&#xff0c;接下来我们回到项目中&#xff0c;思考一下&#xff0c;各个服务端之间怎么进行通信呢&#xff1f; 配置…

滑动窗口-java

主要通过单调队列来解决滑动窗口问题&#xff0c;得到滑动窗口中元素的最大值和最小值。 目录 前言 一、滑动窗口 二、算法思路 1.滑动窗口 2.算法思路 3.代码详解 三、代码如下 1.代码如下 2.读入数据 3.代码运行结果 总结 前言 主要通过单调队列来解决滑动窗口问题&#xff…

文件上传漏洞:pikachu靶场中的文件上传漏洞通关

目录 1、文件上传漏洞介绍 2、pikachu-client check 3、pikachu-MIME type 4、pikachu-getimagesize 最近在学习文件上传漏洞&#xff0c;这里使用pikachu靶场来对文件上传漏洞进行一个复习练习 废话不多说&#xff0c;开整 1、文件上传漏洞介绍 pikachu靶场是这样介绍文…

Docker快速安装SQL Server 2022

说明&#xff1a; 系统&#xff1a;Ubuntu 24.04 LTS 拉取SQL Server Docker镜像 docker pull mcr.microsoft.com/mssql/server:2022-CU12-ubuntu-22.04创建数据目录 sudo mkdir /var/mssql_data sudo chmod 777 /var/mssql_data说明&#xff1a; 权限设置为777&#xff0…

[集群聊天服务器]----(十)Nginx的tcp负载均衡配置--附带截图

接着上文&#xff0c;我们剖析了服务端和客户端的代码&#xff0c;但是单台服务器的并发量是有限的&#xff0c;面对并发量的要求&#xff0c;我们就需要引入Nginx来实现并发量的要求&#xff0c;将用户请求分发到不同的服务器上分担压力&#xff0c;这就是负载均衡。 选择负…

最新php项目加密源码

压缩包里有多少个php就会被加密多少个PHP、php无需安装任何插件。源码全开源 如果上传的压缩包里有子文件夹&#xff08;子文件夹里的php文件也会被加密&#xff09;&#xff0c;加密后的压缩包需要先修复一下&#xff0c;步骤&#xff1a;打开压缩包 》 工具 》 修复压缩文件…

JavaSE——集合框架二(2/6)-综合案例-斗地主游戏(做牌、洗牌、发牌、排序、看牌)

目录 需求与分析 具体实现 牌类定义 房间类定义 初步测试 启动游戏 运行案例 需求与分析 需求 总共有54张牌点数&#xff1a;"3","4","5","6","7","8","9","10","J",&qu…

MyBatis的基础操作

目录 一.什么是MyBatis? 二.使用MyBatis的准备工作 1.引入依赖: 2.配置数据库连接字符串(建立MaBatis和MySQL的连接) 3.在model包中建立数据库对应的实体类UserInfo 三.通过注解的方式实现MyBatis的开发 1.插入语句(Insert) 2.删除语句(Delete) 3.更新语句(Update) 4…

驱动开发:内核MDL读写进程内存

100编程书屋_孔夫子旧书网 MDL内存读写是最常用的一种读写模式,通常需要附加到指定进程空间内然后调用内存拷贝得到对端内存中的数据,在调用结束后再将其空间释放掉,通过这种方式实现内存读写操作,此种模式的读写操作也是最推荐使用的相比于CR3切换来说,此方式更稳定并不会…

c语言--结构体

前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 结构体概念简介 c语言数组是一些相同类型的数据的集合。 这个结构体就是一些可以是不同类型的集合。 比如描述班里的一个人&#xff0c;他可能需要名字(字符串),也需要年龄(整数)。 这种情况就需要用结构体。 …

【Django】中间件实现钩子函数预处理和后处理,局部装饰视图函数

在app文件夹里新建middleware.py继承MiddlewareMixin&#xff0c; 编写中间件类&#xff0c;重写process_request、process_response钩子函数 from django.http import HttpRequest, HttpResponse from django.utils.decorators import decorator_from_middleware from django…

使用 Django 与 Redis 实现缓存优化

文章目录 什么是Redis&#xff1f;为什么选择Django与Redis&#xff1f;如何在Django中使用Redis&#xff1f;总结与拓展 在Web开发中&#xff0c;性能优化是一个至关重要的方面。而使用缓存是提高Web应用性能的常见方法之一。在这篇文章中&#xff0c;我们将探讨如何结合Djang…

layui扩展件(xm-select)实现下拉框

layui扩展件&#xff08;xm-select&#xff09;实现下拉框 扩展组件 xm-select 效果图 html代码 <div class"layui-inline"><label class"layui-form-label">职位</label><div class"layui-input-inline" style"wid…

Linux 使用 yum安装 ELK服务,yum 安装elasticsearch和Kibana(未写完)

文章目录 环境准备ELK组件介绍安装Elasticsearch安装Kibana 丢弃下载ELK 服务安装包Elasticsearch安装 Tips:关闭elasticsearch https 环境准备 ELK组件介绍 ElasticSearch &#xff1a; 是一个近实时&#xff08;NRT&#xff09;的分布式搜索和分析引擎&#xff0c;它可以用…

Chrome谷歌浏览器如何打开不安全页面的禁止权限?

目录 一、背景二、如何打开不安全页面被禁止的权限&#xff1f;2.1 第一步&#xff0c;添加信任站点2.2 第二步&#xff0c;打开不安全页面的权限2.3 结果展示 一、背景 在开发过程中&#xff0c;由于测试环境没有配置 HTTPS 请求&#xff0c;所以谷歌浏览器的地址栏会有这样一…

K8S-pod资源 探针

一.pod资源限制&#xff1a; 对pod资源限制原因&#xff1a;高并发占用所有的cpu资源、内存资源、会造成雪崩 当定义 Pod 时可以选择性地为每个容器设定所需要的资源数量。 最常见的可设定资源是 CPU 和内存大小&#xff0c;以及其他类型的资源。 方式&#xff1a; 对pod做…

金锋关晓柔短视频:成都鼎茂宏升文化传媒公司

金锋关晓柔短视频&#xff1a;情感与创意的交织 在短视频的浪潮中&#xff0c;无数创作者凭借独特的视角和创意脱颖而出。其中&#xff0c;金锋和关晓柔共同打造的短视频系列以其深厚的情感内涵和精湛的创意表达&#xff0c;成都鼎茂宏升文化传媒公司吸引了大量观众的关注&…

leetcode 1241每个帖子的评论数(postgresql)

需求 编写 SQL 语句以查找每个帖子的评论数。 结果表应包含帖子的 post_id 和对应的评论数 number_of_comments 并且按 post_id 升序排列。 Submissions 可能包含重复的评论。您应该计算每个帖子的唯一评论数。 Submissions 可能包含重复的帖子。您应该将它们视为一个帖子。…