在網上搜“貝葉斯定理”,經常可以看到“所謂高手,就是把自己活成了貝葉斯定理”,“真正的高手,一生都在貫徹貝葉斯定律”,“貝葉斯推理:大佬都用的機率思維”這類文章。

有這麼玄乎?我就不信。

於是仔細研究了一下,發現:

這玩意,機器可以用,人腦用不上!

不過,瞭解一下還是有收穫的,至少別人說貝葉斯的時候,不至於一頭霧水。

本文就用人話說說貝葉斯定理,分析一下它的本質,徹底搞明白這是個什麼東西(有小學文化就行)。

如果你沒有時間,建議直接看最後一章(

精華所在

)。

注:本文不區分貝葉斯定理、貝葉斯定律、貝葉斯公式、貝葉斯,哪個順口就用哪個。

有次體檢把我嚇得夠嗆

2018年,做了一次常規體檢,檢查報告提示我有項指標不正常,建議就醫,嚇我一大跳,焦慮得很。去醫院前,先諮詢了體檢中心,檢測醫生說有可能是

假陽性

去醫院,又抽了血化驗,查了RNA,醫生說沒問題,這才知道,真的是假陽性,心中一塊石頭落地。

注:假陽性(False-Postive)就是把沒病說成有病。

這事要碰到某人頭上呢?

比如對於某種很少見的疾病,人群中患有這種病的機率為千分之一,某檢驗方法的準確率為0。99,假陽性率為0。05。也就是說,如果是真有病,100個人中99個都會檢測出來。但是,對於健康的人,有5%的機率也會被檢測為陽性。

現在,一個人的檢測結果為陽性,請問:他患病的可能性有多大?

這人通常是很忐忑的,因為他完全不知道自己會落在那99%的準確性上,還是落在那5%的誤報裡?

他會認為自己得病的機率是多少?40%?50%,60%?

如果用貝葉斯定理算一下,會得出一個讓大多數人都瞠目結舌的結論:

此人患病的機率只有1。9%!

這還真有點反直覺。

這個機率是怎麼算出來的?

貝葉斯定理長這個樣子:

P(A|B)= P( A )P( B|A)/ P( B )

不愛學習的,看到這估計就想退出了。

不過既然都有人把它做成燈了,還是堅持學習一下吧,又不難。

貝葉斯定理能讓人變成思維高手?

看看這個公式裡面都有啥:

P(A|B)

是B發生情況下,A發生的機率。B是檢測陽性,A是得病。P(A|B)就是某人檢測為陽性的情況下,他得病的機率。這正是我們想要知道的。

P(A)

是A發生的機率,就是某人得病的機率。在本例中,就是千分之一。

P(B|A)

是A發生情況下,B發生的機率。也即有病被檢測為陽性的機率,前面知道,病人檢測為陽性的機率為0。99。

P(B)

是B發生的機率,就是某人檢測為陽性的機率(包括真陽性、假陽性兩種),這個需要算一下。

P(B)就是“有病查出陽性”和“沒病查出陽性”的可能性之和。 “有病查出陽性”的機率,就是:P(有病)* P(有病查出陽性)=0。001*0。99=0。00099 “沒病查出陽性”的機率,就是:P(沒病)*P(沒病查出陽性)=0。999*0。05=0。04995 所以:P(B)=0。00099+0。04995=0。05094。

現在帶入貝葉斯公式算一下:

P(A|B)= P(A)P(B|A)/P(B) = 0。001*0。99/0。05094 ≈ 1。9%

這個1。9%,就是某人如果查出陽性後,他是病人的機率。

這機率很低啊。

為什麼和直覺不同

人的直覺來自經驗,而關於假陽性這種事,我們的經驗太少。我們要是醫生,就不會這麼驚慌。

設想一下醫生擁有的經驗:

如果一家體檢中心今天接待的檢測者有1000人,針對某項指標,如果每個檢測為陽性的人都去找醫生問,“我這是什麼情況,會不會是得了病啊?“,醫生會怎麼想,怎麼說?

前面算過,P(B)= 0。05094,也就是說1000個人檢測,大約50。9人會檢測出陽性。醫生會不勝其煩:今天找我的人有50多人了,根據我的經驗,真正有病的也就1個人而已。

醫生會想:這儀器不行啊,假陽性率這麼高。

