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

news2025/1/4 19:23:39

引言

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

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

三囚犯问题

        有三个死囚徒:张三、李四、王麻子,遇到新皇登基大赦事件,但是只有一个人可被释放,另外两人处死。得知消息后,他们都非常开心,因为都有被释放的一线可能,但是开心之后又感觉无限恐怖,不知道谁会被释放。张三脑子比较灵活,为了提前获取情报,便向看守套近乎,看守一开始不吃这一套,后来,张三启动逆向思维问看守:现在大家都知道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=100000
    changeDoor_sucess = 0
    noChangeDoor_sucess = 0
    for 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 +=1
        else:
            changeDoor_sucess +=1

    print("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.33328

Process 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.coloradmin.cn/o/581371.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于Go开发PaaS平台3

Go开发PaaS平台核心功能 代码仓库地址GitHub - yunixiangfeng/gopaas 10-18 中间件前端页面以及核心API开发(中) C:\Users\Administrator\Desktop\gopaas\middlewareapi\handler\middlewareApiHandler.go package handlerimport ("context"…

【技术解决方案】企业如何从SpringBoot应用平滑迁移到云原生K8s平台

文章目录 在K8S上部署Spring Cloud Alibaba在Kubernetes上部署Spring Cloud Kubernetes在Kubernetes上部署Spring Boot应用方案对比分析拥抱Service Mesh关于DevopsServerless最佳实践 好久不见了,小伙伴们,你们最近还好吗?有没有想我&#x…

常量池介绍

什么是“字面量”和“符号引用”和"直接引用" 最近看jvm时遇到了“字面量”和“符号引用”这两个概念,它们被存放在运行时常量池,看了一些博客以后对这两个概念有了初步认识。 字面量可以理解为实际值,int a 8中的8和String a …

linux互斥锁(pthread_mutex)知识点总结

对于多线程程序来说,我们往往需要对这些多线程进行同步。同步(synchronization)是指在一定的时间内只允许某一个线程访问某个资源。而在此时间内,不允许其它的线程访问该资源。我们可以通过互斥锁(mutex)&a…

1、Vue.js---Vue核心

目录 Vue是什么 什么是渐进式: Vue 的特点 与其它 JS 框架的关联 Vue 周边库 搭建Vue开发环境(2种方式) 1、直接用 2、NPM Hello小案例 小结: 模板语法 代码 小结: 数据绑定 代码: 小结&…

11、渗透性测试及验收测试

目录 什么是安全测试 安全测试与常规测试的区别 SQL注入漏洞 SQL注入漏洞会带来以下几种常见的后果: SQL注入漏洞攻击流程 注入点类型 SQL注入的防范措施 XSS跨站脚本漏洞 XSS原理解析 XSS类型 1、反射型XSS 2、存储型XSS 3、存储型XSS 查找XSS漏洞的…

1.4. 运算符与表达式

在 Java 中,运算符是用于执行特定操作的符号,而表达式是由变量、常量和运算符组成的一段代码,用于计算值。本节将介绍 Java 中的常用运算符和表达式的使用。 1.4.1. 算术运算符 Java 支持以下算术运算符: 加法(&…

C语言基础习题讲解

C语言基础习题讲解 运算符判断简单循环 运算符 1. 设计一个程序, 输入三位数a, 分别输出个,十,百位. (0<a<1000) 样例输入: 251 样例输出: 2 5 1 #include <stdio.h> int main() {int input 0;int x 0;int y 0;int z 0;scanf("%d", &input);x …

chatgpt赋能python:Python三次方函数介绍

Python三次方函数介绍 Python是一种流行的编程语言&#xff0c;用于各种应用程序&#xff0c;包括数据分析和机器学习。Python三次方函数是Python语言中的一个内置函数&#xff0c;可用于计算一个数字的三次方。本文将介绍Python三次方函数的相关内容并提供一些示例。 Python…

chatgpt赋能python:Python三个数相加的方法与应用

Python三个数相加的方法与应用 在现代编程语言中&#xff0c;Python是一个非常流行的语言。Python语言的的特点是易学易用、功能强大、语法简洁等。在Python中&#xff0c;运算也是非常方便的&#xff0c;特别是对于数值计算。本文将讨论如何在Python中实现三个数的加法运算&a…

LeetCode高频算法刷题记录11

文章目录 1. 最大正方形【中等】1.1 题目描述1.2 解题思路1.3 代码实现 2. 在排序数组中查找元素的第一个和最后一个位置【中等】2.1 题目描述2.2 解题思路2.3 代码实现 3. 搜索二维矩阵 II【中等】3.1 题目描述3.2 解题思路3.3 代码实现 4. 翻转二叉树【简单】4.1 题目描述4.2…

POWERLINK协议在stm32单片机+w5500移植成功经验分享

连续折腾了多个晚上&#xff0c;又趁周末又花了一天时间&#xff0c;终于把powerlink协议移植成功到单片机上啦。本想放弃&#xff0c;但想了下不管我能不能用上&#xff0c;结个尾吧&#xff0c;分享给有需要的人。放弃并不难&#xff0c;但坚持一定很酷。为了移植测试这个协议…

Arcgis小技巧【13】——和数据统计相关的各种工具

在Arcgis中可以通过属性表中字段的【统计】功能或使用统计相关的工具对属性表进行数据统计。 在Arcgis工具箱中有一组【统计分析】工具集&#xff0c;不仅包含对属性数据执行标准统计分析&#xff08;例如平均值、最小值、最大值和标准差&#xff09;的工具&#xff0c;也包含…

表的增删改查

目录 表的增删改查create(创建)单行数据 全列插入多行数据 指定列插入插入否则更新替换 retrieve(读取)SELECT 列全列查询指定列查询查询字段为表达式为查询结果指定别名结果去重 WHERE 条件英语不及格的同学及英语成绩 ( < 60 )&#xff08;<&#xff09;语文成绩在 […

个人博客-SpringBoot+Vue3项目实战(6)- 二次封装Axios

目录 前言新建axiosUtil.js 文件基本配置统一URL.env文件与环境变量示例参考资料 请求头超时时间 request 拦截器response 拦截器统一Api管理测试 前言 在上文中&#xff0c;我们封装了统一的后端数据返回结果&#xff0c;有了标准化的接口数据&#xff0c;我们就可以针对它&a…

【Linux性能优化】你知道什么是平衡负载么

什么是平衡负载 首先大家思考一下&#xff0c;当你发现自己的服务变慢时&#xff0c;你会首先使用什么命令来排查&#xff1f;我通常做的第一件事&#xff0c;就是执行top或者uptime命令来了解系统的负载情况。比如像下面这样&#xff0c;我在命令行里输入top命令&#xff0c;…

Springboot +spring security,创建SpringSecurity项目

一.简介 搭建第一个Spring Security项目&#xff0c;看看如何利用Spring Security来保护Java Web项目。 二. 创建SpringSecurity项目 我们这边使用idea进行创建。 2.1创建一个基于Maven的Project项目。 2.2设置项目名称和存储位置 2.3添加项目依赖 在pom.xml文件中&#x…

LeetCode 128 最长连续序列

LeetCode 128 最长连续序列 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://leetcode.cn/problems/longest-consecutive-sequence/description/ 博主Github&#xff1a;https://github.com/GDUT-Rp/LeetCode 题目&#xff1a; 给定一个未排…

【双系统ubuntu安装指引】配置一个顺手的深度学习环境

文章目录 前言1. 前置安装 前言 版本&#xff1a;ubuntu20.04 桌面版 normal安装 第一件事&#xff0c;切换源&#xff1a;换成阿里源 https://blog.csdn.net/u010092716/article/details/125832062 第二件事输入法安装&#xff0c;指引在这里 https://blog.csdn.net/q54434431…

JMeter性能测试:JMeter多用户并发模拟及压测结果分析

目录 JMeter设置 JMeter线程组 JMeter压测实例 View Results Tree Aggregate Report 命令行方式执行压测 jtl文件解析 JMeter多用户并发模拟 JMeter设置 多用户并发数的多少与计算机内存有关&#xff0c;设置 jmeter.bat (Windows) 或者 jmeter.sh (Linux)&#xff1a;…