Python貝葉斯建模與計算
定 價:98 元
叢書名:數(shù)據(jù)科學與大數(shù)據(jù)技術
《Python貝葉斯建模與計算》旨在幫助貝葉斯初學者成為中級從業(yè)者。本書使用了PyMC3、TensorFlow Probability和Arviz等多個軟件庫的實踐方法,重點是應用統(tǒng)計學的實踐方法,并參考了基礎數(shù)學理論。本書首先回顧了貝葉斯推斷的概念。第2章介紹了貝葉斯模型探索性分析的現(xiàn)代方法。基于這兩個基本原理,接下來的章節(jié)介紹了各種模型,包括線性回歸、樣條、時間序列和貝葉斯加性回歸樹。其后幾章討論的主題包括:逼近貝葉斯計算,通過端到端案例研究展示如何在不同環(huán)境中應用貝葉斯建模,以及概率編程語言內(nèi)部構件。最后一章深入講述數(shù)學理論或擴展對某些主題的討論,作為本書其余部分的參考。《Python貝葉斯建模與計算》由PyMC3、ArviZ、Bambi和TensorFlowProbability等軟件庫的貢獻者撰寫。
《Python貝葉斯建模與計算》旨在幫助貝葉斯初學者成為中級從業(yè)者。本書使用了PyMC3、TensorFlow Probability和Arviz等多個軟件庫的實踐方法,重點是應用統(tǒng)計學的實踐方法,并參考了基礎數(shù)學理論。
貝葉斯統(tǒng)計這個名字取自長老會牧師兼業(yè)余數(shù)學家托馬斯·貝葉斯(Thomas Bayes,17021761),他最先推導出了貝葉斯定理,該定理于其逝世后的1763年發(fā)表。但真正開發(fā)貝葉斯方法的第一人是Pierre-Simon Laplace(17491827),因此將其稱為拉普拉斯統(tǒng)計也許更合理。盡管如此,我們將遵循斯蒂格勒的同名法則,在本書的其余部分使用傳統(tǒng)的貝葉斯方法命名。從貝葉斯和拉普拉斯(以及許多其他人)的開創(chuàng)性時代至今,發(fā)生了很多事情,特別是開發(fā)了很多新想法,其中大部分是由計算機技術推動和/或?qū)崿F(xiàn)的。本書旨在提供一個關于此主題的現(xiàn)代視角,涵蓋從基礎知識到使用現(xiàn)代貝葉斯工作流和工具等各方面內(nèi)容。本書旨在幫助貝葉斯初學者成為中級從業(yè)者。這并不代表你讀完本書后會自動達到中等水平,但希望本書能夠引導你朝富有成效的方向發(fā)展。如果你通讀這本書,認真做練習,把書中的想法應用于自己的問題,并繼續(xù)向他人學習,那么將更容易進步。要特別指出,本書面向?qū)秘惾~斯模型解決數(shù)據(jù)分析問題感興趣的貝葉斯從業(yè)者。通常,學術界和工業(yè)界是有區(qū)別的。但本書沒有做這樣的區(qū)分,因為無論是大學生還是就職于公司的機器學習工程師,都能從本書中受益。我們的目標是:閱讀本書后,你不僅能夠熟悉貝葉斯推斷,而且能輕松地對貝葉斯模型進行探索性分析,包括模型比較、模型診斷、模型評估和結果交流等。我們計劃從現(xiàn)代計算的角度講授這些內(nèi)容。對我們來說,如果采用計算方法,貝葉斯統(tǒng)計會更易于理解和應用。例如,我們更關注實證檢查假設被推翻的原因,而不試圖從理論上證明假設是正確的。這也意味著我們會使用許多可視化的表達手段。通讀后,建模方法的其他含義將會逐步變得清晰。如本書標題所表明的,書中使用Python編程語言。更具體地說,本書將主要使用PYMC3[138]和TensorFlow Probability(TFP)[47]作為模型構建和推斷的主要概率編程語言(PPL),并使用ArviZ作為探索性分析貝葉斯模型的主要軟件庫[91]。本書并未對所有Python PPL進行詳盡評述和比較,因為選擇較多而且發(fā)展迅速。反之,我們專注于貝葉斯分析的實踐方面。編程語言和軟件庫只是用于達到目的的手段。雖然本書選擇的編程語言是Python及少量軟件庫,但書中涵蓋的統(tǒng)計和建模概念基本與編程語言和軟件庫無關,可以應用于許多計算機編程語言,如R、Julia和Scala等。因此,雖不了解Python但掌握上述編程語言的讀者,也可以從本書中受益。當然,如果能夠在自身熟悉的編程語言中找到等效的軟件庫或代碼進行實踐則最好。此外,我們鼓勵將本書中的Python示例代碼轉(zhuǎn)換為其他編程語言或框架。有意者請與我們聯(lián)系。知識準備為使本書幫助初學者向中級從業(yè)者轉(zhuǎn)變,希望讀者能事先接觸乃至掌握貝葉斯統(tǒng)計的基本概念(如先驗、似然和后驗),以及一些基本統(tǒng)計概念(如隨機變量、概率分布、期望等)。對于技藝生疏的讀者,第11章回顧了基本統(tǒng)計概念。有關這些概念的更深入解釋,參見Understanding Advanced Statistical Methods[158]和Introduction to Probability[21]。后者更具理論性,但兩者都比較重視應用。如果你因?qū)嵺`或訓練對統(tǒng)計學有很好的理解,但從未接觸過貝葉斯統(tǒng)計學,也可以將本書作為對該主題的入門讀物,只是開始幾章(主要是前兩章)的節(jié)奏會有點快,可能需要通讀數(shù)次。我們希望你能夠熟悉一些數(shù)學概念,如積分、導數(shù)和對數(shù)的性質(zhì)等,寫作水平最好能夠達到技術高中或者科學、技術、工程和數(shù)學專業(yè)的大學第一學年以上的水平。若需要復習這些數(shù)學概念,推薦3Blue1Brown的系列視頻。這里不要求做過多數(shù)學練習,但要求使用代碼和交互式計算環(huán)境來理解和解決問題。本書中出現(xiàn)數(shù)學公式是為了幫助你更好地理解貝葉斯統(tǒng)計建模。本書假定讀者具備一定的計算機編程能力。使用Python語言時,還會使用一些專門的軟件庫,特別是概率編程語言。在閱讀本書之前,至少利用概率編程語言擬合一個模型,對你會有幫助,但也不是必須的。關于如何設置本書所需要的計算環(huán)境或Python參考,可以閱讀GitHub中的README.md,了解如何設置編碼環(huán)境。閱讀方法我們將使用模擬模型來解釋一些重要概念,而不會讓數(shù)據(jù)模糊了主要概念;然后使用真實數(shù)據(jù)集來近似一些實踐中會面臨的真實問題,如采樣問題、重參數(shù)化、先驗/后驗校準等。鼓勵你閱讀本書時,在交互式編程環(huán)境中運行這些模型。強烈建議你閱讀并使用各種軟件庫的在線文檔。盡管我們已經(jīng)盡最大努力使本書涵蓋海量信息,從而自成一體,但在網(wǎng)上還有大量關于這些工具的文檔,參考這些文檔有助于學習本書,并幫助你獨立使用這些工具。第1章回顧、簡介貝葉斯推斷中的基本和核心概念。該章中的概念將在本書其余部分被反復提及和應用。第2章介紹了貝葉斯探索性分析(Exploratory Analysis of Bayesian)模型。介紹了許多屬于貝葉斯工作流但并非推斷本身的概念。該章中的概念將在本書其余部分被反復應用和提及。第3章開始介紹特定模型架構。介紹了線性回歸(Linear Regression)模型,并為接下來的5章奠定了基礎。第3章還全面介紹了本書使用的主要概率編程語言:PyMC3和TFP。第4章擴展了線性回歸模型,并討論了更高級的主題,如魯棒回歸、分層模型和模型重參數(shù)化。本章使用PyMC3和TFP。第5章介紹了基函數(shù),并著重介紹了線性模型的擴展樣條,使我們能夠構建更靈活的模型。本章使用PyMC3。第6章側重于時間序列模型,包括從時間序列建模為回歸模型,以及更復雜的模型[如ARIMA和線性高斯狀態(tài)空間(Gaussian State Space)模型]等內(nèi)容。本章使用TFP。第7章介紹了名為貝葉斯加性回歸樹的非參數(shù)模型。本章討論了這個模型的可解釋性和變量的重要性。本章使用PyMC3。第8章聚焦于逼近貝葉斯計算(Approximate Bayesian Computation,ABC)框架,該框架有助于解決沒有明確似然函數(shù)的問題。本章使用PyMC3。第9章概述了端到端的貝葉斯工作流。本章展示了商業(yè)應用中的觀測性研究和科研環(huán)境中的試驗性研究。本章使用PyMC3。第10章深入探討了概率編程語言,展示了各種不同的概率編程語言。第11章為閱讀其他章節(jié)提供輔助,各主題之間相關度不高,因此可以有選擇地閱讀。強調(diào)內(nèi)容本書對文本突出強調(diào)的方式是用粗體。粗體文本表示強調(diào)新概念或概念的重點。當提到特定代碼時,也會突出顯示,如pymc3.sample。代碼書中的代碼塊用陰影框標記,左側帶有行號,并使用章節(jié)編號后跟代碼塊編號進行引用,如代碼清單0.1所示。代碼清單0.1
1 for i in range(3):2 print(i**2)
014
每次看到代碼塊時都會想查看運行結果。結果通常體現(xiàn)為一張圖、一個數(shù)字、一份代碼輸出或一個表格。反之,書中大部分圖都有相關的代碼,有時會省略一些代碼以節(jié)省篇幅,但你可以在GitHub庫(https://github.com/BayesianModelingandComputationInPython)中訪問完整代碼。該庫還包括一些用于練習的附加材料。其中的筆記還可能包含其他圖、代碼或輸出,這些內(nèi)容未出現(xiàn)在書中但用于開發(fā)書中所見模型。GitHub中還包含說明,指導如何根據(jù)已有設備創(chuàng)建標準計算環(huán)境。方框本書使用方框簡要提及重要的統(tǒng)計、數(shù)學或(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 np3 from scipy import stats4 import pandas as pd5 from patsy import bs, dmatrix6 import matplotlib.pyplot as plt78 # 貝葉斯模型探索性分析9 import arviz as az1011 # 概率編程語言12 import bambi as bmb13 import pymc3 as pm14 import tensorflow_probability as tfp1516 tfd = tfp.distributions1718 # 計算后端19 import theano20 import theano.tensor as tt21 import tensorflow as tf
本書還會使用ArviZ樣式:az.style.use("arviz-grayscale")。由于本書是黑白印刷,本書中的彩圖為方便讀者閱讀,以彩插形式放在封底二維碼,讀者可自行下載。與本書互動本書的受眾不是貝葉斯讀者,而是貝葉斯從業(yè)者。我們將提供材料,幫助練習貝葉斯推斷和貝葉斯模型探索性分析。由于利用計算和代碼是現(xiàn)代貝葉斯從業(yè)者所需要的核心技能,因此將提供示例,以供你在多次嘗試中建立思維。對于本書代碼,我們期望你閱讀、執(zhí)行、修改,并再次執(zhí)行多次。我們只能在本書中展示有限示例,但你可以使用計算機自己制作無數(shù)的示例。通過這種方式,你不僅可以學習統(tǒng)計概念,還可以學習如何使用計算機將這些概念應用于實踐。計算機還將使你擺脫印刷文本的限制,例如缺乏顏色、缺乏動畫和并排比較,F(xiàn)代貝葉斯從業(yè)者利用監(jiān)視器和快速可計算雙重檢查提供的靈活性,本書專門創(chuàng)建了示例以允許相同級別的交互性。每章的末尾都設有練習,用于測試學習和實踐成果。練習按難易程度標記為簡單(E)、中等(M)和困難(H),可根據(jù)需要酌情解答。本書參考文獻可下載封底二維碼獲取。致謝感謝我們的朋友和同事,他們犧牲了大量時間和精力來閱讀早期書稿,提出了建設性的反饋,幫助我們改進了本書,也幫助我們修復了書中的許多錯誤。非常感謝: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和芬蘭阿爾托大學計算機科學系的研究員。他擁有生物物理學和結構生物信息學博士學位。多年來,他日益精進對貝葉斯方面的數(shù)據(jù)分析問題的研究。他對開發(fā)和實現(xiàn)貝葉斯統(tǒng)計和概率建模軟件工具尤其感興趣。Ravin Kumar是谷歌的數(shù)據(jù)科學家,此前曾在SpaceX和Sweetgreen等公司工作。他擁有制造工程碩士學位和機械工程學士學位。他發(fā)現(xiàn)貝葉斯統(tǒng)計可以有效地為組織建模以及制定策略。Junpeng Lao是谷歌的數(shù)據(jù)科學家。在此之前,他獲得了博士學位,隨后作為博士后在認知神經(jīng)科學領域開展研究。他主要研究Bootstrapping和Permutation,由此對貝葉斯統(tǒng)計和生成建模產(chǎn)生了濃厚的興趣。
第1章 貝葉斯推斷 11.1 貝葉斯建模 11.1.1 貝葉斯模型 21.1.2 貝葉斯推斷介紹 21.2 一個自制采樣器,不要隨意嘗試 51.3 支持自動推斷,反對自動建模 91.4 量化先驗信息的方法 121.4.1 共軛先驗 131.4.2 客觀先驗 151.4.3 最大熵先驗 171.4.4 弱信息先驗與正則化先驗 201.4.5 先驗預測分布用于評估先驗選擇 211.5 練習 21第2章 貝葉斯模型的探索性分析 252.1 貝葉斯推斷前后的工作 252.2 理解你的假設 262.3 理解你的預測 282.4 診斷數(shù)值推斷 322.4.1 有效樣本量 332.4.2 潛在尺度縮減因子( ) 352.4.3 蒙特卡羅標準差 352.4.4 軌跡圖 372.4.5 自相關圖 382.4.6 秩圖 382.4.7 散度 402.4.8 采樣器的參數(shù)和其他診斷方法 422.5 模型比較 432.5.1 交叉驗證和留一法 442.5.2 對數(shù)預測密度的期望 472.5.3 帕累托形狀參數(shù) 472.5.4 解讀帕累托參數(shù) 較大時的p_loo 482.5.5 LOO-PIT 492.5.6 模型平均 502.6 練習 51第3章 線性模型與概率編程語言 553.1 比較兩個或多個組 553.2 線性回歸 633.2.1 一個簡單的線性模型 653.2.2 預測 673.2.3 中心化處理 683.3 多元線性回歸 703.4 廣義線性模型 743.4.1 邏輯回歸 753.4.2 分類模型 763.4.3 解釋對數(shù)賠率 813.5 回歸模型的先驗選擇 823.6 練習 85第4章 擴展線性模型 874.1 轉(zhuǎn)換預測變量 874.2 可變的不確定性 904.3 引入交互效應 914.4 魯棒的回歸 934.5 池化、多級模型和混合效應 974.5.1 非池化參數(shù) 984.5.2 池化參數(shù) 1004.5.3 組混合與公共參數(shù) 1024.6 分層模型 1044.6.1 后驗幾何形態(tài)很重要 1074.6.2 分層模型的優(yōu)勢 1124.6.3 分層模型的先驗選擇 1144.7 練習 114第5章 樣條 1175.1 多項式回歸 1175.2 擴展特征空間 1185.3 樣條的基本原理 1205.4 使用Patsy軟件庫構建設計矩陣 1235.5 用PyMC3擬合樣條 1255.6 選擇樣條的結點和先驗 1275.7 用樣條對二氧化碳吸收量建模 1295.8 練習 134第6章 時間序列 1376.1 時間序列問題概覽 1376.2 將時間序列分析視為回歸問題 1386.2.1 時間序列的設計矩陣 1436.2.2 基函數(shù)和廣義加性模型 1446.3 自回歸模型 1476.3.1 隱AR過程和平滑 1526.3.2 (S)AR(I)MA(X) 1546.4 狀態(tài)空間模型 1576.4.1 線性高斯狀態(tài)空間模型與卡爾曼濾波 1586.4.2 ARIMA模型的狀態(tài)空間表示 1616.4.3 貝葉斯結構化的時間序列 1646.5 其他時間序列模型 1686.6 模型的評判和先驗選擇 1686.7 練習 170第7章 貝葉斯加性回歸樹 1737.1 決策樹 1737.2 BART模型 1767.3 BART模型先驗 1777.3.1 先驗的獨立性 1777.3.2 樹結構 的先驗 1777.3.3 葉結點值ij和樹數(shù)量m的先驗 1787.4 擬合貝葉斯加性回歸樹 1787.5 自行車數(shù)據(jù)的BART模型 1787.6 廣義BART模型 1807.7 BART的可解釋性 1817.7.1 部分依賴圖 1827.7.2 個體條件期望圖 1837.8 預測變量的選擇 1857.9 PyMC3中BART的先驗選擇 1877.10 練習 188第8章 逼近貝葉斯計算 1918.1 超越似然 1918.2 逼近的后驗 1928.3 用ABC逼近擬合一個高斯 1948.4 選擇距離函數(shù)、?和統(tǒng)計量 1958.4.1 選擇距離函數(shù) 1968.4.2 選擇? 1978.4.3 選擇統(tǒng)計量 1998.5 g-and-k分布 1998.6 逼近移動平均 2038.7 在ABC場景中做模型比較 2058.7.1 邊際似然與LOO 2058.7.2 模型選擇與隨機森林 2098.7.3 MA模型的模型選擇 2098.8 為ABC選擇先驗 2118.9 練習 211第9章 端到端貝葉斯工作流 2139.1 工作流、上下文和問題 2139.2 獲取數(shù)據(jù) 2169.2.1 抽樣調(diào)查 2169.2.2 試驗設計 2169.2.3 觀察性研究 2169.2.4 缺失數(shù)據(jù) 2179.2.5 應用示例:收集航班延誤數(shù)據(jù) 2179.3 構建不止一個模型 2189.3.1 在構建貝葉斯模型前需要問的問題 2189.3.2 應用示例:選擇航班延誤的似然 2189.4 選擇先驗和預測先驗 2209.5 推斷和推斷診斷 2229.6 后驗圖 2239.7 評估后驗預測分布 2249.8 模型比較 2259.9 獎勵函數(shù)和決策 2289.10 與特定受眾分享結果 2309.10.1 分析流程的可重復性 2319.10.2 理解受眾 2329.10.3 靜態(tài)視覺輔助 2339.10.4 可重復的計算環(huán)境 2349.10.5 應用示例:展示航班延誤模型和結論 2349.11 試驗性示例:比較兩個組 2359.12 練習 239第10章 概率編程語言 24110.1 PPL的系統(tǒng)工程視角 24110.2 后驗計算 24210.2.1 計算梯度 24310.2.2 示例:近實時推斷 24410.3 應用編程接口 24510.3.1 示例:Stan和Slicstan 24610.3.2 示例:PyMC3和PyMC4 24710.4 PPL驅(qū)動的轉(zhuǎn)換 24810.4.1 對數(shù)概率 24810.4.2 隨機變量和分布轉(zhuǎn)換 25010.4.3 示例:有界和無界隨機變量之間的采樣比較 25110.5 操作圖和自動重參數(shù)化 25210.6 異常處理 25510.7 基礎語言、代碼生態(tài)系統(tǒng)、模塊化 25710.8 設計PPL 25810.9 應用貝葉斯從業(yè)者的注意事項 26510.10 練習 265第11章 附加主題 26711.1 概率背景 26711.1.1 概率 26811.1.2 條件概率 26911.1.3 概率分布 27011.1.4 離散隨機變量及其分布 27111.1.5 連續(xù)隨機變量和分布 27511.1.6 聯(lián)合、條件和邊際分布 27911.1.7 概率積分轉(zhuǎn)換 28211.1.8 期望 28411.1.9 轉(zhuǎn)換 28511.1.10 極限 28611.1.11 馬爾可夫鏈 28811.2 熵 29011.3 Kullback-Leibler散度 29211.4 信息標準 29411.5 深入介紹LOO 29611.6 Jeffrey先驗求導 29711.6.1 關于的二項似然的Jeffrey先驗 29811.6.2 關于 的二項似然的Jeffrey先驗 29911.6.3 二項似然的Jeffrey后驗 29911.7 邊際似然 30011.7.1 調(diào)和平均估計器 30011.7.2 邊際似然和模型比較 30111.7.3 貝葉斯因子與WAIC和LOO 30311.8 移出平面 30411.9 推斷方法 30711.9.1 網(wǎng)格方法 30711.9.2 Metropolis-Hastings 30811.9.3 哈密頓蒙特卡羅 31011.9.4 序貫蒙特卡羅 31411.9.5 變分推斷 31511.10 編程參考 31711.10.1 選擇哪種編程語言 31711.10.2 版本控制 31711.10.3 依賴項管理和包倉庫 31711.10.4 環(huán)境管理 31811.10.5 文本編輯器、集成開發(fā)環(huán)境、筆記 31811.10.6 本書使用的專用工具 319詞匯表 321參考文獻(在線提供) 325