本文共 936 字,大约阅读时间需要 3 分钟。
本节书摘来异步社区《贝叶斯思维:统计建模的Python学习法》一书中的第2章,第2.4节,作者:【美】Allen B. Downey,更多章节内容可以访问云栖社区“异步社区”公众号查看
为了解决蒙蒂大厅(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://ilddx.baihongyu.com/