用睡覺這件事玩轉貝葉斯推斷

    貝葉斯推斷的基本思想是通過更多數據,從而"犯少一點錯誤"。推斷過程很直接:我們首先有一個初始信念,被稱爲先驗,當我們獲得額外的信息後可以對這個信念進行修正更新。雖然我們並不知道這個過程就是貝葉斯推斷,但是我們一直都在使用這個技巧。
    舉個例子,我們可能一開始認爲我們有百分之五十的可能性會在本季度末升職。如果我們從經理那得到正面的反饋,那麼我們就向上調整升職可能性,而相反地,如果我們把咖啡機弄得一團糟,那麼我們可能就得降低一下概率了。隨着我們不斷地獲得更多的信息,我們可以不斷地修正我們的估計以逼近“正確”的答案。以上我們直覺的行爲可以用以下簡單卻強大的公式來形式化描述,該公式被稱爲貝葉斯法則:

    等號左邊那項被稱爲後驗,我們讀作給定事件B發生後事件A發生的條件概率。在等號右邊,P(A)被稱爲先驗,或者被叫作我們對事件A發生的概率的初始信念,P(B|A)被稱爲似然(也是一個條件概率),這一項是可從數據中得到的,P(B)則是一個歸一化常數使得概率分佈之和爲1。用統計的語言來描述貝葉斯法則的一般形式是後驗概率等於似然乘以先驗除以歸一化常數。這個簡短的等式引出了貝葉斯推斷的整個領域,也給人們帶來了對世界進行推理的有效方法。

    雖然等式中的A和B是非常好的佔位符,但是它們並不能很好地幫助我們瞭解如何使用這個概念。爲了達到這個目的,可以應用貝葉斯法則去解決一個真實世界的問題。

案例


在我自己的生活中,我一直在研究的一個問題就是睡眠模式。我從自己攜帶的Garmin Vivosmart智能手錶中收集了超過兩個月的數據,這些數據顯示了我何時入睡和起牀。在上一篇文章中,我用馬爾可夫鏈蒙特卡羅(Markov Chain Monte Carlo, MCMC)方法計算出了在給定的時間我睡着了的概率。最終模型顯示,睡眠的最有可能的分佈是一個關於時間的函數(MCMC是一種近似方法),如下圖所示。




這是隻考慮時間因素的情況下我睡着了的概率。要是我們知道時間的同時還知道其他的證據又會怎樣?如果知道我的臥室燈亮着,這會如何改變我睡着了的概率?這就是我們可以利用貝葉斯法則來更新我們的估計的地方了。對於特定時間,如果我們知道我的臥室燈的信息,那麼我們可以利用上面的概率分佈作爲我們的先驗,然後應用貝葉斯公式:




等號左邊是後驗,即給定我的臥室燈的狀態(開或關)的情況下我睡着了的條件概率。要是我們沒有其他額外的信息可以提供的話,那麼在給定時間的睡眠概率將作爲我們的先驗,P(sleep),或者說作爲我們的估計。例如,在晚上10:00,我睡着的先驗概率是27.34%。如果我們真的有更多信息,那麼我們就可以利用似然來更新這一概率,P(bedroom light |sleep),似然可以從觀測數據中得到。根據我的習慣,我知道在我睡着的情況下我的臥室燈亮着的概率是1%。即:




在我睡着的情況下我的燈關掉的概率是1–0.01 = 0.99(這裏我用了減號(-)來表示相反的情況)。這是因爲條件概率分佈之和爲1。如果我們知道我睡着了,那麼我的臥室燈肯定處於開着或者關着兩種情況之一!


等式的最後一項是歸一化常數P(light)。這是我的燈開着的全概率。我的燈開着存在兩種情況:我睡着了或者我醒着。因此,如果我們知道我睡着了的先驗概率,我們可以這樣計算歸一化常數:




我的燈開着的全概率考慮了兩種可能,我睡着了且我的燈開着,以及我醒着且我的燈開着。(P(-sleep) = 1 —  P(sleep) 是我醒着的概率)


我醒着的情況下我的燈開着的概率,P(light | — sleep),也是從觀測數據中決定的。在我的例子中,我知道如果我醒着,我的臥室燈大概有80%的概率是開着的(這也意味着如果我醒着的話,有20%的可能我的燈是關着的)。


利用我的燈開着的全概率,貝葉斯公式可寫成:




這個公式展示了在我的燈開着的情況下我睡着了的概率。如果我的燈滅了,那麼我們可以把公式中的P(light|...全部換成P(-light|...


只有文字的公式已經夠多了,下面讓我們看看怎麼利用數字來使用這些公式!


根據公式,我們來一步一步地計算在晚上10:30,我們知道我的臥室燈亮着的情況下,我睡着了的概率是多少。首先,我們根據時間來計算我睡着的先驗概率,得到結果是73.90%。這個先驗給我們的估計提供了一個很好的起點,但是我們可以通過加入關於我的臥室燈的信息來改善這個估計。既然知道我的臥室燈亮着,我們可以把相關的數字填到貝葉斯公式中去:




臥室燈亮着這一知識很大程度上改變了我們對我睡着了的概率的估計,從70%變成了3.42%。這一變化展示了貝葉斯法則的威力:通過引入更多信息我們可以更新我們的最初估計。雖然我們平時可能根據直覺也會這麼做,但是利用正式的公式來思考這一過程可以讓我們用一種嚴謹的方式來更新我們的信念。


讓我們嘗試另一個例子。假設現在是晚上9:45,且我的臥室燈滅了怎麼辦?從先驗概率是0.1206入手,試試把這個例子解出來。


我不是每次都進行手工推斷,而是寫了一些Python代碼來進行以上的計算,你可以在這個Jupyter Notebook裏把玩這些代碼。


代碼輸出了以下答案:



Time: 09:45:00 PM     Light is OFF.
The prior probability of sleep:    12.06%
The updated probability of sleep:  40.44%


我們再一次發現額外信息改變了我們的估計。現在,如果我的妹妹打算在晚上9:45打電話給我,而且她以某種方法知道我的臥室燈亮着,那麼她就可以參照這條等式來判斷我是否會接電話了(假設我醒着的時候我總會接電話)!誰說你不能在日常生活中使用統計學的?


看到數值結果很有幫助,但是數據可視化可以更加清晰地說明問題。在與別人交流想法時,要是他們不能直接通過方程來理解,那麼我總是試着引入圖像來進行解釋。下面,我們可以利用額外的數據來對我睡着了的先驗和條件概率分佈進行可視化。





當我的臥室燈亮着時,曲線向右進行了移動,意味着在某一特定的時間點我睡着的概率很低。相似地,如果我的燈滅了,曲線向左進行了移動。想從概念上理解一個統計學概念很困難,但是這個插圖正好說明了我們爲什麼要使用貝葉斯法則。如果我們想在這個世界犯少一點錯誤,那麼額外的信息應該改變我們的信念,而貝葉斯推斷正是利用一個系統的方法來更新我們的估計。


利用更多的證據


爲什麼要在我的臥室燈這裏就止步不前呢?我們可以在模型中使用儘可能多的信息,這個模型也會繼續變得更加的精確(只要數據告訴我們相關情況的有用信息)。舉個例子,如果我知道在我睡着的情況下,我的手機在充電的似然是95%,那麼我們就可以把這個知識加入到我們的模型中。


在這裏,我們假設,在給定我是否睡着的信息的情況下,我的手機正在充電的概率條件獨立(https://en.wikipedia.org/wiki/Conditional_independence)於我的臥室燈亮着的概率(獨立性是一個稍微高級點的概念,但是它可以讓我們簡化許多問題)。利用額外信息的貝葉斯公式如下表示:




這看上去可能有點嚇人,但是利用一點Python代碼,我們可以寫一個函數來爲我們做這些計算。我們輸入任意時間,以及燈的開關狀態和手機狀態這兩種狀態信息的任意組合,然後這個函數就可以返回更新過的我睡着的概率。


我將跳過數學(我讓我的電腦幫我計算)並展示結果:


Time is 11:00:00 PM     Light is ON     Phone IS NOT charging.

The prior probability of sleep:    95.52%
The updated probability of sleep:  1.74%


在晚上11點,沒有額外信息的情況下,我們幾乎可以肯定我睡着了。然而,一旦我們有了額外信息:我的燈亮着,手機沒有在充電,我們就可以判斷我睡着的可能性很低。下面是另一組輸入得到的輸出結果:


Time is 10:15:00 PM     Light is OFF    Phone IS charging.

The prior probability of sleep:    50.79%
The updated probability of sleep:  95.10%


根據具體的情況,概率會變高或變低。爲了證明這一點,我們可以觀察燈和手機狀態的四種不同組合,以及這些組合是如何改變概率分佈的:




這幅圖包含了許多信息,但是關鍵點是概率曲線隨着證據的不同而發生改變。我們獲得更多數據的同時,也可以更好的修正我們的估計。


總結


貝葉斯法則和其他統計概念很難通過只用到字母的抽象公式、或者一些虛構的情景來理解。如果你理解一個概念有困難,那麼去找出一個你可以應用它的場景,或者看看別人成功應用它的例子!


當我們把概念轉化到具體問題時,我們才真正的學到東西。我們不僅可以通過這種方式學到新技能,而且我們還能做一些很酷的項目!成功掌握數據科學需要持續的學習,不斷爲你的技能添加新技術,並且爲不同任務找到最佳的解決方案。


發佈了65 篇原創文章 · 獲贊 9 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章