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

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

《贝叶斯思维:统计建模的Python学习法》一2.4 Monty Hall难题的相关文章

《贝叶斯思维:统计建模的Python学习法》——导读

前言 贝叶斯思维:统计建模的Python学习法 学习之道 这本书以及Think系列其他书籍的一个前提是:只要懂得编程,你就能用这个技能去学习其他的内容 . 绝大多数贝叶斯统计的书使用数学符号并以数学概念的形式表示数学思想,比如微积分.但本书使用了Python代码而不是数学,离散近似而不是连续数学.结果就是原本需要积分的地方变成了求和,概率分布的大多数操作变成了简单的循环. 我认为这样的表述是易于理解的,至少对于有编程经验的人们来说是这样的.当作建模选择时也非常实用,因为我们可以选取最合适的模型而

《贝叶斯思维:统计建模的Python学习法》一第2章 统计计算2.1 分布

第2章 统计计算 贝叶斯思维:统计建模的Python学习法 2.1 分布 在统计上,分布是一组值及其对应的概率. 例如,如果滚动一个六面骰子,可能的值是数字1至6,与每个值关联的概率是1/6. 再举一个例子,你应该有兴趣了解在日常的英语使用中每个单词出现的次数.你可以建立一个包含每个字及它出现的次数的分布. 为了表示Python中的分布,可以使用一个字典映射某个值和它的概率.我编写了一个名为Pmf的类,利用Python字典实现了上述功能,而且提供了一些有用的方法.为了对应概率质量函数这种分布的数

《贝叶斯思维:统计建模的Python学习法》——第1章 贝叶斯定理 1.1 条件概率

第1章 贝叶斯定理 贝叶斯思维:统计建模的Python学习法 1.1 条件概率 所有贝叶斯统计的方法都基于贝叶斯定理,如果有条件概率的学习基础,意识到这一点很自然.因此我们会从概率.条件概率开始,然后到贝叶斯定理,最后讨论贝叶斯统计的内容. 概率表示为0和1之间的数字(包括0和1),含义是某一事件或者预测行为的可信程度,1值表示"事件为真"的情形肯定发生,或表述为预测成真:而0值则表示"事件为真"这一情形为假. 其他中间值表示确定性的程度.例如,0.5通常也会写成5

《贝叶斯思维:统计建模的Python学习法》——第2章 统计计算 2.1 分布

第2章 统计计算 贝叶斯思维:统计建模的Python学习法 2.1 分布 在统计上,分布是一组值及其对应的概率. 例如,如果滚动一个六面骰子,可能的值是数字1至6,与每个值关联的概率是1/6. 再举一个例子,你应该有兴趣了解在日常的英语使用中每个单词出现的次数.你可以建立一个包含每个字及它出现的次数的分布. 为了表示Python中的分布,可以使用一个字典映射某个值和它的概率.我编写了一个名为Pmf的类,利用Python字典实现了上述功能,而且提供了一些有用的方法.为了对应概率质量函数这种分布的数

《贝叶斯思维:统计建模的Python学习法》一第1章 贝叶斯定理1.1 条件概率

第1章 贝叶斯定理 贝叶斯思维:统计建模的Python学习法 1.1 条件概率 所有贝叶斯统计的方法都基于贝叶斯定理,如果有条件概率的学习基础,意识到这一点很自然.因此我们会从概率.条件概率开始,然后到贝叶斯定理,最后讨论贝叶斯统计的内容. 概率表示为0和1之间的数字(包括0和1),含义是某一事件或者预测行为的可信程度,1值表示"事件为真"的情形肯定发生,或表述为预测成真:而0值则表示"事件为真"这一情形为假. 其他中间值表示确定性的程度.例如,0.5通常也会写成5

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

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)``` 对Upda

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

1.7 Monty Hall难题 蒙蒂大厅(Monty Hall problem)难题可能是历史上最有争议的概率问题.问题看似简单,但正确答案如此有悖常理以致很多人不能接受,很多聪明人都难堪于自己搞错了反而据理力争,而且是公开的. 蒙蒂大厅是游戏节目"来做个交易"(Let's Make a Deal)的主场.蒙蒂大厅难题也是这一节目的常规游戏之一.如果你参加节目,规则是这样的: 蒙蒂向你示意三个关闭的大门,然后告诉你每个门后都有一个奖品:一个奖品是一辆车,另外两个是像花生酱和假指甲这样

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

1.7 Monty Hall难题 蒙蒂大厅(Monty Hall problem)难题可能是历史上最有争议的概率问题.问题看似简单,但正确答案如此有悖常理以致很多人不能接受,很多聪明人都难堪于自己搞错了反而据理力争,而且是公开的. 蒙蒂大厅是游戏节目"来做个交易"(Let's Make a Deal)的主场.蒙蒂大厅难题也是这一节目的常规游戏之一.如果你参加节目,规则是这样的: 蒙蒂向你示意三个关闭的大门,然后告诉你每个门后都有一个奖品:一个奖品是一辆车,另外两个是像花生酱和假指甲这样

《贝叶斯思维:统计建模的Python学习法》——2.3 贝叶斯框架

2.3 贝叶斯框架 在继续讨论其他的问题前,我想在上一节的基础上重写代码以使其更通用.首先我将定义一个类来封装与此相关的代码 : class Cookie(Pmf): def __init__(self,hypos): Pmf.__init__(self) for hypo in hypos: self.Set(hypo,1) self.Normalize()``` Cookie对象是一个映射假设到概率的Pmf对象.__init__方法给每个假设赋予相同的先验概率.如上一节中就有两种假设: hy