目录

0. 前言

1. 什么是蒙提霍尔问题(Monty Hall problem)

2. Naive approach:分类讨论

3. Python蒙特卡洛仿真

4. 直观的理解1

5. 贝叶斯方法

5.1 贝叶斯定理

5.2 历时解释(The diachronic interpretation)

5.3 应用于蒙提霍尔问题


0. 前言

蒙提霍尔问题可能是概率论历史上最具争议的问题。问题的场景极其简单,而其结果却呈现出惊人的反直觉,以至于许多人都无法接受它,曾经引发了巨大的争论。并且有许多著名的人物都在此问题上闹了笑话。

本文介绍蒙提霍尔问题,并给出几种不同的分析和解题思路。

1. 什么是蒙提霍尔问题(Monty Hall problem)

蒙提霍尔问题出现于一档游戏节目“Let's Make a Deal”(蒙提霍尔是当时的主持人)的一个常规节目,假设你是游戏的参加者(你的目标当然是向赢得那辆车,但是你需要能够猜对后面放着车的那扇门),这个节目的进程如下所示:

  • 1.主持人向你展示三扇门,其中一扇门后是一辆车,另外两扇门则是相当微不足道的安慰奖品,比如说,山羊啊、花生油啊什么的。
  • 2.首先主持人让你选择一扇门
  • 3.然后主持人会从另外两扇门中“任”选一扇后面没有车的门打开
  • 4.这时,主持人问你说:“你是坚持你原来的选择还是换到另一扇没有打开的门?”

你应该改变自己的选择吗?

很多人根据直觉觉得应该是没必要交换。因为,除了主持人打开的那扇门,车子出现在另外两扇门后面的概率是相同的。换句话说,主持人打开第二扇门并没有提供什么额外信息,车子出现在第一扇门和最后一扇门的概率没有因为主持人的行为而发生什么改变。

然而,正确的答案是:你绝对应该换到另一扇没有打开的门。这样会让你赢得车子的概率从1/3上升到2/3!

2. Naive approach:分类讨论

最直观的想法应该是如下所示分类讨论法:

记三扇门分别为A、B、C。

考虑车在A后面、B后面和C后面三种情况,针对每一种情况,第一次选择的门又有A、B、C三种情况。对所有情况进行穷举讨论可以得到下表:

所以,确实是换门与不换门赢得车子的情况是6比6,各50%的概率。因此,换不换门无所谓!

但是,且慢。。。有兴趣的小伙伴这里可以停下来思考一下,以上分类讨论和结论正确吗?不正确的话问题出在哪儿呢?

*********************************************分割线*******************************************************

熟悉概率论小伙伴应该知道按照分类计数的方式进行概率计算的前提条件是这些基本事件是等概率的。但是以上表中所列的各基本事件是等概率的吗?其实并不是。

以第1行和第2行为例,车子在门A后面的概率为1/3,第一次选择门A的概率也是1/3,则联合概率为。在这个前提条件下,主持人打开B或者C的概率各为50%,因此有:

然后看第3行,由于第一次选择门B后,主持人没有选择只能打开门C,可知:

同理看第4行,

显而易见,上表所列的12种情况的概率并不相等。把这个概率权重考虑进去后,就可以得到,换门能够赢得车子的概率上升为2/3,而不换车能赢得车子的概率则将为1/3,显然应该毫不犹豫地换车!

3. Python蒙特卡洛仿真

一个简易的基于python的蒙特卡洛仿真如下所示:

# -*- coding: utf-8 -*-
"""
Created on Sat Oct 22 13:35:36 2022@author: chenxy
"""import randomnum_trial = 100000
exchange_win1 = 0
exchange_win2 = 0
for k in range(num_trial):#1. 随机将车子放在3个门后面,分别记为门1,门2,门3car = random.randint(1, 3)#print(car)#2. 随机打开其中任何一扇门open1 = random.randint(1, 3)#3. 主持打开其中一扇门# 如果open1打开的是有车的门,则主持人在剩下两扇门中任选一扇打开# 如果open1打开的是无车的门,则主持人必须打开另一扇无车的门while 1:open2 = random.randint(1, 3)if open2 != open1 and open2 != car:break#4.1 总是切换选择最后那扇没有打开的门。如果该门后有车的话则计数1次final = set([1,2,3]) - set([open1,open2]) #用集合差运算求最后那扇门作为最终选择exchange_win1 += (car in final)#4.2 直接根据第一次选择与有车的门是否一致进行判决        if open1 != car:exchange_win2 += 1print('The win prob of exchanging the door is {0}'.format(exchange_win1/num_trial))
print('The win prob of exchanging the door is {0}'.format(exchange_win2/num_trial))

