【问题标题】:Posterior Predictive Check on PyMC3 Deterministic VariablePyMC3确定性变量的后验预测检查
【发布时间】: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 已经有了图表,这似乎很愚蠢。

【问题讨论】:

    标签: python theano pymc3


    【解决方案1】:

    是的,我误解了.sample_ppc 的目的。对于未观察到的变量,您不需要它,因为这些变量在跟踪中有样本。观察到的变量不会从中采样,因为它们的数据是被观察到的,因此您需要sample_ppc 来生成样本。

    简而言之,我可以从跟踪中收集pm.Deterministic 变量的样本。

    【讨论】:

      猜你喜欢
      • 2018-01-30
      • 1970-01-01
      • 1970-01-01
      • 2015-09-27
      • 2016-09-15
      • 2021-05-22
      • 1970-01-01
      • 1970-01-01
      • 2021-03-12
      相关资源
      最近更新 更多