這個例子給我們的啟示是,只要有假陽性存在,就有誤診的可能,永遠不要輕信單次檢測的結果。對於不常見的病,如果誤診的機率有5%,即便醫生信誓旦旦說你有,你也不要信,你要多去幾家醫院,多做幾次檢測。

貝葉斯公式是怎麼來的?

先看一下這個式子:

P(B)P(A|B)

解讀一下:

B發生的機率 * B發生情況下A發生的機率

用人話說也就是:

P(B)P(A|B)就是B、A都發生的機率

同樣地,有:

P(A )P(B|A)就是A、B都發生的機率

由於:

B、A都發生的機率 = A、B都發生的機率 (注意不用考慮A、B的時間關係、因果關係)

所以:

P(B)P(A|B) = P(A)P(B|A)

所以,得到貝葉斯公式(根據小學知識):

P(A|B)= P(A)P(B|A)/P(B)

是不是平平無奇?

延伸一下:如果A和B獨立(就是A和B沒關係),即便B發生了,A發生的機率還是P(A);同樣,即便A發生了,B發生的機率還是P(B)。 此時:P( A|B ) = P( A ),同樣有:P( B|A ) = P( B )。 A、B都發生的機率:P( A, B ) = P( A ) * P( B )

能否讓我從感性上理解貝葉斯?

假如有天你去深山老林探險,你來到一個山洞門口,山洞裡可能有熊也可能沒有熊,你“覺得”山洞有熊的機率為P(A),比如1/100,這就是

先驗機率

。 突然,你聽到山洞裡傳來沉重的吼聲(事件B),這時,你認為有熊的機率變了(吼聲來自熊或虎),比如1/2,這就是

後驗機率

P(A)即“先驗機率”,就是“以前我覺得……”。 P(A|B)即“後驗機率”,就是“現在我覺得……”。

注意:先驗、後驗,是指認知上的先後,並不是說A、B要有先後時間上的關係。

很多人喜歡把P(A,B)說是“同時”發生,把P(A|B)說成是B發生後,A發生的機率。這都是錯誤的,貝葉斯僅僅是機率計算,不考慮A和B有沒有時間關係,更不考慮有沒有因果關係

。你想想,“檢測陽性”(B)也並不發生在“得病”(A)之前啊。

P ( A | B )正確的解讀是:

“在發生B的情況下,我覺得A成立的機率是……”

P(有熊|聽到吼聲)的解讀: 在聽到吼聲的情況下,我覺得有熊的機率是……

現在,再看看貝葉斯公式:

P(A|B)= P( A )P( B|A)/ P( B )

這說的就是:

後驗機率 = 先驗機率 * 關聯絡數

關聯絡數即P(B|A)/P(B),就是“在A發生情況下,B發生機率”和“B發生機率”的比較。 如果關聯絡數大於1,那麼後驗機率就更大了。你原先認為洞裡有熊的機率是1/100,吼聲傳出,後驗機率為1/2,關聯絡數就是50倍。 同樣地,關聯絡數可以小於1,意思是若B發生,A就更不傾向於發生。 如果關聯絡數等於1,後驗機率等於先驗機率,說明A和B是獨立的。

關聯關係說明了什麼道理呢:

如果A和B有親近的關係,一個發生,另一個發生的機率就變大。

如果A和B有排斥關係的話,一個發生,另一個發生的機率就變小。

比如,我們總是看到公雞打鳴和太陽昇起前後出現,雖然不知道因果關係,但我們會判斷,這兩件事有密切關係。 同樣,琴納發現接擠牛奶女工,很少得天花,雖然不知道因果關係,就會判斷,這兩件事是排斥的。

貝葉斯其實想說的是:以前,我覺得A會發生,B發生後,我覺得A更可能發生了。

或者反過來說:以前,我就覺得A不太會發生,現在,B發生了,我覺得A更不會發生了。

不過,人們在想這些的時候,大腦是不會浮現出貝葉斯公式的。

人的大腦,不是這樣工作的。

人腦的工作原理正好符合貝葉斯?

應該說,貝葉斯,人腦,都是在試圖發現世界的規律,但方法不一樣。

人腦用的是:

經驗

比如,某個節假日,你說好要帶孩子去郊遊野餐,早上還沒起床,你就躺在床上估摸今天下雨的機率。你家位於乾旱地區,自你記事起,每年大約也就能下6場雨(假設平均分佈),那大概60多天一次唄,所以你推斷,今天下雨的機率大概就是1/60吧!(這就是先驗機率)

