概率统计——三扇门游戏与贝叶斯定理

本文通过三扇门问题探讨概率论中的条件概率、全概率公式和贝叶斯定理。解释了为何在主持人揭示一扇错误门后,改变选择能提高赢得大奖的概率,强调了贝叶斯定理在理解概率事件中的作用。
摘要由CSDN通过智能技术生成

本文首发于公众号:TechFlow

在概率论的课本上有一个经典的问题,一直困扰我很久。有很多次我以为我想明白了,过了一段时间却又会糊涂。这个问题学过概率论的同学想必都知道,就是著名的三扇门问题。
说是之前在美国有一个著名的综艺节目,这个节目里有三扇关闭着的门。其中有两扇的后面是山羊,有一扇则放着一辆豪车。主持人会让嘉宾做出选择,嘉宾做出选择之后,主持人会打开其中错误的一扇门,询问嘉宾:伙计,你有一次更改选择的机会,你要使用吗?
节目的效果如何我们不谈,但是背后的数学问题却很有意思。我们更改或者不更改选择,究竟分别有多大的赢面呢?

我们从直觉来分析,我们更不更换答案应该不会影响。毕竟三扇门里有一个正确答案,主持人排除的是错误答案,也就是说正确答案就在剩下的两个门里。不管我们换不换选择,门后是大奖的概率都应该是二分之一才对。但是书上的答案是如果不更换的话,获奖的概率是三分之一,而更换的话,获奖的概率高达三分之二。

这个答案显然和我们的直觉违背,所以,我们去探究一下其中隐藏的深层次的数学原理就很有必要了。实际上,这也是概率论当中理解条件概率和贝叶斯公式非常重要的一个例题。

条件概率

条件概率大家都不陌生,我们在很早的时候就在数学课上学过。

简单来复习一下,假设在样本空间当中存在A、B两个事件。如果A、B两个事件之间没有任何关联,那么就认为它们是独立事件。比如说,如果把我今天早上喝了牛奶当做事件A,我这篇文章转发量超过10当做事件B。显然这两个事件没有任何关联,我喝不喝牛奶完全不会影响文章的转发量。那么就叫做这两个事件是独立事件:

P ( A B ) = P ( A ) P ( B ) P(AB)=P(A)P(B) P(AB)=P(A)P(B)

当然也会存在两个事件彼此有关联的情况,比如我早上喝牛奶和我上班有没有迟到很有可能就是关联事件。因为早上喝牛奶要花时间,很有可能会影响是否迟到。在这个时候P(AB)和两个事件都有关联,就不只是简单的乘积了。

如上图所示,当AB两个事件不是独立事件的时候。P(AB)指的就是AB两个事件的交集,可以认为成在B事件发生的前提下A事件发生,或者是A事件发生的前提下,发生B事件。

概率论上将某件事发生的前提下另一件事发生的概率称为条件概率,写作P(B|A)。

我们把前文的结论写成公式:

P ( A B ) = P ( A ) P ( B ∣ A ) = P ( B ) P ( A ∣ B ) P ( B ∣ A ) = P ( A B ) P ( A ) = P ( B ) P ( A ∣ B ) P ( A ) P(AB)=P(A)P(B|A)=P(B)P(A|B)\\ P(B|A)=\frac{P(AB)}{P(A)}=\frac{P(B)P(A|B)}{P(A)} P(AB)=P(A)P(BA)=P(B)P(AB)P(BA)=P(A)P(AB)=P(A)P(B)P(AB)

这个公式推导非常自然,不过用处却很大。因为很多时候条件概率并不直观,需要我们借助这个公式进行计算。

我们看一道书上的经典例题,巩固一下。

假设AB两个城市,A城市下雨的概率是20%,B城市下雨的概率是18%,两地都下雨的概率是12%,请问B下雨,A也下雨的概率是多少。

