GPFlow:如何解释均值模型的不确定性

GPFlow: how to account for uncertainties from mean model

GPFlow one can add a fitted mean function to the GP regression. When doing this as in the basic example中,结果是,由于均值拟合的不确定性,不会有不确定性。例如。在下面的示例中,误差线不会超出可用数据的范围,因为线性平均值的斜率保持固定在其优化值。有没有一种方法可以解释这些不确定性,以便在外推时误差带会增大?

(问题最初在 issue report 中提出,但移至此处以便于访问)

import numpy as np
import matplotlib.pyplot as plt
import gpflow
from gpflow.utilities import print_summary

def f(x):
    return np.sin(3*x) + x

xtrain = np.linspace(0, 3, 50).reshape([-1, 1])
ytrain = f(xtrain) + 0.5*(np.random.randn(len(xtrain)).reshape([-1, 1]) - 0.5)

k = gpflow.kernels.SquaredExponential()
meanf = gpflow.mean_functions.Linear()
m = gpflow.models.GPR(data=(xtrain, ytrain), kernel=k, mean_function=meanf)
opt = gpflow.optimizers.Scipy()

def objective_closure():
    return - m.log_marginal_likelihood()

opt_logs = opt.minimize(objective_closure,
                        m.trainable_variables,
                        options=dict(maxiter=100))

print_summary(m)


xpl = np.linspace(-5, 10, 100).reshape(100, 1)
mean, var = m.predict_f(xpl)

plt.figure(figsize=(12, 6))
plt.plot(xtrain, ytrain, 'x')
plt.plot(xpl, mean, 'C0', lw=2)
plt.fill_between(xpl[:, 0],
                 mean[:, 0] - 1.96 * np.sqrt(var[:,0]),
                 mean[:, 0] + 1.96 * np.sqrt(var[:,0]),
                 color='C0', alpha=0.2)

GPflow的大部分模型只针对核的超参数、均值函数和似然的MAP估计进行优化。这些模型不考虑训练或预测期间这些超参数的不确定性。虽然这可能会限制某些问题,但我们经常发现这是计算复杂性和不确定性量化之间的明智折衷。

也就是说,在您的特定情况下(即线性均值函数),我们可以通过指定线性核函数而不是线性均值函数来解释数据线性趋势中的不确定性。

将您的代码段与此模型规范一起使用:

k = gpflow.kernels.SquaredExponential() + gpflow.kernels.Linear()
meanf = gpflow.mean_functions.Zero()  
m = gpflow.models.GPR(data=(xtrain, ytrain), kernel=k, mean_function=meanf)

给出以下拟合,误差线超出数据范围: