《贝叶斯思维:统计建模的Python学习法》一2.6 M&M豆问题

    xiaoxiao2024-01-22  160

    本节书摘来自异步社区《贝叶斯思维:统计建模的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,正是我们之前得到的。

    本节中的代码可以从http://thinkbayes.com/m_and_m.py获得。欲了解更多信息,请参见前言的“代码指南”。

    相关资源:贝叶斯思维:统计建模的Python学习法(迷你书).pdf
    最新回复(0)