三门问题的实验验证:贝叶斯概率公式实战

news/2025/2/21 5:11:09/

引言

        数理统计与概率论经常出现在我们的日常生活中,如果能灵活掌握,可以起到很大的帮助。下面通过几个经典问题的探讨,浅入深出,更加深刻的理解贝叶斯全概率公式和贝叶斯公式的作用。

        我的最深的体会就是,当某些已发生的条件下,改变会让我们的处境更加有利

三囚犯问题

        有三个死囚徒:张三、李四、王麻子,遇到新皇登基大赦事件,但是只有一个人可被释放,另外两人处死。得知消息后,他们都非常开心,因为都有被释放的一线可能,但是开心之后又感觉无限恐怖,不知道谁会被释放。张三脑子比较灵活,为了提前获取情报,便向看守套近乎,看守一开始不吃这一套,后来,张三启动逆向思维问看守:现在大家都知道3个囚犯必有2人被处死,1人被释放。所以李四和王麻子中必有1人会被处死,即便我知道这2人当中谁会被处死,对我来说也并没有什么好处,那么你能不能告诉我,他们谁会被处死呢?看守听后觉得很有道理,于是便告诉他,李四会被处死。得到这个消息后,张三兴奋不已,他认为李四被处死,自己和王麻子被释放的概率就从1/3上升到了1/2。按照张三的逻辑,他被处死的概率自然也由2/3变成了1/2。那么张三的逻辑对吗?

        张三的逻辑是错误的。正确的答案是:李四被处死,张三被释放的概率不变,王麻子被释放的概率将提升至2/3。想一下,这是为什么呢?

三门问题

        三门问题源自1970年,美国纽约电视台创建了一个电视游戏节目,名字叫做《让我们做个交易吧》。主持人在台上放置三扇关闭了的门,其中一扇门的后面藏着一辆跑车,其余两扇门后面藏的则是很便宜的东西,比如说其它两扇门后面藏的是一头羊。游戏的规则就是让参与者从这三扇关闭的门中做出选择,如果参与者选中了藏有跑车的门,那么他将会获得的奖品就是这辆跑车,如果选择的门后面没有跑车而是羊,则挑战失败,没有任何奖品。

        对于每个参与者来说,肯定想选择藏有跑车的门,刚开始游戏的规则比较简单,就是嘉宾随意选择一扇门,主持人打开,如果抽中跑车就赚到了。大家看明白了吗?不论你选择哪一扇门,中奖的概率都是1/3。几期节目之后,主持人认为这样的节目太过单调,缺乏舞台活力,于是他在游戏环节中,和参与者打心理战,经常突如其来的变换规则,给参赛人和观众来个猝不及防。既使得观众们困惑不已,又迫使参赛者“脑筋急转弯”。具体操作是这样的:
        在参与者选中了一扇门之后,主持人并不急着打开参与者选择的那扇门,宣布游戏的结果,而是选择先打开另一扇藏有山羊的门(这里需要说明的是,主持人是知道跑车在哪扇门后面的)。然后问参与者是否换门。

         比如,参与者选择了1号门,主持人打开了2号是藏有山羊的门,主持人问参赛者要不要换门。我想大多数人的第一反应和参与者是一样的,换门和不换门有什么区别吗?一共就只有三扇门,打开了一扇藏有山羊的门,剩下的两扇门中必定有一扇能够中奖一扇不能,换不换的概率不都是1/2吗?这个时候你会作何选择?大部分观众都支持不换门,参与者也认为换门没有意义,于是就没有换门,结果1号门的后面是一只羊。

        这个节目非常火爆,但是参与者确没有严肃的思考过是否应该换门的问题。于是有观众把这个问题写信给了当时一个非常聪明的学者玛丽莲.沃斯.莎凡特,让其帮忙推算一下到底应不应该换门呢。玛丽莲经过一番思考后,给出的答案是:应该换门!玛丽莲认为换门后获胜的概率是不换门的两倍,也就是说换门的取胜概率是2/3,不换门则为1/3。玛丽莲是如何解题的呢?
        玛丽莲根据游戏画了一张图,她认为,该游戏只能出现以下3种情况。在上面参赛环境下,参与者换门获胜的概率是2/3,不换门获胜的概率是1/3。

