Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用Pymc3模拟有偏的六面骰子?_Python_Bayesian_Pymc3 - Fatal编程技术网

Python 如何使用Pymc3模拟有偏的六面骰子?

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模拟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
请注意,这比只调用
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
查看示例的外观:


请注意,我们正确地计算出其中一方比其他方更经常出现

太好了!再次感谢。请考虑接受答复: