本节书摘来异步社区《贝叶斯思维:统计建模的Python学习法》一书中的第2章,第2.6节,作者:【美】Allen B. Downey,更多章节内容可以访问云栖社区“异步社区”公众号查看
2.6 M&M豆问题
我们可以使用Suite框架来解决M&M豆的问题。除了编写Likelihood有点棘手,其他一切都很简单。
首先,需要对1995年之前和之后的颜色混合情况进行封装:
mix94=dict(brown= 30,
yellow= 20,
red= 20,
green= 10,
orange= 10,
tan= 10)
mix96=dict(blue= 24,
green= 20,
orange= 16,
yellow= 14,
red= 13,
brown= 13)```
然后,封装假设:
hypoA =dict(bag1 = mix94,bag2 = mix96)
hypoB =dict(bag1 = mix96,bag2 = mix94)```
hypoA表示假设袋1是1994年,袋2是1996年。hypoB是相反的组合。
接下来,从假设的名称来映射其含义:
hypotheses=dict(A=hypoA,B=hypoB)```
最后,开始编写Likelihood。在这种情况下,假设hypo是一个A或B的字符串,数据是一个指定了袋子年份和颜色的元组。
def Likelihood(self, data, hypo):
bag, color = data
mix = self.hypotheses[hypo][bag]
like = mix[color]
return like```
下面是创建该suite对象并进行更新的代码:
suite = M_and_M('AB')
suite.Update(('bag1', 'yellow'))
suite.Update(('bag2', 'green'))
suite.Print()```
结果如下:
A 0.740740740741
B 0.259259259259`
A的后验概率大约是20/27,正是我们之前得到的。