参与者的选择换门不换门
羊1获胜失败
羊2获胜失败
跑车失败获胜
参与者获胜概率2/31/3

        玛丽莲计算的结果和我们的直觉似乎背道而驰,直觉告诉我们换门与不换门中奖的概率都是1/2,玛丽莲的答案确实2/3,这和前面三个囚徒问题的张三被释放的概率一模一样。

         这有点像双缝干涉实验,有人观察的时候,光就呈现了粒子状,屏幕上会留下两条笔直的光斑,没有人观察的时候,光就呈波状,屏幕上就会出现一道道斑马线,难道主持人在开门的一瞬间,概率就被自动的转移到未被选中和打开的那一扇门上了吗?是不是有点玄学的味道了,直觉告诉你,这是不可能的,那么玛丽莲算错了吗?

验证三门问题

        实践是检验真理的唯一标准,那么我们来设计一个实验,来通过多次实验验证这个问题。

设计实验的思路是这样的:

1,用计算机模拟产生0,1,2号门中哪扇门放跑车

2,用计算机模拟参与者选择的是0,1,2中哪扇门

3,如果参与者刚好选中跑车的门,不换门获胜1次;否则换门获胜1次。

        初始设置实验次数100000,换门获胜次数初始值0,不换门获胜次数初始值0,在按照设置的实验次数重复上面1,2,3步骤,记录最终换门与不换门在实验中获胜的次数,即可得到换门与不换门的获胜概率。下面附有python代码。

def verify_three_door_question():exp_times=100000changeDoor_sucess = 0noChangeDoor_sucess = 0for i in range(exp_times):set_car_idx = np.random.randint(3) #表示在0,1,2中随机选择1个值,跑车就放在这扇门后面。choice = np.random.randint(3) #选手随机选择一扇门,认为跑车在这扇门后面。if choice==set_car_idx:noChangeDoor_sucess +=1else:changeDoor_sucess +=1print("experiment time is ",exp_times)print("changeDoor sucess probability is {} \nnoChangeDoor sucess probability is  {}".format(changeDoor_sucess/exp_times, noChangeDoor_sucess/exp_times))
experiment time is  100000
changeDoor sucess probability is 0.66672 
noChangeDoor sucess probability is  0.33328Process finished with exit code 0

        实验的结论是换门获胜概率趋于2/3, 不换门获胜概率趋于1/3。这与玛丽莲的结论是吻合的。

贝叶斯定理

        其实上面三囚徒问题和三门问题的理论推导就是概率论中的贝叶斯定理。贝叶斯定理是由英国神学家、数学家、数理统计学家和哲学家托马斯.贝叶斯提出的。

        贝叶斯定理是关于随机事件A和B的条件概率(或边缘概率)的一种定理。也就是人们根据不确定信息,做出推理和决策,需要对各种结论的概率作出估计,这类推理称为概率推理。

全概率公式:

贝叶斯公式:

P(A/B)= (P(B/A) * P(A)) / P(B)

其中P代表概率所对应的事件,比如P(A)是A发生的概率;P(B)是B发生的概率;P(A/B)是在B发生的情况下,A发生的概率;P(B/A)是在A发生的情况下,B发生的概率。贝叶斯公式是全概率公式的逆公式,意思为:现在已知B事件已经发生了,找出是由哪个条件下引起的。

        比如对于三门事件,代入全概率公式求解,事件B表示参赛者获得成功,事件A表示参赛者的首次选择:

P(B) = P(A1) * P(B/A1) +  P(A2) * P(B/A2) + P(A3) * P(B/A3)

          = 1/3 *  1/2  + 1/3 * 1/2 + 1/3 * 1/2  = 1/2

