2.4 Monty Hall难题
为了解决蒙蒂大厅(Monty Hall)问题,我将定义一个新的类:
class monty(Pmf):
def __init__(self,hypos):
Pmf.__init__(self)
for hypo in hypos:
self.Set(hypo,1)
self.Normalize()
到目前为止,蒙蒂大厅和曲奇饼是完全一样的。创建Pmf的代码也一样,除了假设的名称:
hypos='ABC'
pmf =Monty(hypos)
对Update的调用几乎是相同的:
data='B'
pmf.Update(data)
Update的实现也是完全一样的:
def Update (self,data):
for hypo in self.Values ():
like = self.Likelihood(data,hypo)
self.Mult(hypo,like)
self.Normalize()
唯一需要些额外工作的是Likelihood:
def Likelihood (self,data,hypo):
if hypo==data:
return 0
elif hypo=='A':
return 0.5
else:
return 1
最后,打印输出的结果是一样的:
for hypo,prob in pmf.Items():
print hypo,prob
答案是
A 0.333333333333
B 0.0
Ç 0.666666666667
在本例中,Likelihood的编写有一点点复杂,但该贝叶斯框架的Update很简单。本节中的代码可以从http://thinkbayes.com/monty.py获得。欲了解更多信息,请参见前言的“代码指南”。
时间: 2024-09-20 05:39:47