1

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

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

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

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

在此处输入图像描述

4

1 回答 1

2

对于CrossValidated 来说,这更像是一个问题……高斯过程本质上是具有高斯边际的函数的分布:f(x) 在任何点的预测分布都是通过构造高斯而不是约束的。例如,如果您有很多接近于零的观测值,那么您的模型预计也很可能出现低于零的情况。

如果您的观察结果是严格肯定的,您可以使用不同的可能性,例如指数 ( gpflow.likelihoods.Exponential) 或 Beta ( gpflow.likelihoods.Beta)。请注意,model.predict_y()始终返回均值方差,对于非高斯似然,方差实际上可能不是您想要的。在实践中,您更可能关心分位数(例如 10%-90% 置信区间);GPflow github 上有一个与此相关的未解决问题。您使用哪种可能性是您的建模选择的一部分,并且取决于您的数据。

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

于 2020-07-09T15:23:11.913 回答