羊1羊2跑车
参赛者选择事件A1A2A3
参赛者选择的概率P(A1)=1/3P(A2)=1/3P(A3)=1/3
参赛者在Ai条件下获胜的概率

P(B/A1)=1/2

(换赢, 不换输,所以概率是1/2)

P(B/A2)=1/2

(换赢, 不换输,所以概率是1/2)

P(B/A3)=1/2

(换输, 不换赢,所以概率是1/2)

将贝叶斯公式代入三门问题:

P(B)是指参赛者获胜的概率,在全概率公式推导中,P(B) = 1/2

 求获胜情况下,分别选了换门和不换门的概率为P(AjB),计算得:

P(A1/B) =( P(A1) * P(B/A1)) / P(B)  = (1/2 * 2/3)  /  (1/2) =  2/3

P(A2/B) =( P(A2) * P(B/A2)) / P(B)  = (1/2 * 1/3)  /  (1/2) =  1/3

所以,参赛者获胜的情况下,A1换门事件的发生概率是2/3。


http://www.ppmy.cn/news/100338.html

相关文章

c++—封装:构造函数、析构函数、成员操作

1. 封装的主要目的是解决代码的维护性问题,经过封装的函数代码独立性高; 2. 封装的演变历史,以栈为例子介绍: ①成员(top、data[ ])都在main函数里,动作方法(push、pop)…

应急响应-windows

win系统常见的安全事件 1.病毒,木马,蠕虫事件 2.web服务器入侵事件或第三方服务入侵事件 3.系统入侵事件,用win漏洞入侵系统,利用弱口令等。 4.网络攻击事件,如DDos,ARP欺骗等。 win系统安全事件发现的…

【经验总结】浮点数double/float精度误差问题总结

现象 最近做的项目中经常会在C环境下和高精度的double浮点类型数据打交道 这些double类型数据精度级别可能到 pico级别(10^-12) 甚至 femto级别(10^-15),用来表示集成电路的一些微观属性 但是非常诡异的是,不知道为什么在对这些高精度的浮点数进行运算时&#xff…

Threejs进阶之十六:音频可视化

最近事情比较多,博客更新的有点慢了,今天更新一期,主要聊一聊通过Threejs提供的音频API实现音频的可视化效果,先看下最终实现的效果 音频可视化 目录 Threejs中音频相关的类Audio 类构造函数常用属性常用方法创建Audio对象示例 Au…

RPC原理与实现

rpc叫做远程过程调用,是指一台机器上的服务通过通信协议调用网络中另一台机器上的程序,并拿到结果。 1、基本流程 基本流程为: 客户端程序通过Client Stub调度rpc函数Client Stub将调用方法、参数按照通信协议序列化成网络二进制数据&#…

IT公司的吉祥“树” 二叉树-(堆)C语言创建

目录 🍪前言 一、树概念及结构 ✅基本概念 ✅树的专有名词 ✅ 树的表示 🚩孩子兄弟表示法 二、二叉树概念及结构 ✅概念 😍😍现实中的二叉树(又称IT公司的吉祥物)😍😍 ✅…

django+python协同过滤推荐算法网上购物商城系统的n9u33

本毕业设计的内容是设计实现一个基于 Django框架的智能推荐算法。它是以 Python语言,MYSQL为数据库开发平台,Tomcat网络信息服务作为应用服务器。智能推荐算法的功能已基本实现,主要包括用户、商品分类、购物商品、订单等。本项目软件架构选择…

基于QT C++封装微软开源的edge-TTS

微软Edge TTS是一种先进的语音合成技术,它能够将文本转换为自然流畅的语音。该技术基于深度学习和人工智能技术,能够模拟人类语音的音调、语速、语调和情感,使得合成的语音听起来非常自然。 微软edge-tts项目地址:GitHub - rany2…