作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如何使用 Pymc3 模拟 6 面骰子掷骰?另外,我知道骰子的不同面有不同的分布吗?
最佳答案
在 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]) # sums up to 50
with pm.Model():
probs = pm.Dirichlet('probs', a=np.ones(6)) # flat prior
rolls = pm.Multinomial('rolls', n=np.sum(observations), p=probs, observed=observations)
trace = pm.sample(1000)
trace['probs'] # posterior samples of how fair the die are
您可以使用内置的 traceplot
来查看样本的外观:
请注意,我们正确计算出一侧比其他侧出现的频率更高!
关于python - 如何使用 Pymc3 模拟有偏向的 6 面骰子?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46454814/
我正在尝试从 attoparsec 解构 IResult monad分成几 block 。这是IResult data IResult t r = Fail t [String] String
我是一名优秀的程序员,十分优秀!