你開啟窗簾一看,不妙,是陰天。根據你的經驗,大概10個陰天裡面就有一次下雨的,下雨的機率立刻上升為1/10。

這就得出:P(雨|陰)= 1/10。

更為不妙的是,這時你又聽見了雷聲,根據經驗,如果遇到陰天打雷,10次有9次會下雨,你立刻把下雨的機率調整為9/10。

這就得出:P(雨|陰又雷)= 9/10

你看,這哪裡用得著貝葉斯,人腦根據經驗,後驗機率直接就出來了。

如果用貝葉斯,是這樣的:

P(雨|陰)= P(雨)P(陰|雨)/P(陰) 下雨的先驗機率:1/60,陰天機率:1/8,下雨天是陰天的機率:4/5。(如果沒有統計資料,就全靠拍腦袋了):

P(雨|陰)=(1/60)*(4/5)/(1/8)= 0。1066 你看,

差不多就是1/10

P(雨|陰又雷)= P(雨)P(陰又雷|雨)/P(陰又雷) 某天陰天又打雷的機率:1/80, 下雨當天陰天又打雷的機率:2/3。(全靠拍腦袋) P(雨|陰又雷)=(1/60)*(2/3)/(1/80)= 0。8888 你看,

差不多就是9/10

顯然,貝葉斯要難算的多,因為很多數值都是拍腦袋得來的。

那麼,關於陰天打雷下雨,人腦裡都發生了什麼?

(下面這段很重要,建議認真讀)

你拉開窗簾看見陰天,“陰天”神經元活躍起來,這個神經元和“下雨”神經元是有聯接的,於是“下雨”神經元被輕微地觸發了。那些關心天氣的人,大腦裡可能會出現理性意識“今天會不會下雨啊”。

如果此時,你又聽見了打雷聲,“打雷”神經元被轟然點亮,這下可強烈地刺激了“下雨”神經元,“下雨”神經元熠熠發光,認知神經系統識別出來,大聲喊叫“要下雨咯,要下雨咯!”

你的意識就會立刻覺醒:

大概要下雨了!

機器最愛貝葉斯

貝葉斯(Thomas Bayes,1702-1761)是一位牧師和業餘數學家,與牛頓同一個時代。貝葉斯定理發表後,並沒有收到什麼重視,因為實在看上去平平無奇,

隨著計算機技術的發展,貝葉斯才火了起來。

(因為計算機能算嘛!)

原因就是我說的:機器能用,人不能用。

貝葉斯最早是用來試圖解決逆向機率問題的,典型案例是“白球黑球摸”。

“假設袋子裡面有100個球,90個白球,10個黑球,你進去摸一個,摸出黑球的機率是多大?” 這是一個正向機率問題,很容易計算。

但如果事先並不知道袋子裡面黑白球的比例,而是閉著眼睛摸出一個,然後對袋子裡面的黑白球的比例作出推測,這就是

逆向機率

問題。

方法是透過迭代,進行“貝葉斯更新”(Bayesian updating):先隨便設定一個初始的先驗機率,根據發生的事實(摸出的球色),計算後驗機率,並將此後驗機率作為下一輪計算的先驗機率,再根據新的事實,得到新的後驗機率,依次往復,迭代下去,不斷逼近準確的值。

在我看來,這種方法一開始是非常不準的,比如你摸出一個黑球,你想求解後驗機率,但是,公式右邊三個機率一無所知。一開始只能瞎猜,摸多了以後,才能慢慢逼近。

但如果要多次迭代才能算出機率,那還不如直接計算呢

(比如摸了80次有8個黑球,可以直接得出黑球機率是1/10),

何必要用貝葉斯這麼麻煩的東西呢,所以這個例子並不能說服人

現在看看比較有價值的例子:垃圾郵件判斷。

人和機器是不一樣的,人可以較為容易判斷出垃圾郵件,但不善於統計單詞在垃圾郵件中出現的頻率;機器是反過來的,機器善於統計單詞的頻率,但不太容易直接看出來一封郵件是不是垃圾郵件。

貝葉斯就可以幫到機器:

一封郵件中出現“cash”這個單詞,那麼這封郵件是垃圾郵件(spam)的機率是多少?

也即求:P(spam|cash)

應用貝葉斯定理:

P(spam|cash)= P(spam)P(cash|spam)/P(cash)

