高斯过程(Gaussian Process)回归预测,例子,代码及可视化展示

这篇具有很好参考价值的文章主要介绍了高斯过程(Gaussian Process)回归预测,例子,代码及可视化展示。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

高斯过程指的是一组随机变量的集合,这个集合里面的任意有限个随机变量都服从联合正态分布。(联合正态分布是指多个随机变量的联合分布满足正态分布。联合分布是指多个随机变量同时满足的概率分布,一个常见的例子是考虑两个随机变量:X 表示一个人的年龄,Y 表示他们的身高。假设 X 和 Y 的联合分布是正态分布。在这种情况下,联合分布可以描述不同年龄的人在不同身高下出现的概率。我们可以使用联合概率密度函数来计算某个年龄范围内的人在某个身高范围内出现的概率。)

高斯过程可以用于回归拟合。先来看一个简单的例子。一个地点的气温,我们有过去10年6月1号的气温数据,想要预测明年6月1日的气温,那么假定那一天的气温服从高斯分布,根据过去的数据,可以算出均值和方差,则明年那一天的气温满足这样一个正态分布,最有可能的气温就是均值。

那么如果是一个一元5次函数比如

高斯过程(Gaussian Process)回归预测,例子,代码及可视化展示

画出图像和几个已知点

import numpy as np
import matplotlib.pyplot as plt


def f(x):
    coefs = [6, -2.5, -2.4, -0.1, 0.2, 0.03]
    total = 0
    for exp, coef in enumerate(coefs):
       total += coef * (x ** exp)
    return total


x_obs = np.array([-4, -3.6, -2.0, -1.5, 0])
y_obs = f(x_obs)
x_s = np.linspace(-5, 1, 80)

fig, ax = plt.subplots()
legend_list = []
ax.plot(x_s, f(x_s))
legend_list.append("true")
ax.scatter(x_obs, y_obs)
legend_list.append("sample points")

plt.legend(legend_list)
plt.show()

高斯过程(Gaussian Process)回归预测,例子,代码及可视化展示

在已知几个点的情况下,如何通过高斯过程回归预测这个函数呢?

首先回顾一下高斯概率分布,一维高斯分布概率密度函数。

高斯过程(Gaussian Process)回归预测,例子,代码及可视化展示

 x有95%的可能性出现在95%置信区间[-1.96, 1.96]。调整均值和方差,96%置信区间就会移动。

如果是二维高斯分布概率密度函数,下图。

高斯过程(Gaussian Process)回归预测,例子,代码及可视化展示

代码如下

import numpy as np
import matplotlib.pyplot as plt

# 设置均值和协方差矩阵
mu = np.array([0, 0])   # 均值
cov = np.array([[1, 0], [0, 1]])   # 协方差矩阵

# 生成二维高斯分布的概率密度函数
x, y = np.meshgrid(np.linspace(-3, 3, 100), np.linspace(-3, 3, 100))
pos = np.dstack((x, y))
inv_cov = np.linalg.inv(cov)
pdf = np.exp(-0.5 * np.einsum('...k,kl,...l->...', pos - mu, inv_cov, pos - mu)) / (2 * np.pi * np.sqrt(np.linalg.det(cov)))

# 绘制二维高斯分布图
plt.contourf(x, y, pdf, levels=20)  # 使用contourf函数填充等高线图
plt.colorbar()  # 添加颜色条

# 设置图形标题和轴标签
plt.xlabel('x')
plt.ylabel('y')

# 显示图形
plt.show()

那么我们进行一次采样,得到的点大概率是出现在黄色区域,如果我们把这个点表示为,y1,y2分别表示横纵坐标。通过调整协方差矩阵,黄色区域就会移动,我们就能得到不同的y。

如果是n维高斯分布,取样一次得到1个点的n个维度值。由此可以联想到,是否可以通过对n维高斯分布进行一次取样,来得到前文中那个5次函数的回归预测值呢?当然是可以的。

现在有一系列的x值

x_s = np.linspace(-5, 1, 80)

通过对高维高斯分布进行一次取样,可以得到一系列y_s,从x_s映射到y_s的关键就在于协方差矩阵,通过核函数,可以构造不同的协方差矩阵。这里我们选择最简单的核函数。

import numpy as np


def k(xs, ys, sigma=1, l=1):
    dx = np.expand_dims(xs, 1) - np.expand_dims(ys, 0)
    tmp = (sigma ** 2) * np.exp(-((dx / l) ** 2) / 2)
    return tmp