运行以上程序,当num_trial设置足够大的话,可以得到换门赢车的概率接近2/3。

4. 直观的理解

玩家第一次打开任意一扇门,毫无疑问的是,他恰好打开有车的那扇门的概率是(1/3),车在剩下的两扇门中的概率之和为2/3。不管主持人接下来打开哪扇门,都并没有改变玩家打开的第一扇门中有车的概率(否则就破坏了因果律)。而主持人打开的一定是无车的门,等于是排除了其中一扇门,因此剩下的(2/3)的概率就全部落在未打开的那扇门上。

所以。。。就这么简单。。。坚持之前的选择就坚持了(1/3)的赢得车子的概率,而换门的话自然就有(2/3)的概率赢得车子了。

事实上,从以上仿真程序中用两种方式统计换门的胜率。exchange_win1的统计是实际模拟换门的动作然后判断换的最后那扇门(final)与有车的门(car)是否一致;而exchange_win2就简单粗暴地直接判断最初打开的那扇门(open1)有车的门(car)是否一致。两种方式的结果理所当然地完全一致。由此也可以看出,坚持最初的开的门的胜率就是(1/3)与后面蒙提霍尔的骚操作无关;反过来就说明换门是更明智的选择,这时就跟蒙提霍尔的骚操作有关了,因此如果不是蒙提霍尔的骚操作,你就不知道该换哪个门,所以也就谈不上要换门的事情。

5. 贝叶斯方法

虽然有点杀鸡用牛刀之嫌,本问题也可以用贝叶斯定理来考察解决。

5.1 贝叶斯定理

令A和B为概率空间的两个任意事件,贝叶斯定理可以用以下公式表示:

5.2 历时解释(The diachronic interpretation)

对贝叶斯定理的历时解释给我们提供了基于新的数据,更新现有假设的概率的一个系统性的方式。分别用H(Hypothesis)和D(Data)代替以上公式中的A和B,得到:

在历时解释中,以上公式中每一项都有它的名字和物理含义:

P(H):在我们观测到新的数据D之前假设H成立的概率,这个称为先验概率(prior)

P(D):数据D出现的概率(under any hypothesis,或者说不以任何假设为先决条件的基本概率),在以上公式中它扮演归一化常数(normalizing constant)的角色,通常称为证据(evidence)

P(H|D):观察到数据D后对H的概率的更新值,称为后验概率(posterior)

P(D|H):在H成立的条件下数据D出现的概率,这个称为似然函数(likelihood)

因此,以上公式也可以写成(物理含义看上去更加明确):

以上历时解释版本的贝叶斯定理可以通俗地理解,接收到新的数据(证据)时,相应地更新关于假设H的信念的更新。

打个比方说,两支联赛球队甲和乙,实力相当,但是由于甲是主场,所以你在赛前认为甲队有60%的胜率。即你的假设H是:甲队将获胜,其概率P(H)=60%。这个是比赛开始前的信息,是先验概率。

上半场40分钟,甲队攻入一球。这个就是一个数据D,一个新的evidence。基于这个新的数据,你立即将甲队获胜的概率提高到(比如说)75%了。。。贝叶斯定理给我们提供了一个非常好的反应数据与信念更新的数学框架。

5.3 应用于蒙提霍尔问题

换个看问题的角度,对问题进行简化,如下所示:

不失一般性,记游戏者第一次选择的为门A,随后MontyHall打开的后面没有车的门,记为门B。剩下的一扇门自然就记作门C。游戏者面临的问题是:应该继续坚持A,还是应该改选门C呢?换句话说,理性的游戏者应该根据以上信息判断出奖品在哪扇门(A or C)后的概率最高呢?