这题很简单,我们可以直接套用公式,显然 P ( A ) = 20 % , P ( B ) = 18 % , P ( A B ) = 12 % P(A)=20\% ,\quad P(B)=18\% ,\quad P(AB)=12\% P(A)=20%,P(B)=18%,P(AB)=12%

那么:

P ( A ∣ B ) = P ( A B ) P ( B ) = 12 % 18 % = 2 3 P(A|B)=\frac{P(AB)}{P(B)}=\frac{12\%}{18\%}=\frac{2}{3} P(AB)=

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
你的程序加密过OD MD5值支持二次开发使用 防破解验证也可实现一机一码 VC++ 开发 STARTUPINFO startup; PROCESS_INFORMATION process; CString g_strCompanyName1 = ""; CString g_strCompanyName2 = ""; CString g_strCompanyName3 = ""; CString g_strCompanyName = "**"; BOOL CTaiShanApp::InitInstance() { AfxEnableControlContainer(); //#ifdef ZJH m_gMessageID = ::RegisterWindowMessage("WsSendMessageHqData"); CFileFind fnd; if(S_OK != ::CoInitialize (NULL)) return FALSE; // ReadDiskIDPartCwd(); // if(!FyRegister::IsValidUser()) // return FALSE; memset( &startup, 0, sizeof( startup ) ); startup.cb = sizeof( startup ); memset( &process, 0, sizeof( process ) ); if(fnd.FindFile ("WsSendMessageShare.exe")) { m_gbUseExe = true; } hAppMutex=::CreateMutex(NULL,TRUE,m_pszExeName); if(GetLastError() == ERROR_ALREADY_EXISTS) { CWnd *pPrevWnd = CWnd::GetDesktopWindow()->GetWindow(GW_CHILD); while(pPrevWnd) { if(::GetProp(pPrevWnd->GetSafeHwnd(),m_pszExeName)) { if(pPrevWnd->IsIconic()) pPrevWnd->ShowWindow(SW_RESTORE); pPrevWnd->SetForegroundWindow(); pPrevWnd->GetLastActivePopup()->SetForegroundWindow(); return false; } pPrevWnd = pPrevWnd->GetWindow(GW_HWNDNEXT); } return false; } //#endif #ifndef _NET_AUTHEN HMODULE hModule; hModule = LoadLibrary("ide21201.dll"); if (hModule==NULL) { AfxMessageBox("Can't find ide21201.dll"); return FALSE; } char *(WINAPI * GetIdeSerial)(); GetIdeSerial = (char *(WINAPI *)())GetProcAddress(hModule, "GetIdeSerial"); if (GetIdeSerial==NULL) { AfxMessageBox("Can't find GetIdeSerial in ide21201.dll"); return FALSE; } CString strSerialNumber;// = SERIAL_NUMBER; strSerialNumber = GetIdeSerial(); strSerialNumber.TrimLeft(" "); if (strSerialNumber.Compare(SERIAL_NUMBER)!=0) { AfxMessageBox("序列号错误"); return FALSE; } #else CDlgLogin dlgLogin; int nResponse = dlgLogin.DoModal(); if (nResponse!=1) return FALSE; #endif /* CDialogShowInformation dlg; dlg.DoModal();*/ int nResult; m_bAppAuthorized=TRUE; // Standard initialization // If you are not using these features and wish to reduce the size // of your final executable, you should remove from the following // the specific initialization routines you do not need. CTaiTestSplash *m_splash; BOOL SplashOpen=FALSE; m_splash = new CTaiTestSplash; SplashOpen=m_splash->Create(); if( SplashOpen ) m_splash->ShowWindow(SW_SHOW); DWORD Currenttime=GetTickCount(); BeginWaitCursor(); #ifdef TEST_USER1 t = CTime::GetCurrentTime(); CTime t2 = g_timeUseEnd; if(t >= t2) { // AfxMessageBox("试用期已过,若想继续使用,请购买正式版!",MB_OK | MB_ICONSTOP); return false; } else 以上为部分代码
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值