公式右邊那3個數: P(spam)就是垃圾郵件出現的機率,這個好說,可以統計; P(cash|spam)是垃圾郵件中出現cash的機率,這個也好說,可以統計; P(cash)是指cash在所有郵件中出現的機率,這個也不難。

給機器大量的真實郵件(其中有正常郵件,也有垃圾郵件),讓機器去統計。

比如,統計出P(spam)= 0。5,也即兩封郵件中就有一封垃圾郵件; 統計出P(cash|spam)= 0。05,也即1000封垃圾郵件中,就會有50封裡出現cash; 統計出P(cash)= 0。026,此即cash在所有郵件中出現的機率。

所以,可以得到:

P(spam|cash)=0。5*0。05/0。026=0。9615

這說明,郵件中只要有一個cash,它是垃圾郵件的機率就達到了0。96。

直觀的理解,就是100封帶有cash的郵件中,96個都是垃圾郵件。但這也不敢就判斷為垃圾郵件,100封郵件中如果誤傷4個好郵件,那也是不能容忍的。

怎麼做呢,不能僅靠單個單詞來判斷, 要看看多個單詞給出的判斷。垃圾郵件中,還有很多其他高頻單詞(比如free、prize、winner、casino、cheap、order、invoice、refund、credit、offer這些),可以利用多個單詞來聯合判斷。

《駭客與畫家》的作者Paul Graham介紹了這種多單詞聯合判斷的貝葉斯過濾演算法1,效果奇佳:1000封垃圾郵件可以判斷出其中995封,且沒有一個誤判。譯者阮一峰在一篇文章中詳細介紹了該演算法2,有興趣的仔細看一下。

總的來說,這種方法選出一封郵件中

P(spam|word)

最高的15個單詞(由於每封郵件不同,所以選中的單詞也不同),計算它們的

聯合機率

3

,如果算出來的機率大於0。9,表示15個詞聯合認定這封郵件有90%以上的可能性為垃圾郵件,就認定為垃圾郵件。

這很像是在當事人中選15個代表,透過演算法來民主表決。

這個應用的本質,就是根據郵件中的特徵(比如單詞),使用貝葉斯定理,透過計算機率來分類(比如判斷是不是垃圾郵件),也即:

P(類別|特徵)= P(類別)P(特徵|類別)/ P(特徵)。

機器說:“以前,我覺得它像是一封垃圾郵件,現在出現了你,我覺得它更像了。”

我可以從貝葉斯定理中獲得什麼?

前面我說過,人是透過經驗得出機率的,不會用貝葉斯的。但在人沒有經驗的時候,可以拿出紙筆,去算算那個公式。

也即,在對P(A|B)沒有經驗時,而公式右邊的P(A)、P(B)、P(B|A)都知道的情況下,可以主動用一下貝葉斯。最典型的就是前面說的“假陽性”案例。

再有,貝葉斯能給我們一些通用的人生智慧。

1、如果新的反面證據出現,我們要考慮是否更改我們原有的信念。

永遠對自己持有的觀念保留一絲懷疑,甚至努力嘗試推翻自己的信仰。

這正是

Amazon領導力原則

中的第4條。

高手為了不在錯誤的道路上走到黑,會時刻根據現實,調整自己的理論。

2、很少發生的,就是很少發生的,即便它看上去像是要發生。

這對“疑病症”或“焦慮症”也許是個提醒:你擔心的那些事,通常都不會發生。

對那些“樂觀症”也是個警醒:不要對自己的想法過於樂觀,現實往往是殘酷的。

不要以為你推出的東西,會那麼受歡迎。

要對現實有一個更清醒的頭腦。

3、我最想說的是:最好把自己的經驗調校的準確一些,去年到底是下了10場雨,還是100場雨?最好能有點數。大多數人對此是毫無概念的。

真正的思維高手,總會把自己的經驗,和現實校準。

雖然他們完全不懂貝葉斯。

也永遠不會去用。

貝葉斯定理能讓人變成思維高手?

圖|《想贏,你有多少勝算》

文|衛劍釩

Naive Bayes spam filtering。 (

https://

en。wikipedia。org/wiki/N

aive_Bayes_spam_filtering

貝葉斯推斷及其網際網路應用(二):過濾垃圾郵件(

http://www。

ruanyifeng。com/blog/201

1/08/bayesian_inference_part_two。html

Combining Probabilities(

https://www。

mathpages。com/home/kmat

h267/kmath267。htm