如何为被约束为正的观察建立高斯过程回归模型

How to build a Gaussian Process regression model for observations that are constrained to be positive

我目前正在尝试在 GPflow 中训练 GP 回归模型,该模型将在给定一些气象输入的情况下预测降水值。我正在使用 Linear+RBF+WhiteNoise 内核,考虑到我正在使用的一组预测变量,这似乎是合适的。

我目前的问题是,当我让模型预测新值时,它倾向于预测降水 - 见附图。

如何在构建模型时“强制”物理约束?训练数据不包含任何负降水值,但它确实包含许多接近于零的值,我认为这意味着 GPR 模型没有学习 "降水必须 > =0"约束得很好。

如果有一种方法可以像这样明确地强制执行约束,那将是完美的,但我不确定它是如何工作的。这需要不同的优化算法吗?或者是否有可能以某种方式将此约束构建到内核结构中?

这更像是 CrossValidated 的问题...高斯过程本质上是具有高斯边缘的函数分布:f(x) 在任何点的预测分布都是通过构建高斯分布,不受约束。例如。如果您有很多接近于零的观测值,您的模型预计也很有可能出现刚好低于零的值。

如果您的观察结果完全是肯定的,您可以使用不同的可能性,例如指数 (gpflow.likelihoods.Exponential) 或 Beta (gpflow.likelihoods.Beta)。请注意,model.predict_y() 总是 returns meanvariance,对于非高斯似然,方差实际上可能不是什么你要。实际上,您更可能关心分位数(例如 10%-90% 置信区间);有一个 open issue on the GPflow github 与此相关。您使用哪种可能性是您的建模选择的一部分,并且取决于您的数据。

您的问题最简单实用的答案是考虑对对数降水建模:如果您的原始数据集是 XY(所有条目都为 Y > 0),计算logY = np.log(Y) 并创建您的 GP 模型,例如使用 gpflow.models.GPR((X, logY), kernel)。然后,您可以预测测试点的 logY,然后可以将其从对数降水量转换回降水量 space。 (这相当于 LogNormal 可能性,目前在 GPflow 中没有实现,尽管这很简单。)