【问题标题】:Define different bounds for a multidimentional stochastic variable in pymc在 pymc 中为多维随机变量定义不同的界限
【发布时间】:2013-11-07 22:08:29
【问题描述】:

我在为多维随机变量定义界限时遇到问题。 这是一个解释我的问题的虚拟示例。

如果我想在 [0,100] 之间有一个 3 维离散均匀

import pymc as mc
from numpy import empty

truth = mc.DiscreteUniform("bin1", lower=0, upper=100, value=[50,50,50], size=3)

@mc.deterministic(plot=False)
def unfold(truth=truth):
    out = empty(3)
    for r in xrange(3):
        out[r] = truth[r]
    return out

data = [5, 10, 30]
unfolded = mc.Poisson('unfolded', mu=unfold, value=data, observed=True, size=3)
model = mc.Model([unfolded, unfold, truth])                             
mcmc = mc.MCMC( model )
mcmc.use_step_method(mc.AdaptiveMetropolis, truth)
mcmc.sample(10000,1000,10)

这将为 3 个 bin 采样一个 DiscreteUniform,每个 bin 的范围相同(0 到 100 之间)。

现在,我尝试了几种方法来为每个 bin 定义不同的范围,但无法成功。我尝试了 DiscreteUniform 数组和边界数组(上、下),但它们显然不起作用。

有没有人知道如何为随机变量的各个 bin 定义不同的范围?

【问题讨论】:

    标签: python pymc


    【解决方案1】:

    要定义不同的范围和初始值,您需要调用随机构造函数 N 次以创建变量列表,然后使用容器构造函数使列表 pymc 可读:

    bin1 = mc.DiscreteUniform("bin1", lower=0, upper=100, value=50, size=1)
    bin2 = mc.DiscreteUniform("bin2", lower=0, upper=40, value=20, size=1)
    bin3 = mc.DiscreteUniform("bin3", lower=10, upper=50, value=30, size=1)
    truth = mc.Container([bin1,bin2,bin3])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多