貝葉斯概率的十層理解(1)

世界是我們的,也是你們的,但歸根結底,世界是貝葉斯的。
—— 胡所巴道·丹史乎由謝道里斯基

希望這篇文章能夠帶大家一起了解神奇的貝葉斯概念,啟發更多神奇的思考。

第一層 、基本知識:貝葉斯是誰?貝葉斯公式是什么?

托馬斯·貝葉斯(Thomas Bayes,1702~1761)是 18 世紀英國的一位數學家、神學家和哲學家。他在概率論領域做出了重要貢獻,被認為是概率論理論的創始人之一。
貝葉斯大概生活在咱們的康乾盛世的雍正乾隆帝在位時期,他比牛頓小40多歲,和歐拉差不多大,貝葉斯死后幾年,數學王子高斯就出生了。所以,貝葉斯可能見過老年的牛頓,但肯定沒遇到過高斯。

貝葉斯的時代

貝葉斯最大的貢獻就是總結出了貝葉斯定理,這個牛到可以統治宇宙的公式就是:

P(B|A)=\frac{P(B)*P(A|B)}{P(A)}=P(B)*\frac{P(A|B)}{P(A)}

這個公式里面P(A|B)表示B事件發生的條件下A事件發生的概率,同樣,P(B|A)就是A事件發生的條件下B事件發生的概率。

第二層、套用公式:怎么用貝葉斯公式解決問題?

我們兩個例子。

第一個例子

二姨給你介紹了個男朋友,只說是上班族,其他什么信息也沒給就安排你們見面,一見面,你發現他是個禿頭,現在就問,你認為這人是程序員還是其他普通上班族?有多大概率是程序員?

30%程序員禿頭

已知40%的程序員都禿頭,而其他普通上班族只有10%會禿頭。那么你是否就認為他很可能是個程序員呢?

錯!你不懂貝葉斯,我們看看貝神父怎么叫我們做人,科學計算已知禿頂的程序員概率有多大。

直接套用公式:

P(程|禿)=\frac{P(程)*P(禿|程)}{P(禿)}

分析一下。

  • 我們需要知道所有人里面程序員的概率P(程),估算一下,所有上班族里面大概10%是程序員,就是P(程)=0.1

  • P(禿|程)我們已知等于30%。

  • P(禿)是多少呢?就是所有人里面有多大概率是禿頭,100人為例,10個程序員40%就是4個禿頭,另外90人里面10%就是9個禿頭,加一起得到P(禿|所有)=P(禿且程|所有)+P(禿且非程|所有)=4\%+9\%=13\%

帶入公式:

P(程|禿)=\frac{P(程)*P(禿|程)}{P(禿)}=\frac{10\%*40\%}{13\%}=\frac{0.1*0.4}{0.13}=4/13\approx0.3

得到最終結論:此人僅有不足三分之一的可能是程序員

第二個例子

這個有點難,咱們慢慢來。

你去醫院檢查是否得了某種癌癥,檢查結果是:你陽了...醫院檢查結果的正確性是80%,那么就問,你現在應該慌不慌?應該有多慌?

估計你要嚇死了。但作為一個學過貝葉斯公式并且掌握小學數學的人,我們來算算看,你現在有多大概率真的得了這種癌癥,就是P(病|陽)的值,即拿到陽性報告的時候,你的患病可能是多大。

先套公式:

P(病|陽)=\frac{P(病)*P(陽|病)}{P(陽)}

分析一下。

  • 首先我們必須知道所有人里面患這個病的概率P(病),假設在所有人里面這個癌癥的患病率是5%,即P(病)=5\%

  • 難點在這個90%正確率怎么理解。100個報告里面,有80個是正確的(陽了就真有病,陰了就真沒病),還有20個是錯誤的(沒病但陽了,有病卻陰了)。那么,有病的里面陰了幾個,沒病的里面又陽了幾個呢?我們假設認為對于有病和沒病的人,報告錯誤率都是20%,即5個有病的人來了會錯報1個陰性,95個沒病的人來了也會錯報19個陽性。所以P(病且陽|所有)=5\%*80\%=4\%P(無病且陽|所有)=95\%*20\%=19\%

  • P(陽|所有)=P(病且陽|所有)+P(無病且陽|所有)=4\%+19\%=23\%

  • P(陽|病)=80\%

帶入公式:

P(病|陽)=\frac{P(病)*P(陽|病)}{P(陽)}=\frac{5\%*80\%}{23\%}=4/23=17%

得出結論:你真正患病的可能性是17%,大概是六分之一

第三層、推理證明:顛覆認知的貝葉斯公式怎么來的?

開始之前我們做個小學三年級應用題:所有人里面有50%是男人,男人里面有10%是渣滓,請問,渣男占所有人的比例是多少?

答案是50\%*10\%=5\%,即

P(渣且男|所有人)=P(男)*P(渣|男)=50\%*10\%=5\%

忽略所有,可以直接簡寫為

P(渣男)=P(男)*P(渣|男)=5\%

現在我們可以開始了。

首先,我們知道下面這句是廢話也是公理:

A事件發生且B事件也發生的可能性 = B事件發生且A事件也發生的可能性

就是:

P(A且B|所有)=P(B且A|所有)

例如:

P(男且渣|所有)=P(渣且男|所有)
P(禿且程|所有)=P(程且禿|所有)

好吧,你認為我在說廢話,那就OK了,咱們繼續。P(禿且程|所有)怎么計算呢?和算渣男概率差不多,就是100人里有多少是程序員,再乘以程序員里面有多少比例是禿子。

P(禿且程|所有)=P(程|所有)*P(禿|程)

同理,P(程且禿|所有)怎么計算呢?就是100人里有多少是禿子,再乘以禿子里有多少比例是程序員。

P(程且禿|所有)=P(禿|所有)*P(程|禿)

合在一起就是:

P(程|所有)*P(禿|程)=P(禿|所有)*P(程|禿)

簡化去掉所有:

P(程)*P(禿|程)=P(禿)*P(程|禿)

移項除到右邊:

P(禿|程)=\frac{P(禿)*P(程|禿)}{P(程)}

換成AB就是貝葉斯公式:

P(B|A)=\frac{P(B)*P(A|B)}{P(A)}

其實貝葉斯只是使用了小學三年級學會的乘法移項!


<未完待續>
下篇我們將關注貝葉斯因子以及更多有趣的相關算法和知識,敬請關注。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容