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

1. 高斯过程回归原理

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

1.1 高斯过程

定义:一个高斯过程是一组随机变量的集合,这组随机变量的每个有限子集构成的联合概率分布都服从多元高斯分布,即:
高斯过程回归(Gaussian process regression)原理详解及python代码实战
其中高斯过程回归(Gaussian process regression)原理详解及python代码实战高斯过程回归(Gaussian process regression)原理详解及python代码实战分别为随机变量x的均值函数和协方差函数。因此可看出,一个高斯过程实际是由随机变量的均值和协方差函数所决定。

1.2 高斯过程回归

在传统回归模型中,定义高斯过程回归(Gaussian process regression)原理详解及python代码实战,而在高斯过程回归中,设f(x)服从高斯分布。通常假设均值为0,则:
高斯过程回归(Gaussian process regression)原理详解及python代码实战
其中高斯过程回归(Gaussian process regression)原理详解及python代码实战是协方差函数。使用核技巧,令高斯过程回归(Gaussian process regression)原理详解及python代码实战,则可由求核函数K来计算协方差函数。如核函数K使用RBF核,则高斯过程回归(Gaussian process regression)原理详解及python代码实战。如使用多项式核,则高斯过程回归(Gaussian process regression)原理详解及python代码实战
因此,协方差函数高斯过程回归(Gaussian process regression)原理详解及python代码实战可分解为高斯过程回归(Gaussian process regression)原理详解及python代码实战。其中K是训练核矩阵,高斯过程回归(Gaussian process regression)原理详解及python代码实战是训练-测试核矩阵,高斯过程回归(Gaussian process regression)原理详解及python代码实战是测试-训练核矩阵。
隐函数f的条件概率分布可表示为:
高斯过程回归(Gaussian process regression)原理详解及python代码实战

2. python实现高斯过程回归

2.1 参数详解

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

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

在这里插入图片描述

属性名称尺寸
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模型预测的高斯过程回归(Gaussian process regression)原理详解及python代码实战系数,高斯过程回归(Gaussian process regression)原理详解及python代码实战系数计算方法为高斯过程回归(Gaussian process regression)原理详解及python代码实战

2.2 核函数cookbook

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

  • RBF核函数(Radial basis function kernel)
    RBF核函数又被称为平方指数核,其计算方式为:
    高斯过程回归(Gaussian process regression)原理详解及python代码实战
    式中高斯过程回归(Gaussian process regression)原理详解及python代码实战是核函数的长度尺寸高斯过程回归(Gaussian process regression)原理详解及python代码实战是距离度量函数,这里采用欧式距离度量。

在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)的一部分,用于缩放其他因子(核)的大小,也可以用作和核的一个部分,用于修改高斯过程的平均值。其数学形式表示为:
    高斯过程回归(Gaussian process regression)原理详解及python代码实战
    同样,在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!")

预测概率区间图如下:
区间图

以标准差为尺度的误差线图如下:
误差线

附录-数学基础知识

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

A1 高斯分布的基本性质

高斯分布的四大属性:标准化(Normalization)、边缘化(Marginalization)、可加性(Summation)、条件性(Conditioning),具体数学表示如下图所示:
在这里插入图片描述

A2 贝叶斯框架

贝叶斯框架的基础概念包括条件概率、乘积法则、加和法则、贝叶斯定理等。
(1)条件概率
高斯过程回归(Gaussian process regression)原理详解及python代码实战 i.e. 高斯过程回归(Gaussian process regression)原理详解及python代码实战.

(2)乘积法则(product rule)
任何联合概率分布,都可以表示为一维条件概率分布的乘积,i.e. 高斯过程回归(Gaussian process regression)原理详解及python代码实战.

(3) 加和法则(sum rule)
任何边缘概率分布,都可以通过对联合概率分布的积分获得,i.e.
高斯过程回归(Gaussian process regression)原理详解及python代码实战, 高斯过程回归(Gaussian process regression)原理详解及python代码实战.

利用加和法则还可以估计条件概率分布,如已知一组随机变量高斯过程回归(Gaussian process regression)原理详解及python代码实战,高斯过程回归(Gaussian process regression)原理详解及python代码实战,高斯过程回归(Gaussian process regression)原理详解及python代码实战构成的联合概率分布高斯过程回归(Gaussian process regression)原理详解及python代码实战,观测到高斯过程回归(Gaussian process regression)原理详解及python代码实战,感兴趣预测高斯过程回归(Gaussian process regression)原理详解及python代码实战,变量高斯过程回归(Gaussian process regression)原理详解及python代码实战是未知的且与待解决的问题无关,如何只用联合概率分布高斯过程回归(Gaussian process regression)原理详解及python代码实战去估计高斯过程回归(Gaussian process regression)原理详解及python代码实战呢?
答案就是用加和法则对联合概率分布求积分:
高斯过程回归(Gaussian process regression)原理详解及python代码实战=高斯过程回归(Gaussian process regression)原理详解及python代码实战

(4)贝叶斯定理(Bayes theorem)
由乘积法则和加和法则可知,任何条件概率分布可由联合概率分布获得。进一步的,利用乘积法则和加和法则,可从条件概率的定义中推导出贝叶斯定理:
高斯过程回归(Gaussian process regression)原理详解及python代码实战.
从式中可看出,贝叶斯定理定义了当新的信息出现时,不确定性的转化规则,即:
高斯过程回归(Gaussian process regression)原理详解及python代码实战
(5)贝叶斯框架
统计推断方法有频率框架和贝叶斯框架两大流派,贝叶斯框架基于贝叶斯定理去估计后验概率。应用该框架进行推断的经典描述为,给定一组独立同分布的数据高斯过程回归(Gaussian process regression)原理详解及python代码实战,欲用概率分布高斯过程回归(Gaussian process regression)原理详解及python代码实战估计高斯过程回归(Gaussian process regression)原理详解及python代码实战,贝叶斯框架提供了使用先验概率高斯过程回归(Gaussian process regression)原理详解及python代码实战编码参数高斯过程回归(Gaussian process regression)原理详解及python代码实战的不确定度的方法:
高斯过程回归(Gaussian process regression)原理详解及python代码实战

A3 后验预测分布

考虑一个回归问题:
高斯过程回归(Gaussian process regression)原理详解及python代码实战
为从数据中求解概率,给定特定参数w,预测模型可利用后验预测分布posterior predictive distribution)来求解。
对于数据集D和特征X,根据贝叶斯定理以及概率分布的加和、乘积法则,后验预测分布可表示为:
高斯过程回归(Gaussian process regression)原理详解及python代码实战
高斯过程回归(Gaussian process regression)原理详解及python代码实战
然而上述公式的解析解(closed form)难以计算,但对于具有高斯似然和先验的特殊情况,我们可以求其高斯过程的均值和协方差,即:
高斯过程回归(Gaussian process regression)原理详解及python代码实战
其中均值函数高斯过程回归(Gaussian process regression)原理详解及python代码实战和协方差函数高斯过程回归(Gaussian process regression)原理详解及python代码实战, 均可由核函数K计算得到:
高斯过程回归(Gaussian process regression)原理详解及python代码实战
高斯过程回归(Gaussian process regression)原理详解及python代码实战

参考资料

[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

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
心中带点小风骚的头像心中带点小风骚普通用户
上一篇 2023年3月5日 上午11:01
下一篇 2023年3月5日 上午11:02

相关推荐