x_s = np.linspace(-5, 1, 80)
kernal = k(x_s, x_s)

预备知识告一段落,下面来看高斯过程回归是如何实现的:

先说明字母含义,x和y是我们已知的采样点,对应代码x_obs, y_obs。

x_obs = np.array([-4, -3.6, -2.0, -1.5, 0])
y_obs = f(x_obs)

对应我们代码的x_s,对应代码y_s。m(x)表示求均值,K是核函数运算得到的矩阵。

高斯过程回归的原理是:与的联合概率分布(先验分布)符合高斯分布。

通过采样得到观测值y_obs以后,则的后验分布满足均值为,方差为的高斯分布

高斯过程(Gaussian Process)回归预测,例子,代码及可视化展示

m和K的求法:

K = k(x_obs, x_obs)
K_s = k(x_obs, x_s)
K_ss = k(x_s, x_s)

K_sTKinv = np.matmul(K_s.T, np.linalg.pinv(K))

mu_s = m(x_s) + np.matmul(K_sTKinv, y_obs - m(x_obs))
Sigma_s = K_ss - np.matmul(K_sTKinv, K_s)

高斯过程回归结果如下图

高斯过程(Gaussian Process)回归预测,例子,代码及可视化展示

解释一下这张图,红色实线是函数真实值,蓝色实线是高斯过程回归的结果。三根虚线表示:对80维高斯分布(因为我们的x_s是80维数组)进行三次采样,得到的3个点,每个点80个维度坐标值组成的曲线。每个维度上的值,都是满足均值为蓝色实线,方差为灰色背景范围的高斯分布。在已知观测点上,方差为0,而距离观测点越远,方差范围越大,可信度也就越低。

完整代码如下:文章来源地址https://www.toymoban.com/news/detail-495245.html

import numpy as np
import matplotlib.pyplot as plt


def f(x):
    coefs = [6, -2.5, -2.4, -0.1, 0.2, 0.03]
    total = 0
    for exp, coef in enumerate(coefs):
       total += coef * (x ** exp)
    return total


def m(x):
    tmp = np.zeros_like(x)
    return tmp


def k(xs, ys, sigma=1, l=1):
    dx = np.expand_dims(xs, 1) - np.expand_dims(ys, 0)
    tmp = (sigma ** 2) * np.exp(-((dx / l) ** 2) / 2)
    return tmp


x_obs = np.array([-4, -3.6, -2.0, -1.5, 0])
y_obs = f(x_obs)
x_s = np.linspace(-5, 1, 80)
K = k(x_obs, x_obs)
K_s = k(x_obs, x_s)
K_ss = k(x_s, x_s)

K_sTKinv = np.matmul(K_s.T, np.linalg.pinv(K))

mu_s = m(x_s) + np.matmul(K_sTKinv, y_obs - m(x_obs))
Sigma_s = K_ss - np.matmul(K_sTKinv, K_s)

stds = np.sqrt(Sigma_s.diagonal())
tmp = np.flip(x_s, 0)
err_xs = np.concatenate((x_s, np.flip(x_s, 0)))
err_ys = np.concatenate((mu_s + 2 * stds, np.flip(mu_s - 2 * stds, 0)))

fig, ax = plt.subplots()
legend_list = []
ax.plot(x_s, f(x_s), color='r')
legend_list.append("real")
ax.scatter(x_obs, y_obs)
legend_list.append("sample points")
ax.plot(x_s, mu_s, color='b')
legend_list.append("mean")
ax.fill_between(x_s, mu_s-2*stds, mu_s+2*stds, alpha=0.3, color='gray')
legend_list.append("err")
for i in range(3):
    ax.plot(x_s, np.random.multivariate_normal(mu_s, Sigma_s), linestyle='--')
    legend_list.append("test" + str(i))

plt.legend(legend_list)
plt.show()

