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

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

1. 高斯过程回归原理

高斯过程回归(Gaussian process regression,GPR)是一个随机过程(按时间或空间索引的随机变量集合),这些随机变量的每个有限集合都服从多元正态分布,即它们的每个有限线性组合都是正态分布。高斯过程的分布是所有这些(无限多)随机变量的联合概率分布。

1.1 高斯过程

定义:一个高斯过程是一组随机变量的集合,这组随机变量的每个有限子集构成的联合概率分布都服从多元高斯分布,即:
f ∼ G P ( μ , k ) ( 1 − 1 ) f \sim GP(\mu,k) \qquad(1-1) fGP(μ,k)(11)
其中 μ ( x ) \mu(x) μ(x) k ( x , x ′ ) k(x,x') k(x,x)分别为随机变量x的均值函数和协方差函数。因此可看出,一个高斯过程实际是由随机变量的均值和协方差函数所决定。

1.2 高斯过程回归

在传统回归模型中,定义 Y = f ( x ) Y=f(x) Y=f(x),而在高斯过程回归中,设f(x)服从高斯分布。通常假设均值为0,则:
Y = f ( x ) ∼ N ( 0 , Σ ) ( 1 − 2 ) Y=f(x)\sim N(0,\Sigma) \qquad(1-2) Y=f(x)N(0,Σ)(12)
其中 Σ \Sigma Σ是协方差函数。使用核技巧,令 Σ i j = K ( x i , x j ) \Sigma_{ij}=K(\mathbf{x}_i,\mathbf{x}_j) Σij=K(xi,xj),则可由求核函数K来计算协方差函数。如核函数K使用RBF核,则 Σ i j = τ e − ∥ x i − x j ∥ 2 σ 2 \Sigma_{ij}=\tau e^\frac{-\|\mathbf{x}_i-\mathbf{x}_j\|^2}{\sigma^2} Σij=τeσ2xixj2。如使用多项式核,则 Σ i j = τ ( 1 + x i ⊤ x j ) d \Sigma_{ij}=\tau (1+\mathbf{x}_i^\top \mathbf{x}_j)^d Σij=τ(1+xixj)d
因此,协方差函数 Σ \Sigma Σ可分解为 ( K , K ∗ K ∗ ⊤ , K ∗ ∗ ) \begin{pmatrix} K, K_* \\K_*^\top , K_{**} \end{pmatrix} (K,KK,K)。其中K是训练核矩阵, K ∗ K_* K是训练-测试核矩阵, K ∗ T K_*^T KT是测试-训练核矩阵。
隐函数f的条件概率分布可表示为:
f ∗ ∣ ( Y 1 = y 1 , . . . , Y n = y n , x 1 , . . . , x n , x t ) ∼ N ( K ∗ ⊤ K − 1 y , K ∗ ∗ − K ∗ ⊤ K − 1 K ∗ ) ( 1 − 3 ) f_*|(Y_1=y_1,...,Y_n=y_n,\mathbf{x}_1,...,\mathbf{x}_n,\mathbf{x}_t)\sim \mathcal{N}(K_*^\top K^{-1}y,K_{**}-K_*^\top K^{-1}K_* ) \qquad(1-3) f(Y1=y1,...,Yn=yn,x1,...,xn,xt)N(KK1y,KKK1K)(13)


2. python实现高斯过程回归

2.1 参数详解

基于机器学习库sklearn实现高斯过程回归。sklearn中GaussianProcessRegressor模块实现了高斯过程回归模型,从模型参数、属性和方法等方面介绍该模型,其主要参数包括:

参数名 参数含义 备注
kernel 核函数形式的高斯过程的协方差函数 常用核函数有:RBF、ConstantKernel;核函数的常见超参数有核的长度尺寸、长度尺寸的上下限
alpha 在模型拟合过程中加入核矩阵对角线位置的值 (1)确保计算值形成正定矩阵,防止拟合过程中出现潜在的数值问题;(2)也可以解释为训练观测值上附加高斯测量噪声的方差;(3)如果alpha参数传递的是一个数组,它必须与用于拟合的数据具有相同的条目数,并用作依赖于数据点的噪声级
random_state 随机状态数 决定用于初始化中心的随机数的生成,在多次函数调用时,指定此参数保证可复现性

高斯过程回归,机器学习必知必会,python,回归
GaussianProcessRegressor回归模型的主要属性包括:

属性名称 尺寸
X_train_ array-like of shape (n_samples, n_features) or list of object
y_train_ array-like of shape (n_samples,) or (n_samples, n_targets)

GaussianProcessRegressor回归模型的常用方法包括:

方法名称 参数 返回值
predict(X, return_std=False, return_cov=False) X是高斯过程要拟合的样本点 用GPR模型进行预测,返回样本点预测概率分布的均值、标准差和预测联合概率分布的协方差
score(X, y, sample_weight=None) X是测试样本, y是X对应的真值 返回GPR模型预测的 R 2 R^2 R2系数, R 2 R^2 R2系数计算方法为 1 − ( ( ( y t r u e − y p r e d ) ∗ ∗ 2 ) . s u m ( ) ( y t r u e − y t r u e . m e a n ( ) ) ∗ ∗ 2 ) . s u m ( ) 1-\frac{(((y_{true} - y_{pred})** 2).sum()}{(y_{true} - y_{true}.mean()) ** 2).sum()} 1(ytrueytrue.mean())2).sum()(((ytrueypred)2).sum()

2.2 核函数cookbook

核函数在sklearn.gaussian_process.kernels模块中,常用的核函数有:

  • RBF核函数(Radial basis function kernel)
    RBF核函数又被称为平方指数核,其计算方式为:
    k ( x i , x j ) = exp ⁡ ( − d ( x i , x j ) 2 2 l 2 ) ( 2 − 1 ) k(x_i,x_j)=\exp(-\frac{d(x_i,x_j)^2}{2l^2}) \qquad(2-1) k(xi,xj)=exp(2l2d(xi,xj)2)(21)
    式中 l l l是核函数的长度尺寸 d d d是距离度量函数,这里采用欧式距离度量。

在sklearn中RBF函数有两个参数:

RBF(length_scale=1.0, length_scale_bounds=(1e-05, 100000.0))
# length_scale:核函数的长度尺寸,float or ndarray of shape (n_features,), default=1.0
# length_scale_bounds:核函数长度尺寸的上下限,若设为'fixed',则无法在超参数调整期间修改核函数长度尺寸。
  • 常数核(ConstantKernel)
    常数核可以作为乘积核(product kernel)的一部分,用于缩放其他因子(核)的大小,也可以用作和核的一个部分,用于修改高斯过程的平均值。其数学形式表示为:
    k ( x 1 , x 2 ) = c o n s t a n t , ∀ x 1 , x 2 ( 2 − 2 ) k(x_1,x_2)=constant, \forall x_1,x_2 \qquad(2-2) k(x1,x2)=constantx1,x2(22)
    同样,在skelearn中有ConstantKernel函数两个参数,含义与RBF的参数类似。
kernel = RBF() + ConstantKernel(constant_value=2,constant_value_bounds=(1e-5, 1e5))
# 作用等价于:kernel = RBF() + 2

2.2 代码模版

导入库:

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.gaussian_process import GaussianProcessRegressor
from sklearn.gaussian_process.kernels import RBF, ConstantKernel as C, WhiteKernel
import sklearn.gaussian_process.kernels as k

训练GPR模型:

def gpr_regressor(X_train,y_train,X_test,y_test,kernel=C(constant_value=1) * RBF(length_scale=1, length_scale_bounds=(1e-2, 1e2))):
    """
    gpr model for regression
    :param X_train: (n_samples, n_features)
    :param y_train: (n_samples,)
    :param X_test: (n_samples, n_features)
    :param y_test: (n_samples,)
    :param kernel: kernel of gpr
    :return:
        y_pred: mean predictions
        y_pred_std: std predictions
        r2: r2 score of gpr
    """
    gp = GaussianProcessRegressor(kernel=kernel)
    gp.fit(X_train, y_train)  # Instantiated Gaussian regression model
    print("the learned kernel parameters:\t {}".format(gp.kernel_))  # the learned kernel parameters
    y_pred, y_pred_std = gp.predict(X_test, return_std=True)
    r2 = gp.score(X_test, y_test)
    print('r2 coefficient is {:.2f}'.format(r2))
    return y_pred,y_pred_std,r2

预测结果可视化:

def plot_errorbar_gpr(y_pred,y_pred_std,r2,y_test):
    """
    plot errorbar for gpr predictions
    :param y_pred:
    :param y_pred_std:
    :param r2:
    :param y_test: one-dimension
    :return:
    """

    plt.errorbar(x=y_test, y=y_pred, yerr=y_pred_std, fmt="o", label="Samples", markersize=5,color='#2698eb')
    #x, y define the data locations, xerr, yerr define the errorbar sizes
    plt.xlabel("ground true")
    plt.ylabel("predicted ")
    plt.title("Gaussian process regression, R2=%.2f" % (r2))
    print("finished!")

def plot_intervel_gpr(y_pred,y_pred_std,r2,X_test):
    """
    plot confidence interval for gpr predictions
    :param y_pred:
    :param y_pred_std:
    :param r2:
     :param X_test: should be one-dimension shape
    :return:
    """
    # 1.96 sigma = 95% confidence interval for a normal distribution
    upper, lower = y_pred + 1.96 * y_pred_std, y_pred - 1.96 * y_pred_std
    plt.plot(X_test, y_pred, label="GPR", ls="-")
    plt.fill_between(X_test, y1=upper, y2=lower, alpha=0.2, label="95% confidence", color="#2698eb")
    plt.legend(ncol=4, fontsize=12)
    plt.title("Gaussian process regression, R2=%.2f" %(r2))
    print("finished!")

预测概率区间图如下:
高斯过程回归,机器学习必知必会,python,回归

以标准差为尺度的误差线图如下:
高斯过程回归,机器学习必知必会,python,回归


附录-数学基础知识

这里列出了高斯过程回归涉及到的数学基础知识,方便大家参考。

A1 高斯分布的基本性质

高斯分布的四大属性:标准化(Normalization)、边缘化(Marginalization)、可加性(Summation)、条件性(Conditioning),具体数学表示如下图所示:
高斯过程回归,机器学习必知必会,python,回归
高斯过程回归,机器学习必知必会,python,回归

A2 贝叶斯框架

贝叶斯框架的基础概念包括条件概率、乘积法则、加和法则、贝叶斯定理等。
(1)条件概率
条 件 概 率 分 布 = 联 合 概 率 分 布 边 缘 概 率 分 布 ( A − 1 ) 条件概率分布=\frac{联合概率分布}{边缘概率分布} \qquad(A-1) =(A1) i.e. p ( y ∣ x ) = p ( x , y ) p ( x ) p(y|x)=\frac{p(x,y)}{p(x)} p(yx)=p(x)p(x,y).

(2)乘积法则(product rule)
任何联合概率分布,都可以表示为一维条件概率分布的乘积,i.e. p ( x , y , z ) = p ( x ∣ y , z ) p ( y ∣ z ) p ( z ) p(x,y,z)=p(x|y,z)p(y|z)p(z) p(x,y,z)=p(xy,z)p(yz)p(z).

(3) 加和法则(sum rule)
任何边缘概率分布,都可以通过对联合概率分布的积分获得,i.e.
p ( y ) = ∫ p ( x , y ) d x p(y)=\int p(x,y)dx p(y)=p(x,y)dx, p ( x ) = ∫ p ( x , y ) d y p(x)=\int p(x,y)dy p(x)=p(x,y)dy.

利用加和法则还可以估计条件概率分布,如已知一组随机变量 x x x, y y y, z z z构成的联合概率分布 p ( x , y , z ) p(x,y,z) p(x,y,z),观测到 x x x,感兴趣预测 y y y,变量 z z z是未知的且与待解决的问题无关,如何只用联合概率分布 p ( x , y , z ) p(x,y,z) p(x,y,z)去估计 p ( y ∣ x ) p(y|x) p(yx)呢?
答案就是用加和法则对联合概率分布求积分:
p ( y ∣ x ) = p ( x , y ) p ( x ) p(y|x)=\frac{p(x,y)}{p(x)} p(yx)=p(x)p(x,y)= ∫ p ( x , y , z ) d z ∫ p ( x , y , z ) d z d y \frac{\int p(x,y,z)dz}{\int p(x,y,z)dzdy} p(x,y,z)dzdyp(x,y,z)dz

(4)贝叶斯定理(Bayes theorem)
由乘积法则和加和法则可知,任何条件概率分布可由联合概率分布获得。进一步的,利用乘积法则和加和法则,可从条件概率的定义中推导出贝叶斯定理:
p ( y ∣ x ) = p ( x , y ) p ( x ) = p ( x ∣ y ) p ( y ) p ( x ) = p ( x ∣ y ) p ( y ) ∫ p ( x ∣ y ) p ( y ) d y ( A − 2 ) p(y|x)=\frac{p(x,y)}{p(x)}=\frac{p(x|y)p(y)}{p(x)}=\frac{p(x|y)p(y)}{\int p(x|y)p(y)dy} \qquad(A-2) p(yx)=p(x)p(x,y)=p(x)p(xy)p(y)=p(xy)p(y)dyp(xy)p(y)(A2).
从式中可看出,贝叶斯定理定义了当新的信息出现时,不确定性的转化规则,即:
后 验 概 率 = 似 然 概 率 × 先 验 概 率 置 信 度 ( A − 3 ) 后验概率=\frac{似然概率\times 先验概率}{置信度} \qquad(A-3) =×(A3)
(5)贝叶斯框架
统计推断方法有频率框架和贝叶斯框架两大流派,贝叶斯框架基于贝叶斯定理去估计后验概率。应用该框架进行推断的经典描述为,给定一组独立同分布的数据 X = ( x 1 , x 2 , . . . , x n ) X=(x_1,x_2,...,x_n) X=(x1,x2,...,xn),欲用概率分布 p ( x ∣ θ ) p(x|\theta) p(xθ)估计 θ \theta θ,贝叶斯框架提供了使用先验概率 p ( θ ) p(\theta) p(θ)编码参数 θ \theta θ的不确定度的方法:
p ( θ ∣ X ) = ∏ i = 1 n p ( x i ∣ θ ) p ( θ ) ∫ ∏ i = 1 n p ( x i ∣ θ ) p ( θ ) d θ ( A − 4 ) p(\theta|X)=\frac{\prod_{i=1}^np(x_i|\theta)p(\theta)}{\int \prod_{i=1}^np(x_i|\theta)p(\theta)d\theta} \qquad(A-4) p(θX)=i=1np(xiθ)p(θ)dθi=1np(xiθ)p(θ)(A4)

A3 后验预测分布

考虑一个回归问题:
y = f ( x ) + ε ( A − 5 ) y=f(x)+\varepsilon \qquad(A-5) y=f(x)+ε(A5)
为从数据中求解概率,给定特定参数w,预测模型可利用后验预测分布posterior predictive distribution)来求解。
对于数据集D和特征X,根据贝叶斯定理以及概率分布的加和、乘积法则,后验预测分布可表示为:
P ( Y ∣ D , X ) = ∫ w P ( Y , w ∣ D , X ) d w P(Y\mid D,X) = \int_{\mathbf{w}}P(Y,\mathbf{w} \mid D,X) d\mathbf{w} P(YD,X)=wP(Y,wD,X)dw
= ∫ w P ( Y ∣ w , D , X ) P ( w ∣ D ) d w ( A − 6 ) = \int_{\mathbf{w}} P(Y \mid \mathbf{w}, D,X) P(\mathbf{w} \mid D) d\mathbf{w} \qquad(A-6) =wP(Yw,D,X)P(wD)dw(A6)
然而上述公式的解析解(closed form)难以计算,但对于具有高斯似然和先验的特殊情况,我们可以求其高斯过程的均值和协方差,即:
P ( y ∗ ∣ D , x ) ∼ N ( μ y ∗ ∣ D , Σ y ∗ ∣ D ) ( A − 7 ) P(y_*\mid D,\mathbf{x}) \sim \mathcal{N}(\mu_{y_*\mid D}, \Sigma_{y_*\mid D}) \qquad(A-7) P(yD,x)N(μyD,ΣyD)(A7)
其中均值函数 μ y ∗ ∣ D \mu_{y_*\mid D} μyD和协方差函数 Σ y ∗ ∣ D \Sigma_{y_*\mid D} ΣyD, 均可由核函数K计算得到:
μ y ∗ ∣ D = K ∗ T ( K + σ 2 I ) − 1 y ( A − 8 ) \mu_{y_*\mid D} = K_*^T (K+\sigma^2 I)^{-1} y \qquad(A-8) μyD=KT(K+σ2I)1y(A8)
Σ y ∗ ∣ D = K ∗ ∗ − K ∗ T ( K + σ 2 I ) − 1 K ∗ ( A − 9 ) \Sigma_{y_*\mid D} = K_{**} - K_*^T (K+\sigma^2 I)^{-1}K_* \qquad(A-9) ΣyD=KKT(K+σ2I)1K(A9)

参考资料

[1]cornell 高斯过程lecture
[2]https://cosmiccoding.com.au/tutorials/gaussian_processes
[3]sklearn GaussianProcessRegressor文档
[4].高斯过程可视化展示网页
[5].http://gaussianprocess.org/gpml/chapters/RW.pdf
[6].https://towardsdatascience.com/getting-started-with-gaussian-process-regression-modeling-47e7982b534d文章来源地址https://www.toymoban.com/news/detail-836927.html

到了这里,关于高斯过程回归(Gaussian process regression)原理详解及python代码实战的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • matlab GPR高斯过程回归与股票价格预测

    回归分析是统计分析领域的重要分支。利用回归分析模型可以进行预测。一个典型的预测问题是:给定自变量 x x x 的某些值处对因变量的一些噪声观测值,对新值 x ∗ x^* x ∗ 时因变量的最佳估计值是多少?如果我们期望底层函数是线性的,且可以对输入数据做一些规范化假

    2024年02月07日
    浏览(61)
  • 回归预测 | Matlab基于CPO-GPR基于冠豪猪算法优化高斯过程回归的多输入单输出回归预测

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

    2024年04月11日
    浏览(41)
  • 高斯噪声(Gaussian noise)

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

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

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

    2024年02月13日
    浏览(44)
  • 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日
    浏览(60)
  • 3D Gaussian Splatting文件的压缩【3D高斯泼溅】

    在上一篇文章中,我开始研究高斯泼溅(3DGS:3D Gaussian Splatting)。 它的问题之一是数据集并不小。 渲染图看起来不错。 但“自行车”、“卡车”、“花园”数据集分别是一个 1.42GB、0.59GB、1.35GB 的 PLY 文件。 它们几乎按原样加载到 GPU 内存中作为巨大的结构化缓冲区,因此

    2024年02月03日
    浏览(39)
  • 高斯分布、高斯混合模型、EM算法详细介绍及其原理详解

    K近邻算法和KD树详细介绍及其原理详解 朴素贝叶斯算法和拉普拉斯平滑详细介绍及其原理详解 决策树算法和CART决策树算法详细介绍及其原理详解 线性回归算法和逻辑斯谛回归算法详细介绍及其原理详解 硬间隔支持向量机算法、软间隔支持向量机算法、非线性支持向量机算

    2024年02月06日
    浏览(76)
  • 【Animatable 3D Gaussian】3D高斯最新工作,25s重建十人, 炸裂

    1. 资料 项目: 论文: 代码: 2. 论文 2.1 摘要 神经辐射场能够重建高质量的可驱动人类化身,但训练和渲染成本很高。为减少消耗,本文提出可动画化的3D高斯,从输入图像和姿势中学习人类化身。我们通过在正则空间中建模一组蒙皮的3D高斯模型和相应的骨架,并根据输入

    2024年01月23日
    浏览(46)
  • 逻辑回归(Logistic Regression)

    入门小菜鸟,希望像做笔记记录自己学的东西,也希望能帮助到同样入门的人,更希望大佬们帮忙纠错啦~侵权立删。   目录 一、逻辑回归简介与用途 二、逻辑回归的理论推导 1、问题描述和转化 2、初步思路:找一个线性模型来由X预测Y 3、Sigmoid函数(逻辑函数) 4、刚刚的

    2023年04月18日
    浏览(37)
  • 逻辑回归(Logistic Regression)

    在分类问题中,你要预测的变量 y是离散的值,我们将学习一种叫做逻辑回归 (Logistic Regression) 的算法,这是目前最流行使用最广泛的一种学习算法。 在分类问题中,我们尝试预测的是结果是否属于某一个类(例如正确或错误)。分类问题的例子有:判断一封电子邮件是否是

    2024年02月09日
    浏览(36)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包