如何设置从未观察到的随机变量派生"observed" PyMC3 随机变量的属性



我正在使用PyMC3,不确定如何将某些变量标记为";观察到";。在一个简单的例子中,我可以将两个输入变量建模为[0,1]上的均匀分布。我知道第三个";输出";随机变量等于两个输入的乘积,假设我观察到第一个输入是1,输出是0。然后我想使用PyMC3来预测第二个输入,在这种情况下,它必须是0。

我不清楚如何告诉PyMC3输出是观察到的,因为它是数学表达式的结果,而不是从构造函数显式创建的。

import pymc3 as pm
with pm.Model() as model:
input1 = pm.Uniform('RV1', lower=0, upper=1, observed=1)  # API is clear how to mark it observed
input2 = pm.Uniform('RV2', lower=0, upper=1)  # This one is not observed
output = input1 * input2  # How to tell PyMC3 the observed value of "output"?
# Now I will do variational inference, sampling, etc... on the model

随机变量在技术上是布尔随机变量,但我需要将它们建模为连续的,以便进行变分推理。我有很多,这是一个最小的例子。设置output.observed = 0似乎不起作用,尽管它不会崩溃。

当对变量进行确定性(即闭式(数学运算时,可以使用pymc3.Deterministic('your_deterministic_var', input1 * input2)概率分布。据我所知,这不允许按照您的要求使用observed关键字,尽管在采样完成后,(pm.sample()(您可以运行pm.sample_posterior_predictive(chain, var_names=['your_deterministic_var'])并使用变量条目,或者您需要的任何内容。

有关确定性的更多信息,请查看文档和PyMC3话语论坛,该论坛比stackoverflow更适合PyMC3问题。