有三种可能的假设(车子在门A后面、或在门B后面、或在门C后面),我们将以表格的方式针对每一种假设计算其后验概率(即车子出现在哪扇门后的概率),比较后验概率大小即可知道是否应该换门。

很显然,三种假设先验概率都为1/3。

在这个问题中数据是什么呢?数据D是:蒙提霍尔打开了门B且门B后面没有车子。考虑以下表格中第二行,即假定车子在门A后面(玩家很幸运第一把就打开了正确的门),在这个假设中,蒙提霍尔打开门B的概率是多大呢?很显然,蒙提霍尔打开除A以外的两扇门中的任意一扇的概率是相同的,因此恰好打开当前被打开的这个门B的概率是1/2,也就是说likelihood为。同理,可以计算其余两个假设条件下的likelihood:如果车子在门B后面,则蒙提霍尔不可能打开门B,因此有;如果车子在门C后面,则蒙提霍尔只能打开门B,因此有。结果如下表所示。

Prior

P(H)

Likelihood

P(D|H)

P(H)P(D|H)

Posterior

P(H|D)

A

1/3

1/2 1/6 1/3
B 1/3 0 0 0
C 1/3 1 1/3 2/3

这样,基于prior和likelihood即可得到P(H)P(D|H),并进而得到最后一列的Posterior。

有些小伙伴可能会感到有点疑惑,咦,怎么没有看到P(D)呢?

前面介绍时我们已经提到过P(D)在贝叶斯定理历时解释中所起的作用是作为归一化因子。一般我们都不必关心其绝对值,其实实际应用中也很难实现得到其绝对值。为什么不比关心它的绝对值呢,因为:

一方面,在假设检验问题通常我们只需要关心各种假设的相对的后验概率大小

另一方面,由于存在概率之和必须为1的约束,所以它其实是可以根据其它数据计算出来的。只不过通常我们不必显式地计算出它们来而已。

比如说,以上第4列我们已经得到

由后验概率之和为1,可以计算得出:

由此即可得:

同理可以计算出:

5.4 贝叶斯定理的威力:泛化与推广

如果贝叶斯定理能做的仅限于此,那也没有什么了不起,因为如第4节所示,甚至不用计算就可以通过直观的思考就可以直接得到答案。

贝叶斯定理的真正的威力在于在这相同的数学框架下,可以很方便地以相同的方式解决一大类相同的问题。比如说,对蒙提霍尔问题进行一个简单的条件变化:假设三扇门按从左到右排列,分别记为左、中、右门,蒙提霍尔在玩家打开了第一扇门(可以是左、中、右中任意扇)后,在有选择的前提下总是开剩下的门中靠右的那扇。在这种条件下,蒙提霍尔打开了第二扇门后,游戏玩家是否应该或者有必要换门吗?

注:在【1】中对这个蒙提霍尔问题变体的描述我认为有问题。【1】中的描述是:蒙提霍尔如果可能的话总是选择打开门B,仅在没有选择的时候才选择打开门C(比如说车子在门B后面)。这一描述的问题在于与前面对A、B、C的定义相矛盾。前面的定义是,总是记第一扇被打开的门为A,第二扇被打开的门为B,最后一扇门为C(并不是实现对三扇门分别标记为A、B、C),蒙提霍尔打开了哪扇门,那扇门就叫门B。。。因此“如果可能的话总是选择打开门B”的说法不成立。

【参考文献】

【1】Allen Downey,Thinking Bayes

