Python 如何使用Pymc3模拟有偏的六面骰子?
如何使用Pymc3模拟6面骰子掷骰?另外,我知道骰子的不同侧面有不同的分布吗?在Python 如何使用Pymc3模拟有偏的六面骰子?,python,bayesian,pymc3,Python,Bayesian,Pymc3,如何使用Pymc3模拟6面骰子掷骰?另外,我知道骰子的不同侧面有不同的分布吗?在PyMC3中模拟1000卷公平的六面骰子的最简单方法是 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 请注意,这
PyMC3
中模拟1000卷公平的六面骰子的最简单方法是
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
查看示例的外观:
请注意,我们正确地计算出其中一方比其他方更经常出现 太好了!再次感谢。请考虑接受答复: