《Python貝葉斯建模與計算》旨在幫助貝葉斯初學者成為中級從業(yè)者。本書使用了PyMC3、TensorFlow Probability和Arviz等多個軟件庫的實踐方法,重點是應用統計學的實踐方法,并參考了基礎數學理論。
本書首先回顧了貝葉斯推斷的概念。第2章介紹了貝葉斯模型探索性分析的現代方法;谶@兩個基本原理,接下來的章節(jié)介紹了各種模型,包括線性回歸、樣條、時間序列和貝葉斯加性回歸樹。其后幾章討論的主題包括:逼近貝葉斯計算,通過端到端案例研究展示如何在不同環(huán)境中應用貝葉斯建模,以及概率編程語言內部構件。最后一章深入講述數學理論或擴展對某些主題的討論,作為本書其余部分的參考。
《Python貝葉斯建模與計算》由PyMC3、ArviZ、Bambi和TensorFlowProbability等軟件庫的貢獻者撰寫。
貝葉斯統計這個名字取自長老會牧師兼業(yè)余數學家托馬斯·貝葉斯(Thomas Bayes,17021761),他最先推導出了貝葉斯定理,該定理于其逝世后的1763年發(fā)表。但真正開發(fā)貝葉斯方法的第一人是Pierre-Simon Laplace(17491827),因此將其稱為拉普拉斯統計也許更合理。盡管如此,我們將遵循斯蒂格勒的同名法則,在本書的其余部分使用傳統的貝葉斯方法命名。從貝葉斯和拉普拉斯(以及許多其他人)的開創(chuàng)性時代至今,發(fā)生了很多事情,特別是開發(fā)了很多新想法,其中大部分是由計算機技術推動和/或實現的。本書旨在提供一個關于此主題的現代視角,涵蓋從基礎知識到使用現代貝葉斯工作流和工具等各方面內容。
本書旨在幫助貝葉斯初學者成為中級從業(yè)者。這并不代表你讀完本書后會自動達到中等水平,但希望本書能夠引導你朝富有成效的方向發(fā)展。如果你通讀這本書,認真做練習,把書中的想法應用于自己的問題,并繼續(xù)向他人學習,那么將更容易進步。
要特別指出,本書面向對應用貝葉斯模型解決數據分析問題感興趣的貝葉斯從業(yè)者。通常,學術界和工業(yè)界是有區(qū)別的。但本書沒有做這樣的區(qū)分,因為無論是大學生還是就職于公司的機器學習工程師,都能從本書中受益。
我們的目標是:閱讀本書后,你不僅能夠熟悉貝葉斯推斷,而且能輕松地對貝葉斯模型進行探索性分析,包括模型比較、模型診斷、模型評估和結果交流等。我們計劃從現代計算的角度講授這些內容。對我們來說,如果采用計算方法,貝葉斯統計會更易于理解和應用。例如,我們更關注實證檢查假設被推翻的原因,而不試圖從理論上證明假設是正確的。這也意味著我們會使用許多可視化的表達手段。通讀后,建模方法的其他含義將會逐步變得清晰。
如本書標題所表明的,書中使用Python編程語言。更具體地說,本書將主要使用PYMC3[138]和TensorFlow Probability(TFP)[47]作為模型構建和推斷的主要概率編程語言(PPL),并使用ArviZ作為探索性分析貝葉斯模型的主要軟件庫[91]。本書并未對所有Python PPL進行詳盡評述和比較,因為選擇較多而且發(fā)展迅速。反之,我們專注于貝葉斯分析的實踐方面。編程語言和軟件庫只是用于達到目的的手段。
雖然本書選擇的編程語言是Python及少量軟件庫,但書中涵蓋的統計和建模概念基本與編程語言和軟件庫無關,可以應用于許多計算機編程語言,如R、Julia和Scala等。因此,雖不了解Python但掌握上述編程語言的讀者,也可以從本書中受益。當然,如果能夠在自身熟悉的編程語言中找到等效的軟件庫或代碼進行實踐則最好。此外,我們鼓勵將本書中的Python示例代碼轉換為其他編程語言或框架。有意者請與我們聯系。
知識準備
為使本書幫助初學者向中級從業(yè)者轉變,希望讀者能事先接觸乃至掌握貝葉斯統計的基本概念(如先驗、似然和后驗),以及一些基本統計概念(如隨機變量、概率分布、期望等)。對于技藝生疏的讀者,第11章回顧了基本統計概念。有關這些概念的更深入解釋,參見Understanding Advanced Statistical Methods[158]和Introduction to Probability[21]。后者更具理論性,但兩者都比較重視應用。
如果你因實踐或訓練對統計學有很好的理解,但從未接觸過貝葉斯統計學,也可以將本書作為對該主題的入門讀物,只是開始幾章(主要是前兩章)的節(jié)奏會有點快,可能需要通讀數次。
我們希望你能夠熟悉一些數學概念,如積分、導數和對數的性質等,寫作水平最好能夠達到技術高中或者科學、技術、工程和數學專業(yè)的大學第一學年以上的水平。若需要復習這些數學概念,推薦3Blue1Brown的系列視頻。這里不要求做過多數學練習,但要求使用代碼和交互式計算環(huán)境來理解和解決問題。本書中出現數學公式是為了幫助你更好地理解貝葉斯統計建模。
本書假定讀者具備一定的計算機編程能力。使用Python語言時,還會使用一些專門的軟件庫,特別是概率編程語言。在閱讀本書之前,至少利用概率編程語言擬合一個模型,對你會有幫助,但也不是必須的。關于如何設置本書所需要的計算環(huán)境或Python參考,可以閱讀GitHub中的README.md,了解如何設置編碼環(huán)境。
閱讀方法
我們將使用模擬模型來解釋一些重要概念,而不會讓數據模糊了主要概念;然后使用真實數據集來近似一些實踐中會面臨的真實問題,如采樣問題、重參數化、先驗/后驗校準等。鼓勵你閱讀本書時,在交互式編程環(huán)境中運行這些模型。
強烈建議你閱讀并使用各種軟件庫的在線文檔。盡管我們已經盡最大努力使本書涵蓋海量信息,從而自成一體,但在網上還有大量關于這些工具的文檔,參考這些文檔有助于學習本書,并幫助你獨立使用這些工具。
第1章回顧、簡介貝葉斯推斷中的基本和核心概念。該章中的概念將在本書其余部分被反復提及和應用。
第2章介紹了貝葉斯探索性分析(Exploratory Analysis of Bayesian)模型。介紹了許多屬于貝葉斯工作流但并非推斷本身的概念。該章中的概念將在本書其余部分被反復應用和提及。
第3章開始介紹特定模型架構。介紹了線性回歸(Linear Regression)模型,并為接下來的5章奠定了基礎。第3章還全面介紹了本書使用的主要概率編程語言:PyMC3和TFP。
第4章擴展了線性回歸模型,并討論了更高級的主題,如魯棒回歸、分層模型和模型重參數化。本章使用PyMC3和TFP。
第5章介紹了基函數,并著重介紹了線性模型的擴展樣條,使我們能夠構建更靈活的模型。本章使用PyMC3。
第6章側重于時間序列模型,包括從時間序列建模為回歸模型,以及更復雜的模型[如ARIMA和線性高斯狀態(tài)空間(Gaussian State Space)模型]等內容。本章使用TFP。
第7章介紹了名為貝葉斯加性回歸樹的非參數模型。本章討論了這個模型的可解釋性和變量的重要性。本章使用PyMC3。
第8章聚焦于逼近貝葉斯計算(Approximate Bayesian Computation,ABC)框架,該框架有助于解決沒有明確似然函數的問題。本章使用PyMC3。
第9章概述了端到端的貝葉斯工作流。本章展示了商業(yè)應用中的觀測性研究和科研環(huán)境中的試驗性研究。本章使用PyMC3。
第10章深入探討了概率編程語言,展示了各種不同的概率編程語言。
第11章為閱讀其他章節(jié)提供輔助,各主題之間相關度不高,因此可以有選擇地閱讀。
強調內容
本書對文本突出強調的方式是用粗體。粗體文本表示強調新概念或概念的重點。當提到特定代碼時,也會突出顯示,如pymc3.sample。
代碼
書中的代碼塊用陰影框標記,左側帶有行號,并使用章節(jié)編號后跟代碼塊編號進行引用,如代碼清單0.1所示。
代碼清單0.1
1 for i in range(3):
2 print(i**2)
0
1
4
每次看到代碼塊時都會想查看運行結果。結果通常體現為一張圖、一個數字、一份代碼輸出或一個表格。反之,書中大部分圖都有相關的代碼,有時會省略一些代碼以節(jié)省篇幅,但你可以在GitHub庫(https://github.com/BayesianModelingandComputationInPython)中訪問完整代碼。該庫還包括一些用于練習的附加材料。其中的筆記還可能包含其他圖、代碼或輸出,這些內容未出現在書中但用于開發(fā)書中所見模型。GitHub中還包含說明,指導如何根據已有設備創(chuàng)建標準計算環(huán)境。
方框
本書使用方框簡要提及重要的統計、數學或(Python)編程概念。書中還會提供參考資料,供你繼續(xù)學習相應主題。
中心極限定理(Central Limit Theorem)
在概率論中,中心極限定理規(guī)定:在某些情況下,添加獨立隨機變量時,即使原始變量本身不呈正態(tài)分布,但它們的適當歸一化總和也會趨于正態(tài)分布。
設X1,X2,X3,…獨立同分布,平均值為,標準差為。當n 時,有:
Introduction to Probability [21]一書介紹了許多概率基礎理論,可用于實踐。
代碼導入
在本書中,導入Python包時使用代碼清單0.2所示的約定。
代碼清單0.2
1 # 基本的
2 import numpy as np
3 from scipy import stats
4 import pandas as pd
5 from patsy import bs, dmatrix
6 import matplotlib.pyplot as plt
7
8 # 貝葉斯模型探索性分析
9 import arviz as az
10
11 # 概率編程語言
12 import bambi as bmb
13 import pymc3 as pm
14 import tensorflow_probability as tfp
15
16 tfd = tfp.distributions
17
18 # 計算后端
19 import theano
20 import theano.tensor as tt
21 import tensorflow as tf
本書還會使用ArviZ樣式:az.style.use("arviz-grayscale")。
由于本書是黑白印刷,本書中的彩圖為方便讀者閱讀,以彩插形式放在封底二維碼,讀者可自行下載。
與本書互動
本書的受眾不是貝葉斯讀者,而是貝葉斯從業(yè)者。我們將提供材料,幫助練習貝葉斯推斷和貝葉斯模型探索性分析。由于利用計算和代碼是現代貝葉斯從業(yè)者所需要的核心技能,因此將提供示例,以供你在多次嘗試中建立思維。對于本書代碼,我們期望你閱讀、執(zhí)行、修改,并再次執(zhí)行多次。我們只能在本書中展示有限示例,但你可以使用計算機自己制作無數的示例。通過這種方式,你不僅可以學習統計概念,還可以學習如何使用計算機將這些概念應用于實踐。
計算機還將使你擺脫印刷文本的限制,例如缺乏顏色、缺乏動畫和并排比較,F代貝葉斯從業(yè)者利用監(jiān)視器和快速可計算雙重檢查提供的靈活性,本書專門創(chuàng)建了示例以允許相同級別的交互性。每章的末尾都設有練習,用于測試學習和實踐成果。練習按難易程度標記為簡單(E)、中等(M)和困難(H),可根據需要酌情解答。
本書參考文獻可下載封底二維碼獲取。
致謝
感謝我們的朋友和同事,他們犧牲了大量時間和精力來閱讀早期書稿,提出了建設性的反饋,幫助我們改進了本書,也幫助我們修復了書中的許多錯誤。非常感謝:
Oriol Abril-Pla、Alex Andorra、Paul Anzel、Dan Becker、Tomás Capretto、Allen Downey、Christopher Fonnesbeck、Meenal Jhajharia、Will Kurt、Asael Matamoros、Kevin Murphy以及Aki Vehtari。
Osvaldo A. Martin是阿根廷IMASL-CONICET和芬蘭阿爾托大學計算機科學系的研究員。他擁有生物物理學和結構生物信息學博士學位。多年來,他日益精進對貝葉斯方面的數據分析問題的研究。他對開發(fā)和實現貝葉斯統計和概率建模軟件工具尤其感興趣。
Ravin Kumar是谷歌的數據科學家,此前曾在SpaceX和Sweetgreen等公司工作。他擁有制造工程碩士學位和機械工程學士學位。他發(fā)現貝葉斯統計可以有效地為組織建模以及制定策略。
Junpeng Lao是谷歌的數據科學家。在此之前,他獲得了博士學位,隨后作為博士后在認知神經科學領域開展研究。他主要研究Bootstrapping和Permutation,由此對貝葉斯統計和生成建模產生了濃厚的興趣。
第1章 貝葉斯推斷 1
1.1 貝葉斯建模 1
1.1.1 貝葉斯模型 2
1.1.2 貝葉斯推斷介紹 2
1.2 一個自制采樣器,不要隨意嘗試 5
1.3 支持自動推斷,反對自動建模 9
1.4 量化先驗信息的方法 12
1.4.1 共軛先驗 13
1.4.2 客觀先驗 15
1.4.3 最大熵先驗 17
1.4.4 弱信息先驗與正則化先驗 20
1.4.5 先驗預測分布用于評估先驗選擇 21
1.5 練習 21
第2章 貝葉斯模型的探索性分析 25
2.1 貝葉斯推斷前后的工作 25
2.2 理解你的假設 26
2.3 理解你的預測 28
2.4 診斷數值推斷 32
2.4.1 有效樣本量 33
2.4.2 潛在尺度縮減因子( ) 35
2.4.3 蒙特卡羅標準差 35
2.4.4 軌跡圖 37
2.4.5 自相關圖 38
2.4.6 秩圖 38
2.4.7 散度 40
2.4.8 采樣器的參數和其他診斷方法 42
2.5 模型比較 43
2.5.1 交叉驗證和留一法 44
2.5.2 對數預測密度的期望 47
2.5.3 帕累托形狀參數 47
2.5.4 解讀帕累托參數 較大時的p_loo 48
2.5.5 LOO-PIT 49
2.5.6 模型平均 50
2.6 練習 51
第3章 線性模型與概率編程語言 55
3.1 比較兩個或多個組 55
3.2 線性回歸 63
3.2.1 一個簡單的線性模型 65
3.2.2 預測 67
3.2.3 中心化處理 68
3.3 多元線性回歸 70
3.4 廣義線性模型 74
3.4.1 邏輯回歸 75
3.4.2 分類模型 76
3.4.3 解釋對數賠率 81
3.5 回歸模型的先驗選擇 82
3.6 練習 85
第4章 擴展線性模型 87
4.1 轉換預測變量 87
4.2 可變的不確定性 90
4.3 引入交互效應 91
4.4 魯棒的回歸 93
4.5 池化、多級模型和混合效應 97
4.5.1 非池化參數 98
4.5.2 池化參數 100
4.5.3 組混合與公共參數 102
4.6 分層模型 104
4.6.1 后驗幾何形態(tài)很重要 107
4.6.2 分層模型的優(yōu)勢 112
4.6.3 分層模型的先驗選擇 114
4.7 練習 114
第5章 樣條 117
5.1 多項式回歸 117
5.2 擴展特征空間 118
5.3 樣條的基本原理 120
5.4 使用Patsy軟件庫構建設計矩陣 123
5.5 用PyMC3擬合樣條 125
5.6 選擇樣條的結點和先驗 127
5.7 用樣條對二氧化碳吸收量建模 129
5.8 練習 134
第6章 時間序列 137
6.1 時間序列問題概覽 137
6.2 將時間序列分析視為回歸問題 138
6.2.1 時間序列的設計矩陣 143
6.2.2 基函數和廣義加性模型 144
6.3 自回歸模型 147
6.3.1 隱AR過程和平滑 152
6.3.2 (S)AR(I)MA(X) 154
6.4 狀態(tài)空間模型 157
6.4.1 線性高斯狀態(tài)空間模型與卡爾曼濾波 158
6.4.2 ARIMA模型的狀態(tài)空間表示 161
6.4.3 貝葉斯結構化的時間序列 164
6.5 其他時間序列模型 168
6.6 模型的評判和先驗選擇 168
6.7 練習 170
第7章 貝葉斯加性回歸樹 173
7.1 決策樹 173
7.2 BART模型 176
7.3 BART模型先驗 177
7.3.1 先驗的獨立性 177
7.3.2 樹結構 的先驗 177
7.3.3 葉結點值ij和樹數量m的先驗 178
7.4 擬合貝葉斯加性回歸樹 178
7.5 自行車數據的BART模型 178
7.6 廣義BART模型 180
7.7 BART的可解釋性 181
7.7.1 部分依賴圖 182
7.7.2 個體條件期望圖 183
7.8 預測變量的選擇 185
7.9 PyMC3中BART的先驗選擇 187
7.10 練習 188
第8章 逼近貝葉斯計算 191
8.1 超越似然 191
8.2 逼近的后驗 192
8.3 用ABC逼近擬合一個高斯 194
8.4 選擇距離函數、?和統計量 195
8.4.1 選擇距離函數 196
8.4.2 選擇? 197
8.4.3 選擇統計量 199
8.5 g-and-k分布 199
8.6 逼近移動平均 203
8.7 在ABC場景中做模型比較 205
8.7.1 邊際似然與LOO 205
8.7.2 模型選擇與隨機森林 209
8.7.3 MA模型的模型選擇 209
8.8 為ABC選擇先驗 211
8.9 練習 211
第9章 端到端貝葉斯工作流 213
9.1 工作流、上下文和問題 213
9.2 獲取數據 216
9.2.1 抽樣調查 216
9.2.2 試驗設計 216
9.2.3 觀察性研究 216
9.2.4 缺失數據 217
9.2.5 應用示例:收集航班延誤數據 217
9.3 構建不止一個模型 218
9.3.1 在構建貝葉斯模型前需要問的問題 218
9.3.2 應用示例:選擇航班延誤的似然 218
9.4 選擇先驗和預測先驗 220
9.5 推斷和推斷診斷 222
9.6 后驗圖 223
9.7 評估后驗預測分布 224
9.8 模型比較 225
9.9 獎勵函數和決策 228
9.10 與特定受眾分享結果 230
9.10.1 分析流程的可重復性 231
9.10.2 理解受眾 232
9.10.3 靜態(tài)視覺輔助 233
9.10.4 可重復的計算環(huán)境 234
9.10.5 應用示例:展示航班延誤模型和結論 234
9.11 試驗性示例:比較兩個組 235
9.12 練習 239
第10章 概率編程語言 241
10.1 PPL的系統工程視角 241
10.2 后驗計算 242
10.2.1 計算梯度 243
10.2.2 示例:近實時推斷 244
10.3 應用編程接口 245
10.3.1 示例:Stan和Slicstan 246
10.3.2 示例:PyMC3和PyMC4 247
10.4 PPL驅動的轉換 248
10.4.1 對數概率 248
10.4.2 隨機變量和分布轉換 250
10.4.3 示例:有界和無界隨機變量之間的采樣比較 251
10.5 操作圖和自動重參數化 252
10.6 異常處理 255
10.7 基礎語言、代碼生態(tài)系統、模塊化 257
10.8 設計PPL 258
10.9 應用貝葉斯從業(yè)者的注意事項 265
10.10 練習 265
第11章 附加主題 267
11.1 概率背景 267
11.1.1 概率 268
11.1.2 條件概率 269
11.1.3 概率分布 270
11.1.4 離散隨機變量及其分布 271
11.1.5 連續(xù)隨機變量和分布 275
11.1.6 聯合、條件和邊際分布 279
11.1.7 概率積分轉換 282
11.1.8 期望 284
11.1.9 轉換 285
11.1.10 極限 286
11.1.11 馬爾可夫鏈 288
11.2 熵 290
11.3 Kullback-Leibler散度 292
11.4 信息標準 294
11.5 深入介紹LOO 296
11.6 Jeffrey先驗求導 297
11.6.1 關于的二項似然的Jeffrey先驗 298
11.6.2 關于 的二項似然的Jeffrey先驗 299
11.6.3 二項似然的Jeffrey后驗 299
11.7 邊際似然 300
11.7.1 調和平均估計器 300
11.7.2 邊際似然和模型比較 301
11.7.3 貝葉斯因子與WAIC和LOO 303
11.8 移出平面 304
11.9 推斷方法 307
11.9.1 網格方法 307
11.9.2 Metropolis-Hastings 308
11.9.3 哈密頓蒙特卡羅 310
11.9.4 序貫蒙特卡羅 314
11.9.5 變分推斷 315
11.10 編程參考 317
11.10.1 選擇哪種編程語言 317
11.10.2 版本控制 317
11.10.3 依賴項管理和包倉庫 317
11.10.4 環(huán)境管理 318
11.10.5 文本編輯器、集成開發(fā)環(huán)境、筆記 318
11.10.6 本書使用的專用工具 319
詞匯表 321
參考文獻(在線提供) 325