蒙提霍尔问题(The Monty Hall Problem)解析(贝叶斯分析、Python仿真)相关推荐

  1. 用贝叶斯定理解决三门问题并用Python进行模拟(Bayes' Rule Monty Hall Problem Simulation Python)...

    三门问题(Monty Hall problem)也称为蒙提霍尔问题或蒙提霍尔悖论,出自美国的电视游戏节目<Let's Make a Deal>.问题名字来自该节目的主持人蒙提·霍尔(Mon ...

  2. Monty Hall Problem

    蒙提霍尔三门问题,看到这个问题的描述和答案后.有点不理解,后来看了点其他文章,然后也写了代码验证,弄明白这个问题了. 百度百科上面关于这个问题的描述也是正确的.百度百科对三门问题的解释 Monty H ...

  3. 概率论的学习和整理--番外8:3门问题 (Monty Hall problem)

    1 为什么要专门讨论3门问题 我以前没觉得3门问题有这么重要,但是买了一些老外写的概率书,包括很出名的普林斯顿概率论书上也举这个例子,有的概率论书好像开篇就讨论3门问题 这个可能跟老外,喜欢举例子,喜 ...

  4. 三门问题的计算机模拟,三门问题(Monty Hall problem)的代码模拟

    三门问题(Monty Hall problem)的代码模拟 今天偶尔看到有人在讨论三门问题,这个问题有点意思,但稍微有点绕. 三门问题(Monty Hall problem)亦称为蒙提霍尔问题.蒙特霍 ...

  5. 三门问题(Monty Hall problem)背后的贝叶斯理论

    文章目录 1 前言 2 问题简介 3 直观的解释 4 贝叶斯理论的解释 1 前言 三门问题可以说有着各种版本的解释,但我看了几个版本,觉得没有把其中的条件说清楚,所以还是决定按照自己的理解记录一下这个 ...

  6. 用贝叶斯定理解决三门问题并用Python进行模拟(Bayes‘ Rule Monty Hall Problem Simulation Python)

    用贝叶斯定理解决三门问题并用Python进行模拟(Bayes' Rule Monty Hall Problem Simulation Python) 参考文章: (1)用贝叶斯定理解决三门问题并用Py ...

  7. 有趣的三扇门问题(Monty Hall Problem)

    在刚开始学概率论的时候,估计都接触过三扇门问题,今天我们也来聊聊,其实这个问题特别有趣,故事是这样的: 美国有一个电视游戏节目叫Let's Make a Deal,主持人是蒙提霍尔.他身后有三扇门,其 ...

  8. 趣图 | 著名的悖论蒙提霍尔问题到底是什么?

    来源 | 后端技术指南针 写在前面 前几天和同事聊了个问题,觉得还蛮有趣,决定和大家分享一下. Oh My God! 搞它搞它! 题目描述 我们的热心读者小明被选中参加一个抽奖游戏,游戏规则是这样的: ...

  9. 【Java】蒙提霍尔问题的概率原理及随机化模拟

    问题引入 人们常说:"相信自己的直觉"."跟着自己的直觉走,没错的"."要坚定自己的路"-- 不是说这些话不对,但有时候结果还真不是我们直觉 ...

最新文章

  1. c语言结果用全局变量返回,c语言参数传递和返回值及变量存储.doc
  2. Sitemesh排除Exclude不装饰特定页面的解决办法
  3. java对象赋值给另一个对象_java面向对象编程
  4. docker常用命令,安装常用实例,一步式安装mysql
  5. java–Servlet基础
  6. pip更换镜像源_Ubuntu20.04LTS更换软件源镜像
  7. 修改默认共享内存tmpfs大小
  8. 16999元!华为Mate X 5G折叠屏手机正式发布:不愧是限量款
  9. 【算法导论】贪心算法,递归算法,动态规划算法总结
  10. cfile read 最大读取限制_Read文件一个字节实际会发生多大的磁盘IO?
  11. Linux解决忘记密码的方法
  12. ps3本服务器维修中,PS3大拆解图文详解!降低成本为目的
  13. 完整的ERP流程图大全
  14. 混动汽车HEV混合驱动的MPC控制
  15. 交换机MAC地址表的形成过程动态演示
  16. 3.0-LAB1-C1 实验
  17. 以美颜sdk为例,详解sdk接入流程
  18. 快速上手Django(二) Django 根据模型(models)生成更新数据库表make migrations
  19. win10 设置为静态ip地址
  20. 巧用 @JvmName 解决 Kotlin 函数签名冲突

热门文章

  1. java书签_Java 操作Word书签(一):添加、删除、读取书签
  2. Broken Necklace(USACO官方)
  3. [Opencv]Cascade级联分类器
  4. 使用TP5开发微信服务商支付
  5. VMware官方下载安装包的方法
  6. 常用于应届生面试的24道面试题
  7. python 笔记:打开nii格式(nibabel 库)
  8. lis算法c语言,LCS、LIS、LICS算法
  9. R语言melt、table、cut函数应用及解释
  10. SAP SE16N 如何显示英文