如何设置PyMC3随机变量的“observed”属性,这些变量是从未观测到的随机变量派生而来的?

4
我正在使用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 看起来不起作用,尽管它不会崩溃。


1
你有没有找到解决这个问题的方法? - Jsevillamol
1
不能解决所有问题,但我通过解析地计算两个分布的卷积来解决了其中一部分问题。当我添加两个随机变量时,这种方法是有效的,但如果涉及到复杂的操作,可能会很棘手。我也在寻找答案! - user3148185
1个回答

0

当使用变量进行确定性(即闭合形式)数学运算时,您可以使用pymc3.Deterministic('your_deterministic_var', input1 * input2)概率分布。据我所知,这不允许使用您请求的observed关键字,但是在完成采样后(pm.sample()),您可以运行pm.sample_posterior_predictive(chain, var_names=['your_deterministic_var'])并获取变量条目的平均值或任何其他所需内容。

有关Deterministic的更多信息,请查看文档以及PyMC3 Discourse论坛,这比stackoverflow更适合提出PyMC3问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接