如何为被约束为正的观察建立高斯过程回归模型
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 mean 和 variance,对于非高斯似然,方差实际上可能不是什么你要。实际上,您更可能关心分位数(例如 10%-90% 置信区间);有一个 open issue on the GPflow github 与此相关。您使用哪种可能性是您的建模选择的一部分,并且取决于您的数据。
您的问题最简单实用的答案是考虑对对数降水建模:如果您的原始数据集是 X
和 Y
(所有条目都为 Y > 0
),计算logY = np.log(Y)
并创建您的 GP 模型,例如使用 gpflow.models.GPR((X, logY), kernel)
。然后,您可以预测测试点的 logY,然后可以将其从对数降水量转换回降水量 space。 (这相当于 LogNormal 可能性,目前在 GPflow 中没有实现,尽管这很简单。)
我目前正在尝试在 GPflow 中训练 GP 回归模型,该模型将在给定一些气象输入的情况下预测降水值。我正在使用 Linear+RBF+WhiteNoise
内核,考虑到我正在使用的一组预测变量,这似乎是合适的。
我目前的问题是,当我让模型预测新值时,它倾向于预测负降水 - 见附图。
如何在构建模型时“强制”物理约束?训练数据不包含任何负降水值,但它确实包含许多接近于零的值,我认为这意味着 GPR
模型没有学习 "降水必须 > =0"约束得很好。
如果有一种方法可以像这样明确地强制执行约束,那将是完美的,但我不确定它是如何工作的。这需要不同的优化算法吗?或者是否有可能以某种方式将此约束构建到内核结构中?
这更像是 CrossValidated 的问题...高斯过程本质上是具有高斯边缘的函数分布:f(x) 在任何点的预测分布都是通过构建高斯分布,不受约束。例如。如果您有很多接近于零的观测值,您的模型预计也很有可能出现刚好低于零的值。
如果您的观察结果完全是肯定的,您可以使用不同的可能性,例如指数 (gpflow.likelihoods.Exponential
) 或 Beta (gpflow.likelihoods.Beta
)。请注意,model.predict_y()
总是 returns mean 和 variance,对于非高斯似然,方差实际上可能不是什么你要。实际上,您更可能关心分位数(例如 10%-90% 置信区间);有一个 open issue on the GPflow github 与此相关。您使用哪种可能性是您的建模选择的一部分,并且取决于您的数据。
您的问题最简单实用的答案是考虑对对数降水建模:如果您的原始数据集是 X
和 Y
(所有条目都为 Y > 0
),计算logY = np.log(Y)
并创建您的 GP 模型,例如使用 gpflow.models.GPR((X, logY), kernel)
。然后,您可以预测测试点的 logY,然后可以将其从对数降水量转换回降水量 space。 (这相当于 LogNormal 可能性,目前在 GPflow 中没有实现,尽管这很简单。)