貝葉斯方法:機率程式設計與貝葉斯推斷
貝葉斯方法是一種常用的推斷方法,然而對讀者來說它通常隐藏在乏味的數學分析章節背後。關于貝葉斯推斷的書通常包含兩到三章關于機率論的内容,然後才會闡述什麼是貝葉斯推斷。不幸的是,由于大多數貝葉斯模型在數學上難以處理,這些書隻會為讀者展示簡單、人造的例子。這會導緻貝葉斯推斷給讀者留下“那又如何?”的印象。實際上,這曾是我自己的先驗觀點。
最近貝葉斯方法在一些機器學習競賽上取得了成功,讓我決定再次研究這一主題。然而即便以我的數學功底,我也花了整整3天時間來閱讀範例,并試圖将它們彙總起來以便了解這一方法。那時并沒有足夠的文獻将理論和實際結合起來。而讓我産生了解偏差的正是由于沒能将貝葉斯數學理論和機率程式設計實踐結合起來。當然,如今讀者已經無需再遭遇我當時的情景。本書就是為了填補這一空缺而編寫的。
如果我們最終是要進行貝葉斯推斷,那麼一方面我們可以采用數學分析來實作這一目的,而另一方面,随着計算成本的下降,我們已經可以通過機率程式設計來完成這一任務。後一種方法更加有用,因為它避免了在每一步介入數學幹預,而這也使得進行貝葉斯推斷不再以通常很棘手的數學分析為前提。簡而言之,後一種計算途徑,是從問題起點經過小幅中間步驟到達問題終點,而前一種途徑則大幅躍進,并通常最後遠離目标。此外,如果沒有深厚的數學功底,也根本無法完成前一種途徑所需要的數學分析。
本書首先從計算和了解的角度,而後從數學分析的角度對貝葉斯推斷進行了介紹。當然,作為一本入門書籍,本書将停留在入門階段。對于受過數學訓練的人來說,本書産生的疑問可通過其他偏重數學分析的書來解答。對于缺少數學背景的愛好者,或是僅對貝葉斯方法的實踐而非數學理論感興趣的讀者來說,本書足以勝任且蘊含趣味。
選擇pymc作為機率程式設計語言有兩方面原因。首先,在寫本書之時,并沒有集中的關于pymc的說明和執行個體等資料。官方文檔面向具有貝葉斯推斷和機率程式設計背景知識的人。而我們希望本書可以鼓勵各個層次的人了解pymc。其次,随着近來用python實作科學計算架構的流行及其核心進展,pymc可能很快會成為核心元件之一。
pymc的運作需要一些依賴庫,包括numpy以及可選的scipy。為了不産生限制,本書的執行個體隻依賴pymc、numpy、scipy和matplotlib。
本書内容安排如下。第1章介紹貝葉斯推斷方法以及與其他推斷方法的比較。我們會看到第一個貝葉斯模型,并對其進行建立和訓練。第2章以執行個體為重點,講述如何用pymc構模組化型。第3章介紹計算推斷背後的一個強大算法——馬爾科夫鍊蒙特卡洛,以及一些貝葉斯模型的調試技術。在第4章裡,我們再次回到推斷的樣本量問題上,并解釋為何樣本量大小如此重要。第5章介紹強大的損失函數,它将在真實世界的問題與數學推斷之間建立連接配接。我們将在第6章回顧貝葉斯先驗,并通過啟發式的方法找到先驗的更優解。最後,我們在第7章探索如何将貝葉斯推斷用于a/b測試。
<a href="https://yq.aliyun.com/articles/96143">第1章 貝葉斯推斷的哲學</a>
<a href="https://yq.aliyun.com/articles/96143">1.1 引言</a>
<a href="https://yq.aliyun.com/articles/96160">1.2 我們的貝葉斯架構</a>
<a href="https://yq.aliyun.com/articles/96174">1.3 機率分布</a>
<a href="https://yq.aliyun.com/articles/96191">1.4 使用計算機執行貝葉斯推斷</a>
<a href="https://yq.aliyun.com/articles/96196">1.5 結論</a>
<a href="https://yq.aliyun.com/articles/96202">1.6 補充說明</a>
<a href="https://yq.aliyun.com/articles/96208">1.7 習題</a>
<a href="https://yq.aliyun.com/articles/96216">1.8 答案</a>
第2章 進一步了解pymc
第3章 打開mcmc的黑盒子
第4章 從未言明的最偉大定理
第5章 失去一隻手臂還是一條腿
第6章 弄清楚先驗
第7章 貝葉斯a/b測試
術語表