到了这里,关于高斯过程(Gaussian Process)回归预测,例子,代码及可视化展示的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 回归预测 | Matlab基于CPO-GPR基于冠豪猪算法优化高斯过程回归的多输入单输出回归预测

    预测效果 基本介绍 Matlab基于CPO-GPR基于冠豪猪算法优化高斯过程回归的数据回归预测(完整源码和数据) 1.Matlab基于CPO-GPR基于冠豪猪算法优化高斯过程回归的输入多个特征,输出单个变量,多输入单输出回归预测; 3.多指标评价,评价指标包括:R2、MAE、MSE、RMSE等,代码质量

    2024年04月11日
    浏览(29)
  • 支持向量机回归预测SVR——MATLAB超详细代码实现过程

            本文主要针对支持向量机回归预测在MATLAB中的实现过程进行陈述,方便读者可以快速上手实现SVR回归预测,对支持向量机的原理将不再进行陈述。在MATLAB中实现相关向量机回归预测主要是调用MATLAB自带的SVR工具箱,所以了解工具箱的相关参数的基本设置是很有必要

    2024年01月16日
    浏览(45)
  • 【MATLAB第61期】基于MATLAB的GMM高斯混合模型回归数据预测

    高斯混合模型GMM广泛应用于数据挖掘、模式识别、机器学习和统计分析。其中,它们的参数通常由最大似然和EM算法确定。 关键思想是使用高斯混合模型对数据(包括输入和输出)的联合概率密度函数进行建模。 文献参考:https://doi.org/10.1016/j.specom.2012.06.005。 使用工具箱ne

    2024年02月15日
    浏览(33)
  • 机器学习:基于逻辑回归和高斯贝叶斯对人口普查数据集的分类与预测

    机器学习:基于逻辑回归和高斯贝叶斯对人口普查数据集的分类与预测 作者:i阿极 作者简介:Python领域新星作者、多项比赛获奖者:博主个人首页 😊😊😊如果觉得文章不错或能帮助到你学习,可以点赞👍收藏📁评论📒+关注哦!👍👍👍 📜📜📜如果有小伙伴需要数据

    2023年04月08日
    浏览(32)
  • 常见的可视化例子及代码

    可视化是一种强大的工具,广泛应用于各个领域,以帮助理解和解释数据。 几种常用可视化图表类型。画图网站推荐 微生信、在线维恩图软件、图标和海报,配色网站推荐 Adobe Color、Dopely Color、uiGradients、中国色、Subcolor和 ColorDrop 折线图 柱状图 带饼状图的柱状图 散点图 双

    2024年02月03日
    浏览(31)
  • 高斯噪声(Gaussian noise)

    高斯噪声,也称为白噪声或随机噪声,是一种符合高斯(正态)分布的随机信号或干扰。它的特点是在所有频率上具有恒定的功率谱密度,使其在不同频率上呈现出等能量的随机波动。 从实际角度来看,高斯噪声是指在各种系统和过程中发生的随机变化或扰动。它存在于许多

    2024年02月10日
    浏览(37)
  • R语言用逻辑回归预测BRFSS中风数据、方差分析anova、ROC曲线AUC、可视化探索

    行为风险因素监测系统(BRFSS)是一项年度电话调查。BRFSS旨在确定成年人口中的风险因素并报告新兴趋势 ( 点击文末“阅读原文”获取完整 代码数据 )。 相关视频 例如,调查对象被询问他们的饮食和每周体育活动、HIV/AIDS状况、可能的吸烟情况、免疫接种、健康状况、健

    2024年02月07日
    浏览(31)
  • 高斯模糊与图像处理(Gaussian Blur)

    高斯模糊在图像处理中的用途及其广泛,除了常规的模糊效果外,还可用于图像金字塔分解、反走样、高低频分解、噪声压制、发光效果等等等等。正因为高斯模糊太基础,应用太广泛,所以需要尽可能深入认识这个能力,避免在实际应用中无意采坑。 G ( x ) = 1 2 π σ e −

    2024年02月13日
    浏览(34)
  • 3D高斯泼溅(Gaussian Splatting)通俗解释

    项目:3D Gaussian Splatting for Real-Time Radiance Field Rendering 代码:GitHub - graphdeco-inria/gaussian-splatting: Original reference implementation of \\\"3D Gaussian Splatting for Real-Time Radiance Field Rendering\\\" 功能:拍摄一段视频或多张图片,可以重建3维场景并能实时渲染。 优点:质量高、速度快。 缺点:占用

    2024年02月22日
    浏览(48)
  • Python随机森林、线性回归对COVID-19疫情、汇率数据预测死亡率、病例数、失业率影响可视化...

    自2019年12月以来,传染性冠状病毒疾病2019(COVID-19)迅速席卷全球,并在短短几个月内达到了大流行状态 ( 点击文末“阅读原文”获取完整 代码数据 )。 相关视频 迄今为止,全球已报告了超过6800万例病例。为了应对这一大流行病,实施了公共卫生政策,通过实施“居家令

    2024年02月10日
    浏览(23)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包