具体描述
概率推理是不确定性条件下做出决策的重要方法,在许多领域都已经得到了广泛的应用。概率编程充分结合了概率推理模型和现代计算机编程语言,使这一方法的实施更加简便,现已在许多领域(包括炙手可热的机器学习)中崭露头角,各种概率编程系统也如雨后春笋般出现。本书的作者Avi Pfeffer正是主流概率编程系统Figaro的首席开发者,他以详尽的实例、清晰易懂的解说引领读者进入这一过去令人望而生畏的领域。通读本书,可以发现概率编程并非“疯狂科学家”们的专利,无需艰深的数学知识,就可以构思出解决许多实际问题的概率模型,进而利用现代概率编程系统的强大功能解题。本书既可以作为概率编程的入门读物,也可以帮助已经有一定基础的读者熟悉Figaro这一概率编程利器。
作者简介
Avi Pfeffer是概率编程的先驱,Figaro概率编程语言的首席设计者和开发者。在Charles River Analytics公司,Avi Pfeffer致力于Figaro在多个问题上的应用,包括恶意软件分析、汽车健康监控、气象模型建立和工程系统评估。在闲暇时,Avi Pfeffer是一位歌手、作曲家和音乐制作人。他和妻子及三个孩子在马萨诸塞州坎布里奇生活。
目录信息
第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.3Figaro简介:一种概率编程语言 16
1.4小结 23
1.5练习 24
第2章Figaro快速教程 25
2.1Figaro简介 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.1If 38
2.4.2Dist 39
2.4.3原子元素的复合版本 39
2.5用Apply和Chain构建更复杂的模型 40
2.5.1Apply 41
2.5.2Chain 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.1Process特征 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.1VE的图形解释 267
10.2.2VE代数运算 271
10.3VE的使用 273
10.3.1Figaro特有的VE考虑因素 273
10.3.2设计模型支持高效的VE 275
10.3.3VE的应用 278
10.4置信传播 281
10.4.1BP基本原理 282
10.4.2LoopyBP的属性 282
10.5BP的使用 284
10.5.1Figaro特有的BP考虑因素 284
10.5.2设计模型以支持高效的BP 285
10.5.3BP的应用 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.1MCMC的工作方式 308
11.3.2Figaro的MCMC算法:Metropolis—Hastings算法 311
11.4让MH更好地工作 314
11.4.1自定义提议 316
11.4.2避免硬条件 319
11.4.3MH的应用 320
11.5小结 321
11.6练习 322
第12章处理其他推理任务 324
12.1计算联合分布 325
12.2计算最可能的解释 326
12.2.1在Figaro中计算和查询MPE 329
12.2.2MPE查询算法的使用 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
· · · · · · (收起)
读后感
用户评价
这本书在数据模拟和验证方面的论述尤其深刻。它不仅仅展示了如何用代码拟合数据,更深入探讨了如何通过模拟真实世界过程来检验模型假设的合理性。其中关于“模型检查”和“后验预测检验”的章节,我感觉受益匪浅。作者强调,一个复杂的模型如果不能通过合理的检验,其拟合结果很可能只是表面的繁荣。在讲述如何构建这些检验机制时,书中提供了多种不同的统计度量标准和可视化方法,让读者可以从多个维度去审视模型的“健康状况”。这种强调批判性思维而非单纯技术实现的写作风格,使得这本书具有了超越一般编程指南的价值。它迫使你思考“为什么”要用这个模型,而不是仅仅满足于“如何”使用它。总而言之,这是一部需要沉下心来细细品味的著作,它所赋予读者的,是构建和理解复杂概率系统的思维框架。
这本书的排版和图示设计是其一大亮点,在这类偏硬核的技术书籍中,这一点常常被忽略。大量的流程图和概念图被用来解释那些晦涩的算法步骤,例如在阐述吉布斯采样的迭代过程时,图示的清晰程度几乎可以替代一段冗长的文字描述。字体选择和行距处理也做得非常人性化,使得长时间阅读下来眼睛的疲劳感减轻了不少。更值得称赞的是,作者似乎深谙读者的“痛点”,在每个关键概念介绍完毕后,都会紧接着提供一个“实战陷阱”或“常见误区”的提示框,这些小小的标注往往能帮我避免走弯路。比如,关于参数初始化对收敛速度的影响,书中就给出了一组对比实验,直观展示了不当初始化可能导致的结果。这让整本书读起来感觉像是有一位经验丰富的导师在你身边随时提供指导,而不是一本冷冰冰的教科书。从这个角度看,它的实用价值远远超出了其理论深度本身。
我尝试着将书中的一些高级模型应用到我目前手头的一个时间序列预测项目上,发现效果立竿见影。尤其是关于非参数贝叶斯方法的介绍,它提供了一种处理数据分布不确定的强大武器。这本书的难点在于,它要求读者具备一定的数学直觉,初学者可能需要借助其他辅助材料来巩固微积分和线性代数的基础。但是,一旦跨过了初期的门槛,后续的阅读体验会变得越来越流畅。作者的语言风格非常冷静和精确,几乎没有冗余的形容词或情绪化的表达,一切都以逻辑和数据说话,这对于追求严谨性的技术人员来说是巨大的福音。它没有试图去迎合“零基础入门”的市场,而是明确地将目标读者定位在了希望精进技艺的专业人士身上。这本书更像是工具箱里的瑞士军刀,里面的每一个工具都有其特定的、高精度的用途,需要使用者具备一定的技巧才能发挥其最大效能。
说实话,这本书的阅读体验是充满挑战但又极富回报的。一开始接触那些复杂的数学公式和抽象的概念时,我确实感到了一丝压力,尤其是涉及到高维积分和近似推断的部分,需要反复对照公式和图示才能勉强跟上作者的思路。然而,作者的叙述风格非常具有说服力,他总能在关键节点穿插一些直观的例子,比如用一个实际的物理过程来类比复杂的概率流,这极大地帮助我构建了心中的“心智模型”。这本书的结构安排也十分巧妙,它是先建立起坚实的理论基础,然后才开始引入各种编程框架和工具。这保证了无论未来编程语言或库如何更新换代,这本书传授的核心思维方法是永不过时的。我特别喜欢其中关于模型诊断和选择的章节,它不仅教你如何“构建”模型,更教你如何“判断”模型的好坏,这才是实战中真正需要的技能。对于那些已经掌握了基础统计学,但苦于无法将理论有效地转化为可执行代码的读者来说,这本书提供了一座至关重要的桥梁。
这本厚厚的书,封面设计得相当朴实,那种感觉就像是直接从技术文档里抠出来的一样,没有太多花哨的装饰,这倒是很符合内容本身的严肃性。拿到手里沉甸甸的,翻开目录,感觉内容深度相当可观。我特别留意了关于贝叶斯推断和马尔可夫链蒙特卡洛(MCMC)的部分,介绍得非常细致,从理论基础到实际应用都有涉及,甚至连一些高级的采样方法也单独辟出了一章进行讲解。作者在讲解时,非常注重从底层原理出发,而不是仅仅停留在 API 的调用上,这一点非常难得。很多市面上的书籍往往在基础理论上一带而过,直接跳到工具的使用,导致读者知其然不知其所以然。但这本书显然不是那种快餐式的读物,它更像是为那些真正想深入理解概率模型构建和推理过程的工程师或研究人员准备的。尤其欣赏它在代码示例上的严谨性,每一个算法的实现都附带了清晰的数学推导,让人很容易就能将代码逻辑与背后的统计学思想联系起来。读完前几章,我感觉对概率建模的理解上升到了一个新的高度,不再是零散的知识点堆砌,而是一个完整的、可操作的知识体系。
很专业啊!专门为概率编程造的工具!留了两个小部分。需要参考其他的资料,而且我觉得要读明白它要求挺高的。
强烈推荐在学习概率图模型的同时备用一本此书,国内难得的相关领域优秀的参考书!
看的是kindle版,挺费劲
强烈推荐在学习概率图模型的同时备用一本此书,国内难得的相关领域优秀的参考书!
看的是kindle版,挺费劲