【发布时间】:2017-02-14 06:36:59
【问题描述】:
TL;博士
对以随机变量(确定性也随机)作为输入的 pm.Deterministic 变量进行后验预测检查的正确方法是什么?
太短了;没看懂
假设我们有一个像这样的pymc3 模型:
import pymc3 as pm
with pm.Model() as model:
# Arbitrary, trainable distributions.
dist1 = pm.Normal("dist1", 0, 1)
dist2 = pm.Normal("dist2", dist1, 1)
# Arbitrary, deterministic theano math.
val1 = pm.Deterministic("val1", arb1(dist2))
# Arbitrary custom likelihood.
cdist = pm.DensityDistribution("cdist", logp(val1), observed=get_data())
# Arbitrary, deterministic theano math.
val2 = pm.Deterministic("val2", arb2(val1))
我可能会误解,但我的意图是对 dist1 和 dist2 的后验进行采样,并将这些样本输入到确定性变量中。只能对观察到的随机变量进行后验预测检查吗?
使用pymc3.sampling.sample_ppc 从dist2 和其他随机变量中获取后验预测样本很简单,但我的模型的大部分值来自val1 和val2 的状态,给定这些样本。
问题在于pm.Deterministic(.) 似乎返回了th.TensorVariable。所以,当它被调用时:
ppc = pm.sample_ppc(_trace, vars=[val1, val2])["val1", "val2"]
...和pymc3 在pymc3.sampling 中尝试此代码块:
410 for var in vars:
--> 411 ppc[var.name].append(var.distribution.random(point=param,
412 size=size))
...它抱怨是因为th.TensorVariable 显然没有.distribution。
那么,通过确定性携带随机后验样本的正确方法是什么?我是否需要显式创建一个 th.function 来获取随机后验样本并计算确定性值?考虑到pymc3 已经有了图表,这似乎很愚蠢。
【问题讨论】: