【机器学习】深入浅出经典贝叶斯统计
貝葉斯統計
概率的類型
假設??為??數據對象的值?,?的相關頻率為?,其中N表示總的出現次數().
一個事件??的概率為?,代表事件??發生的可能性有多大。
我們通過在??范圍內為某個空間中的結果(事件)集分配一個數值概率來構造一個概率空間。
當結果是一個不確定但可重復的過程的結果時,概率總是可以通過簡單地觀察多次過程的重復并計算每個事件發生的頻率來衡量。這些頻率概率可以很好地陳述客觀現實。如
電子自旋是1/2。
希格斯粒子的質量在124到126 GeV之間。
現在宇宙中暗能量的比例在68%到70%之間。
超導體Hg-1223的臨界溫度超過130K。
如果我們假設這些是通用的常數,而這些常數不會因為你需要測量過程而得到不同的結果。這決定了我們最感興趣的陳述不能被賦予頻率統計的概率。
然而,如果我們也允許概率來衡量在陳述中的主觀的"信仰程度",那么就可以使用概率論的完整機制來討論更有趣的陳述。這些被稱為貝葉斯概率。
貝葉斯概率是由貝葉斯理論所提供的一種對概率的解釋,它采用將概率定義為某人對一個命題信任的程度的概念。
最傳統的概率理論是基于事件的相對頻率(頻率),而貝葉斯觀點更加靈活地看待概率。在任何情況下,概率總是介于0和1之間,所有可能事件的概率值的總和等于1。
貝葉斯概率和頻率概率相對,它從確定的分布中觀測到的頻率或者在樣本空間中的比例來導出概率。粗略描述兩種概率統計是:
頻率統計:?無趣陳述的客觀概率。
貝葉斯統計:?有趣陳述的主觀概率。
貝葉斯聯合概率
離散隨機變量的聯合分布
對離散隨機變量而言,聯合分布概率質量函數為?,即
因為是概率分布函數,所以必須有
連續隨機變量的聯合分布
類似地,對連續隨機變量而言,聯合分布概率密度函數為?,其中??和??分別代表??時?的條件分布以及??時??的條件分布;?和??分別代表和的邊緣分布。
同樣地,因為是概率分布函數,所以必須有
獨立變量的聯合分布
對于兩相互獨立的事件??及?,任意x和y而言有離散隨機變量?,或者有連續隨機變量??。
貝葉斯統計從聯合概率分布開始
括號內分別是數據特征?,模型參數??和超參數?。?上的下標是為了提醒我們,通常所使用的參數集依賴于超參數(例如,增加n_components為新組件添加參數)。有時我們將這個??對稱為模型。
這個聯合概率意味著模型參數和超參數都是隨機變量,這意味著它們標記了潛在概率空間中的可能結果。
可能性
可能性??是模型參數?(給定超參數?)和數據特征??的函數,度量模型給定的觀測數據的概率(密度)。例如,高斯混合模型有如下可能性函數:
參數??為:
及超參數?。注意,對于任何(固定)參數和超參數的值,可能性必須在數據上進行標準化。而不是在參數或超參數上標準化的。
可能性度函數在頻率統計和貝葉斯統計中都起著核心作用,但是他們使用和解釋的方式不同,這里主要討論貝葉斯的觀點,其中??和??是隨機變量,可能性函數與條件概率相關。
條件概率的表示在給定模型??的情況下,觀察特征?。
貝葉斯定理
貝葉斯定理是概率論中的一個定理,描述在已知一些條件下,某事件的發生概率。
比如,如果已知某人媽媽得癌癥與壽命有關,使用貝葉斯定理則可以通過得知某人年齡,來更加準確地計算出他媽媽罹患癌癥的概率。
通常,事件A在事件B已發生的條件下發生的概率,與事件B在事件A已發生的條件下發生的概率是不一樣的。然而,這兩者是有確定的關系的,貝葉斯定理就是這種關系的陳述。貝葉斯公式的一個用途,即透過已知的三個概率而推出第四個概率。貝葉斯定理跟隨機變量的條件概率以及邊際概率分布有關。
我們將可能性與條件概率聯系起來,我們就可以應用概率演算的早期規則(2 & 3)來推導廣義貝葉斯規則:
上面的每一項都有一個名稱,測量不同的概率:
后驗概率:??是給定數據??和超參數??的參數值??的條件概率。
可能性:??是給出模型??的數據??的概率,又稱為模型??的似然。
先驗概率:??是給定超參數的模型參數的概率,并且在所有可能的數據上被邊緣化。
證據:??是給出超參數的數據的概率,并且在給出超參數的所有可能的參數值上被邊緣化。
在典型的推理問題中,(1)后驗概率是我們真正關心的,而(2)似然是我們知道如何計算的。(3)先驗概率是我們必須量化我們對宇宙不同可能的主觀"信仰程度"。
(4)證據呢?利用前面的概率計算法則,我們發現(4)可以由(2)和(3)計算出來:
這個結果并不稀奇,因為分母必須將比率標準化,以產生可能性。
當參數值集為離散時,即?,,?時,歸一化積分轉換為一個求和:
上面的廣義貝葉斯定理假設任何超參數的值都是固定的,因為??在所有4項中,但一個完整的推論還要求我們考慮不同的超參數設置,而這個更難的模型選擇問題待后續分享。
從案例中理解貝葉斯定理
問題:
假設你在某次會議上第一次見到某人,他穿著印有England的T恤。通過以下方法估計他是英國人的可能性:
定義數據??和模型?,為了簡單起見,假設沒有超參數。
分配相關的可能性和先驗概率(如以上(2)和(3))。
計算上述廣義貝葉斯定理結果。
解決方案:
將數據??定義為觀察到的人穿著印有England字樣的T恤。
定義模型有單個參數,人的國籍????.
我們不需要對所有可能的數據指定一個完整的可能性函數,因為我們只有一個單一的數據。相反,分配可能性概率就足夠了:
分配會議參與者的先驗概率:
我們現在可以計算:
注意,我們計算證據??時使用的是和而不是積,因為??是離散的。
你可能分配了不同的概率,因為這些是理性的人可能不同意的主觀評估。然而,通過允許一些主觀性,我們能夠在一些(主觀的)假設下做出精確的陳述。
注意,可能性概率的總和不是1,因為可能性是在數據上歸一化的,而不是在模型上歸一化的,不像先驗概率的總和是1。
這樣一個簡單的例子可以在聯合概率?,?的二維空間中圖形化表示:
廣義貝葉斯定理可以看作是一種學習規則,當有新信息時更新我們的知識:
圖中隱含的時間線衍生出了后驗和先驗概率等術語,盡管沒有要求先驗是基于“新”數據之前收集的數據。
即使貝葉斯推理問題聽起來很簡單,但可能很難做對,所以在推理之前,清楚地說明你知道什么或假設什么,以及你希望學習什么是很重要的,下面是總結了貝葉斯推理問題的主要步驟:
列出可能的模型,也就是你的假設。
給每個模型分配一個先驗概率。
定義每個模型的每個可能觀察的可能性?。
應用貝葉斯定理從新的數據中學習并更新之前的數據。
用python函數實現貝葉斯定理
對于可能的模型和觀測數量有限的問題,所需的計算是簡單的算術計算問題,但當模型和觀測數量越來越多,所需的計算將會越來越復雜。借助于Python函數可以簡化算術,并專注于邏輯推理。
自定義函數實現
將貝葉斯定理封裝為自定義函數learn:
def?learn(prior,?likelihood,?D):#?計算每個模型的貝葉斯定理分子。prob?=?{M:?prior[M]?*?likelihood(D,?M)?for?M?in?prior}#?計算貝葉斯定理分母。norm?=?sum(prob.values())#?返回每個模型的后驗概率。return?{M:?prob[M]?/?norm?for?M?in?prob}上面的問題變成:
prior?=?{'English':?0.2,?'!English':?0.8}def?likelihood(D,?M):if?M?==?'English':return?0.4?if?D?==?'t-shirt'?else?0.6else:return?0.1?if?D?==?'t-shirt'?else?0.9learn(prior,?likelihood,?D='t-shirt'){'English': 0.5, '!English': 0.5}一個學習更新的(后)輸出可以是下一個更新的(前)輸入。例如,如果一個人第二天還穿著印有England的T恤,我們該如何更新我們的知識?
post1?=?learn(prior,?likelihood,?'t-shirt') post2?=?learn(post1,?likelihood,?'t-shirt')? #?輸出post1為第二次的輸入 print(post2){'English': 0.8, '!English': 0.2}python模塊實現
mls包有一個函數Learn是用來計算以上問題的,并且允許用一個調用進行多個更新,并將學習過程記錄為pandas表輸出:
from?mls?import?Learn Learn(prior,?likelihood,?'t-shirt',?'t-shirt')| PRIOR | 0.2 | 0.8 |
| D=t-shirt | 0.5 | 0.5 |
| D=t-shirt | 0.8 | 0.2 |
典型的角色扮演游戲骰子
來源https://commons.wikimedia.org/wiki/File:Dice_(typical_role_playing_game_dice).jpg假設
有人擲出個骰子,點數分別是6、4、5,卻不告訴你它是4、6、8、12還是20個面的骰子。
問題
你的直覺是基于滾動的真實邊線數是多少?
識別問題中的模型(假設)和數據。
定義你的先驗假設每個模型都是等可能的。
定義一個可能性函數,假設每個骰子都是公平的。
使用Learn函數來估計后驗概率,為每一次滾動的邊數。
解答
我們可以確定骰子不是4面的(因為滾動 > 4),并猜測它不太可能是12或20面的(因為最大的滾動是6)。
這個問題中的模型對應骰子的面數:4、6、8、12、20。
這個問題中的數據是擲骰子的結果:6、4、5。
定義每個模型等可能的先驗假設:
prior?=?{4:?0.2,?6:?0.2,?8:?0.2,12:?0.2,?20:?0.2}假設每個骰子都是均勻的,定:
def?likelihood(D,?M):if?D?<=?M:return?1.0?/?Melse:return?0.0最后,將所有細節放在一起,估計每個模型在每次滾動后的后驗概率:
Learn(prior,?likelihood,?6,?4,?5)| PRIOR | 0.2 | 0.2 | 0.2 | 0.2 | 0.2 |
| D=6 | 0 | 0.392 | 0.294 | 0.196 | 0.118 |
| D=4 | 0 | 0.526 | 0.296 | 0.131 | 0.047 |
| D=5 | 0 | 0.635 | 0.268 | 0.079 | 0.017 |
有點出乎意料的是這個骰子問題有實際的應用和歷史意義!
想象一個工廠生產了??的產品,每個產品的序列號是1 -?。如果你隨機選擇物品并查看它們的序號,那么估算??的問題就類似于我們的骰子問題,但需要考慮更多模型。這種方法在二戰中被盟軍成功地用于估算德國坦克的生產速度[2]?,當時大多數學術統計學家都拒絕使用貝葉斯方法。
要了解更多關于貝葉斯方法發展的歷史觀點(以及發展過程中的許多障礙),請閱讀The Theory That Would Not Die[3]《不會消亡的理論》這本有趣的書。
注意
雖然上面的離散例子可以精確地解出來,但一般情況下這個結果并不正確。更具挑戰是當計算連續隨機變量時,在貝葉斯定理分母中?)作為邊緣化積分來求解:
通過選擇適合的先驗概率函數和可能性函數,這個積分可以通過解析來執行求解。然而,對于大多數實際工作來說,需要用近似的數值方法來計算復雜的分布。這類常用的方法有馬爾可夫鏈蒙特卡羅和變分推理。
先驗信息選擇問題
優先權的選擇必然是主觀的,有時還會引起爭議。盡管如此,這里總結了如下一般準則:
從信息性實驗中得出的數據推論對你的先驗選擇不是很敏感。
如果你的(后驗)結果對你選擇的先驗是敏感的,此時你需要更多(或更好的)數據。
對于先驗?,我們使用beta分布[4],它由超參數??和??指定:
其中??是Gamma函數[5]與階乘??相關的。
該函數提供了一個二項式過程的先驗(或后驗),對應于先前(或更新)的測量值,該二項式共有??次過程,并在這些試驗中,有??次通過,?次不通過。
下面定義函數binomial_learn函數計算并繪制先驗概率、可能性及后驗概率曲線。
def?binomial_learn(prior_a,?prior_b,?n_obs,?n_pass):"""prior_a,?prior_b:?超參數a和bn_obs:觀察或測量次數n_pass:通過樣本數"""theta?=?np.linspace(0,?1,?100)#?計算和繪制關于theta的先驗概率。prior?=?scipy.stats.beta(prior_a,?prior_b)plt.fill_between(theta,?prior.pdf(theta),?alpha=0.25)plt.plot(theta,?prior.pdf(theta),?label='Prior')#?計算并繪制給定任意theta的固定數據的可能性。likelihood?=?scipy.stats.binom.pmf(n_pass,?n_obs,?theta)plt.plot(theta,?likelihood,?'k:',?label='Likelihood')#?根據觀測數據計算并繪制后驗曲線。posterior?=?scipy.stats.beta(prior_a?+?n_pass,?prior_b?+?n_obs?-?n_pass)plt.fill_between(theta,?posterior.pdf(theta),?alpha=0.25)plt.plot(theta,?posterior.pdf(theta),?label='Posterior')plt.legend(bbox_to_anchor=(0.,?1.02,?1.,?.102),?loc=3,ncol=3,?mode="expand",?borderaxespad=0.,?fontsize='large')plt.ylim(0,?None)plt.xlim(theta[0],?theta[-1])plt.xlabel('Pass?fraction?$\\theta$')通過圖形實例回答如下問題
Q1:?在你的研究領域想一個問題,這個問題適用于這個推理問題。
Q2:?使用超參數?,從2個觀測中推斷?。
根據觀察數據解釋為什么后驗是合理的。
什么值??是絕對排除的數據?這有意義嗎?
這三個量是如何標繪的?
Q3:?用??代替?,從相同的2次觀察中推斷?。
根據觀察數據,后驗仍然合理嗎?解釋你的推理。
你如何在這兩種主觀的先驗中做出選擇?
Q4:?使用上面的每個先驗均不同的數據: 100個試驗中有60個通過。
先驗和可能性的相對重要性如何隨著更好的數據而變化?
為什么現在的可能性值這么小?
后驗概率峰值是在觀察到的平均通過率為1/2處。這顯然是合理的,因為我們只做了兩個觀察。
絕對排除0和1,因為我們已經觀察到1個通過和1個不通過。
先驗概率、后驗概率及可能性是標準化的?,所以它們在圖中的面積是1。而因所有可能的數據的可能性也都是標準化的,所以他們在這個圖中面積沒有1。
binomial_learn(5,?10,?2,?1)當用??代替??后,
后驗概率的峰值在遠離平均觀察通過率的1/2處。如果繼續相信先驗信息,這也是合理的,因為在相對于沒有任何信息的數據中,貝葉斯定理告訴我們,它應該占據我們對??的知識。
另一方面,如果我們不能證明為什么這個先驗比之前的平坦分布的先驗更加可信,那么我們必須得出這樣的結論:?的值是未知的,這些數據也是沒有任何幫助的。
如果在之前的13次【】實驗中觀察到4次【】通過,那么新的先驗概率是非常合理的。然而,如果從未觀察到這個過程,并且沒有理論偏見,那么原來的平坦分布的先驗是合理的。
接下來增加觀察次數,即增加數據量。
binomial_learn(1,?1,?100,?60)binomial_learn(5,?10,?100,?60)數據越多,先驗的影響就越小。
且可能性值更大,因為有更多的可能結果(通過或不通過)與更多的觀測值,所以任何一個結果變得相對不太可能。
貝葉斯網絡
貝葉斯網絡(Bayesian network),又稱信念網絡(belief network)或是有向無環圖模型(directed acyclic graphical model),是一種概率圖型模型,借由有向無環圖(directed acyclic graphs, or DAGs)中得知一組隨機變量??及其??組條件概率分布的性質。
舉例而言,貝葉斯網絡可用來表示疾病和其相關癥狀間的概率關系;倘若已知某種癥狀下,貝葉斯網絡就可用來計算各種可能罹患疾病之發生概率。
一般而言,貝葉斯網絡的有向無環圖中的節點表示隨機變量,它們可以是可觀察到的變量,抑或是隱變量、未知參數等。
連接兩個節點的箭頭代表此兩個隨機變量是具有因果關系或是非條件獨立的;而兩個節點間若沒有箭頭相互連接一起的情況就稱其隨機變量彼此間為條件獨立。若兩個節點間以一個單箭頭連接在一起,表示其中一個節點是“因(parents)”,另一個是“果(descendants or children)”,兩節點就會產生一個條件概率值。
貝葉斯網絡是用于建模屬性和類別標簽之間的概率關系。通過建立概率論和圖倫的概念,貝葉斯網絡能夠捕獲更簡單的條件獨立形式,使用簡單的示意進行表示。他們還提供了必要的計算結構,以有效的方式對隨機變量執行推斷。
概率圖模型
貝葉斯網絡術語捕獲隨機變量之間的概率關系的模型,被稱為概率圖模型(probabilistic graphical model)。這些模型背后的基本概念是使用圖表示,其中圖的節點對應于隨機變量,節點之間的邊緣表示概率關系。
我們從貝葉斯聯合概率開始:
當一個函數有數據特征?,模型參數??和超參數?,這個函數通常是一個非常高維的函數。
在最普遍的情況下,聯合概率需要大量的數據來估計。然而,許多問題可以用聯合概率(通過假設一些隨機變量是相互獨立的)來(近似)描述。
概率圖模型是隨機變量之間假定的直接依賴關系的一種方便的可視化方法。
例如,假設我們有兩個參數?,并且沒有超參數,那么聯合概率??可以利用概率演算的規則,以不同的方式展開成條件的乘積:
或者
對應的圖表為:
讀這些圖的方法是:一個標記為??的節點表示聯合概率中的(乘性)因子?,其中??列出了其他節點的箭頭指向該節點(以任何順序,根據概率微積分規則1)。陰影節點表示直接觀察到的隨機變量(即數據),而非陰影節點表示(未觀察到的)潛在隨機變量。
這些圖都描述了具有兩個參數的聯合概率。建立具有任意參數的聯合概率的規則為:
選擇參數(任意)的順序。
第一個參數的節點箭頭指向所有其他節點(包括數據)。
第n個參數的節點箭頭指向所有后面的參數節點和數據。
有了??參數,就有??可能的圖,潛在依賴關系的數量隨著??迅速增長。
為了減輕這種階乘增長,我們尋找不互相依賴的隨機變量對。例如,在兩個參數的情況下:
請注意每個圖是如何描述一個不同的故事的。例如,第一個圖告訴我們,只知道??就可以預測數據,但是我們對??的先驗知識依賴于?。因此,實際上,簡化聯合概率涉及到繪制一個圖表,為數據和模型講述一個合適的故事。
從案例中理解貝葉斯網絡
考慮觀察某人扔一個球,并測量它落地的距離,以推斷重力的強度:
數據是測量范圍?。
參數是球的初始速度??和角度??以及重力的強度?。
超參數是球的直徑??和風速?。
畫一個圖例來說明這個推斷的聯合概率
假設投擲者總是盡可能地用力投擲,然后根據風向調整角度。畫一個圖來表示這個簡單的聯合概率中的直接依賴關系。
寫出對這個推理問題感興趣的后驗。
我們對這個推論最感興趣的后驗是
但更完整的后驗為
這兩個式子的不同之處在于,在第一種情況中,我們忽略了"討厭的"參數?。
這些圖中的箭頭定義了條件依賴關系的方向。它們通常反映了潛在物理系統的因果影響,具有有向邊的概率圖被稱為貝葉斯網絡。
也可以在沒有指定方向的情況下,繪制對稱連接節點的圖。這些被稱為馬爾可夫隨機場或馬爾可夫網絡,當依賴關系在兩個方向或一個未知方向流動時適用。你可以相關信息馬爾可夫網絡[6].
貝葉斯網絡的特點
給定屬性和類別標簽之間的概率關系,貝葉斯網絡提供了表示圖模型的方法。
貝葉斯網絡可以輕松處理相關或冗余屬性的存在。
貝葉斯網絡對不包含類別標簽對判別信息的不相關屬性具有魯棒性。
貝葉斯網絡由于表示復雜形式的關系的能力,更加容易過擬合,因此需要更多的訓練實例來有效地學習概率表。
參考資料
[1]?
貝葉斯統計:?https://github.com/dkirkby/MachineLearningStatistics
[2]?估算德國坦克的生產速度:?https://en.wikipedia.org/wiki/German_tank_problem
[3]?The Theory That Would Not Die:?https://www.amazon.com/Theory-That-Would-Not-Die/dp/0300188226
[4]?beta分布:?https://en.wikipedia.org/wiki/Beta_distribution
[5]?Gamma函數:?https://en.wikipedia.org/wiki/Gamma_function
[6]?馬爾可夫網絡:?https://en.wikipedia.org/wiki/Markov_random_field
往期精彩回顧適合初學者入門人工智能的路線及資料下載機器學習及深度學習筆記等資料打印機器學習在線手冊深度學習筆記專輯《統計學習方法》的代碼復現專輯 AI基礎下載黃海廣老師《機器學習課程》視頻課黃海廣老師《機器學習課程》711頁完整版課件本站qq群554839127,加入微信群請掃碼:
總結
以上是生活随笔為你收集整理的【机器学习】深入浅出经典贝叶斯统计的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 图灵计算机模型意义,图灵机计算模型的主要
- 下一篇: 他写代码如入定,人称阿里“扫地僧”