【问题标题】:How to Simulate a Biased 6-sided Dice using Pymc3?如何使用 Pymc3 模拟有偏差的 6 面骰子?
【发布时间】:2017-09-27 18:27:02
【问题描述】:

如何使用 Pymc3 模拟 6 面掷骰子?另外,我知道骰子的不同面有不同的分布吗?

【问题讨论】:

标签: python bayesian pymc3


【解决方案1】:

PyMC3 中模拟 1000 卷公平 6 面骰子的最简单方法是

import pymc3 as pm

with pm.Model():
    rolls = pm.DiscreteUniform('rolls', lower=1, upper=6)
    trace = pm.sample(1000)
trace['rolls']  # shows you the result of 1000 rolls

请注意,这与仅调用 np.random.randint(1, 7, size=1000) 相比速度较慢,但​​等效。

1000 次不公平的骰子

probs = np.array([0.1, 0.2, 0.3, 0.2, 0.1, 0.1])

with pm.Model():
    rolls = pm.Multinomial('rolls', n=1000, p=probs, shape=6)
    trace = pm.sample(1)

这又是等价的,但比np.random.multinomial(1000, pval=probs) 慢。

想要使用PyMC3的情况是,如果您观察到,比如说,50 次不公平的骰子,有一些事先期望它是一个公平的死,并想要评估该期望的后验。这是一个例子:

observations = np.array([20, 6, 6, 6, 6, 6])
with pm.Model():
    probs = pm.Dirichlet('probs', a=np.ones(6))  # flat prior
    rolls = pm.Multinomial('rolls', n=50, p=probs, observed=observations)
    trace = pm.sample(1000)
trace['probs']  # posterior samples of how fair the die are

您可以使用内置的traceplot 查看示例的外观:

请注意,我们正确地计算出其中一方出现的频率高于其他方!

【讨论】:

  • 完美!再次感谢。
猜你喜欢
  • 1970-01-01
  • 2019-09-22
  • 2015-09-27
  • 1970-01-01
  • 2016-11-12
  • 1970-01-01
  • 2012-09-28
  • 2011-07-12
  • 1970-01-01
相关资源
最近更新 更多