《贝叶斯思维:统计建模的Python学习法》——2.4 Monty Hall难题

本节书摘来异步社区《贝叶斯思维:统计建模的Python学习法》一书中的第2章,第2.4节,作者:【美】Allen B. Downey,更多章节内容可以访问云栖社区“异步社区”公众号查看

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很简单。

上一篇:Redis内核单元测试框架


下一篇:诠释数据降维算法:一文讲尽t-分布邻域嵌入算法(t-SNE)如何有效利用