概率編程實戰 Practical Probabilistic Programming

艾維·費弗 (Avi Pfeffer)

買這商品的人也買了...

商品描述

概率推理是不確定性條件下做出決策的重要方法,在許多領域都已經得到了廣泛的應用。概率編程充分結合了概率推理模型和現代電腦編程語言,使這一方法的實施更加簡便,現已在許多領域(包括炙手可熱的機器學習)中嶄露頭角,各種概率編程系統也如雨後春筍般出現。

本書的作者Avi Pfeffer正是主流概率編程系統Figaro的首席開發者,他以詳盡的實例、清晰易懂的解說引領讀者進入這一過去令人望而生畏的領域。通讀本書,可以發現概率編程並非“瘋狂科學家”們的專利,無需艱深的數學知識,就可以構思出解決許多實際問題的概率模型,進而利用現代概率編程系統的強大功能解題。

本書既可以作為概率編程的入門讀物,也可以幫助已經有一定基礎的讀者熟悉Figaro這一概率編程利器。

作者簡介

作者:Avi Pfeffer(艾維·費弗),譯者:姚軍


Avi Pfeffer是概率編程的先驅,Figaro概率編程語言的首席設計者和開發者。在Charles River Analytics公司,Avi Pfeffer致力於Figaro在多個問題上的應用,包括惡意軟件分析、汽車健康監控、氣象模型建立和工程系統評估。在閒暇時,Avi Pfeffer是一位歌手、作曲家和音樂製作人。他和妻子及三個孩子在馬薩諸塞州坎布里奇生活。

目錄大綱

第1部分概率編程和Figaro簡介

 

第1章概率編程簡介3 
1.1什麼是概率編程4 
1.1.1我們如何做出主觀判斷4 
1.1.2概率推理系統幫助決策5 
1.1.3概率推理系統有3種方式推理7 
1.1.4概率編程系統:用編程語言表達的概率推理系統11 
1.2為什麼使用概率編程14 
1.2.1更好的概率推理14 
1.2.2更好的模擬語言15 
1.3 Figaro簡介:一種概率編程語言16 
1.4小結23 
1.5練習24 

 

第2章Figaro快速教程25 
2.1 Figaro簡介25 
2.2創建模型和運行推理:重回Hello World 27 
2.2.1構建第一個模型28 
2.2.2運行推理和回答查詢29 
2.2 .3構建模型和生成觀測值29 
2.2.4理解模型的構建方法31 
2.2.5理解重複的元素:何時相同,何時不同32 
2.3使用基本構件:原子元素33 
2.3.1離散原子元素34 
2.3 .2連續原子元素35 
2.4使用複合元素組合原子元素37 
2.4.1 If 38 
2.4.2 Dist 39 
2.4.3原子元素的複合版本39 
2.5用Apply和Chain構建更複雜的模型40 
2. 5.1 Apply 41 
2.5.2 Chain 43 
2.6使用條件和約束指定證據46 
2.6.1觀測值46 
2.6.2條件47 
2.6.3約束48 
2.7小結50 
2.8練習51 

 

第3章創建一個概率編程應用程序53 
3.1把握全局53 
3.2運行代碼56 
3.3探索垃圾郵件過濾應用的架構59 
3.3.1推理組件架構59 
3.3.2學習組件架構62 
3.4設計電子郵件模型64 
3.4.1選擇元素64 
3.4.2定義依賴關係67 
3.4. 3定義函數形式68 
3.4.4使用數值參數71 
3.4.5使用輔助知識73 
3.5構建推理組件74 
3.6創建學習組件78 
3.7小結81 
3.8練習82 

 

第2部分編寫概率程序

第4章概率模型和概率程序85 
4.1概率模型定義86 
4.1.1將一般知識表達為可能世界上的某種概率分佈86 
4.1.2進一步探索概率分佈88 
4.2使用概率模型回答查詢90 
4.2.1根據證據調節以產生後驗概率分佈90 
4.2.2回答查詢92 
4.2.3使用概率推理94 
4.3概率模型的組成部分94 
4.3.1變量95 
4.3.2依賴性96 
4.3.3函數形式101 
4.3.4數值參 104 
4.4生成過程105 
4.5使用連續變量的模型110 
4.5.1使用beta-二項式模型110 
4.5.2連續變量的表示111 
4.6小結114 
4.7練習114 

 

第5章用貝葉斯和馬爾科夫網絡建立依賴性模型116 
5.1建立依賴性模型117 
5.1.1有向依賴性117 
5.1.2無向依賴性122 
5.1.3直接和間接依賴性124 
5.2使用貝葉斯網絡126 
5.2.1貝葉斯網絡定義126 
5.2.2貝葉斯網絡如何定義概率分佈127 
5.2.3用貝葉斯網絡進行推理128 
5.3探索貝葉斯網絡的一個示例131 
5.3.1設計一個計算機系統診斷模型131 
5.3.2用計算機系統診斷模型進行推理135 
5.4使用概率編程擴展貝葉斯網絡:預測產品的成功140 
5.4.1設計產品成功預測模型140 
5.4.2用產品成功預測模型進行推理145 
5.5使用馬爾科夫網絡147 
5.5.1馬爾科夫網絡定義147 
5.5.2表示馬爾科夫網絡並用其進行推理150 
5.6小結153 
5.7練習153 

 

第6章使用Scala和Figaro集合構建模型156 
6.1使用Scala 合157 
6.1.1為依賴於單一變量的多個變量建立模型157 
6.1.2創建層次化模型160 
6.1.3建立同時依賴兩個變量的模型162 
6.2使用Figaro集合165 
6.2.1理解Figaro集合的用途165 
6.2.2用Figaro集合重新實現層次化模型166 
6.2.3結合使用Scala和Figaro集合168 
6.3建立對像數量未知情況的模型171 
6.3.1開放宇宙中對像數量未知的情況171 
6.3.2可變大小數組172 
6.3.3可變大小數組上的操作172 
6.3.4示例:預測數量未知的新產品銷售額173 
6.4處理無限過程174 
6.4.1 Process特徵175 
6.4.2示例:一個健康時空過程176 
6.4. 3使用過程178 
6.5小結179 
6.6練習180 

 

第7章面向對象概率建模182 
7.1使用面向對象概率模型183 
7.1.1理解面向對象建模的元素183 
7.1.2重溫打印機模型185 
7.1.3關於多台打印機的推理189 
7.2用關係擴展OO概率模型192 
7.2.1描述通用類級模型192 
7.2.2描述某種情況195 
7.2.3用Figaro表現社會化媒體模型 198 
7.3建立關係和類型不確定性的模型200 
7.3.1元素集合和引用200 
7.3.2具有關係不確定性的社會化媒體模型202 
7.3.3具有類型不確定性的打印機模型205 
7.4小結207 
7.5練習207 

 

第8章動態系統建模209 
8.1動態概率模型210 
8.2動態模型類型211 
8.2.1馬爾科夫鏈211 
8.2.2隱含馬爾科夫模型214 
8.2.3動態貝葉斯網絡216 
8.2.4結構隨時間改變的模型220 
8.3建立永續系統的模型224 
8.3.1理解Figaro的宇宙概念224 
8.3.2使用宇宙建立持續運行系統的模型225 
8.3.3運行一個監控應用227 
8.4小結229 
8.5練習230 

 

第3部分推理
  
第9章概率推理三原則235 

9.1鍊式法則:從條件概率分佈構建聯合分佈237 
9.2全概率公式:從聯合分佈獲得簡單查詢結果240 
9.3貝葉斯法則:從結果推斷原因243 
9.3 .1理解、原因、結果和推理243 
9.3.2實踐中的貝葉斯法則245 
9.4貝葉斯建模247 
9.4.1估算硬幣的偏差248 
9.4.2預測下一次 幣結果252 
9.5小結256 
9.6練習256 

 

第10章因子分解推理算法258 
10.1因子259 
10.1.1什麼是因子259 
10.1.2用鍊式法則分解概率分佈261 
10.1.3使用全概率公式,定義包含因子的查詢263 
10.2變量消除算法267 
10.2.1 VE的圖形解釋267 
10.2.2 VE代數運算271 
10.3 VE的使用273 
10.3.1 Figaro特有的VE考慮因素273 
10.3.2設計模型支持高效的VE 275 
10.3.3 VE的應用278 
10.4置信傳播281 
10.4.1 BP基本原理282 
10.4.2 Loopy BP的屬性282 
10.5 BP的使用284 
10.5.1 Figaro特有的BP考慮因素284 
10.5.2設計模型以支持高效的BP 285 
10.5 .3 BP的應用287 
10.6小結288 
10.7練習288 

 

第11章抽樣算法291 
11.1抽樣的原理292 
11.1.1前向抽樣293 
11.1.2拒絕抽樣297 
11.2重要性抽樣299 
11.2.1重要性抽樣的工作方式300 
11.2.2在Figaro中使用重要性抽樣303 
11.2.3讓重要性抽樣為您工作304 
11.2.4重要性抽樣的應用305 
11.3馬爾科夫鏈蒙特卡洛抽樣307 
11.3.1 MCMC的工作方 式308 
11.3.2 Figaro的MCMC算法:Metropolis-Hastings算法311 
11.4讓MH更好地工作314 
11.4.1自定義提議316 
11.4.2避免硬條件319 
11.4.3 MH的應用320 
11.5小結321 
11.6練習322 


  
第12章處理其他推理任務324 
12.1計算聯合分佈325 
12.2計算最可能的解釋326 
12.2.1在Figaro中計算和查詢MPE 329 
12.2.2 MPE查詢算法的使用331 
12.2.3探索MPE算法的應用336 
12.3計算證據的概率337 
12.3.1觀察用於證據概率計算的證據338 
12.3.2運行證據概率算法339 
12.4小結341 
12.5練習341 

 

第13章動態推理和參數學習342 
13.1監控動態系統的狀態342 
13.1.1監控機制344 
13.1.2粒子過濾算法345 
13.1.3過濾的應用348 
13.2學習模型參數349 
13.2.1貝葉斯學習349 
13.2.2最大似然和MAP學習353 
13.3進一步應用Figaro 360 
13.4小結361 
13.5練習361 

 

附錄A獲取和安裝Scala和Figaro 364 
A.1使用sbt 364 
A.2在沒有sbt的情況下安裝和運行Figaro 365 
A.3從源代碼編譯366 


附錄B概 率編程系統簡況367