前 言
贝叶斯方法:概率编程与贝叶斯推断
贝叶斯方法是一种常用的推断方法,然而对读者来说它通常隐藏在乏味的数学分析章节背后。关于贝叶斯推断的书通常包含两到三章关于概率论的内容,然后才会阐述什么是贝叶斯推断。不幸的是,由于大多数贝叶斯模型在数学上难以处理,这些书只会为读者展示简单、人造的例子。这会导致贝叶斯推断给读者留下“那又如何?”的印象。实际上,这曾是我自己的先验观点。
最近贝叶斯方法在一些机器学习竞赛上取得了成功,让我决定再次研究这一主题。然而即便以我的数学功底,我也花了整整3天时间来阅读范例,并试图将它们汇总起来以便理解这一方法。那时并没有足够的文献将理论和实际结合起来。而让我产生理解偏差的正是由于没能将贝叶斯数学理论和概率编程实践结合起来。当然,如今读者已经无需再遭遇我当时的情景。本书就是为了填补这一空缺而编写的。
如果我们最终是要进行贝叶斯推断,那么一方面我们可以采用数学分析来实现这一目的,而另一方面,随着计算成本的下降,我们已经可以通过概率编程来完成这一任务。后一种方法更加有用,因为它避免了在每一步介入数学干预,而这也使得进行贝叶斯推断不再以通常很棘手的数学分析为前提。简而言之,后一种计算途径,是从问题起点经过小幅中间步骤到达问题终点,而前一种途径则大幅跃进,并通常最后远离目标。此外,如果没有深厚的数学功底,也根本无法完成前一种途径所需要的数学分析。
本书首先从计算和理解的角度,而后从数学分析的角度对贝叶斯推断进行了介绍。当然,作为一本入门书籍,本书将停留在入门阶段。对于受过数学训练的人来说,本书产生的疑问可通过其他偏重数学分析的书来解答。对于缺少数学背景的爱好者,或是仅对贝叶斯方法的实践而非数学理论感兴趣的读者来说,本书足以胜任且蕴含趣味。
选择PyMC作为概率编程语言有两方面原因。首先,在写本书之时,并没有集中的关于PyMC的说明和实例等资料。官方文档面向具有贝叶斯推断和概率编程背景知识的人。而我们希望本书可以鼓励各个层次的人了解PyMC。其次,随着近来用Python实现科学计算框架的流行及其核心进展,PyMC可能很快会成为核心组件之一。
PyMC的运行需要一些依赖库,包括NumPy以及可选的SciPy。为了不产生限制,本书的实例只依赖PyMC、NumPy、SciPy和Matplotlib。
本书内容安排如下。第1章介绍贝叶斯推断方法以及与其他推断方法的比较。我们会看到第一个贝叶斯模型,并对其进行建立和训练。第2章以实例为重点,讲述如何用PyMC构建模型。第3章介绍计算推断背后的一个强大算法——马尔科夫链蒙特卡洛,以及一些贝叶斯模型的调试技术。在第4章里,我们再次回到推断的样本量问题上,并解释为何样本量大小如此重要。第5章介绍强大的损失函数,它将在真实世界的问题与数学推断之间建立连接。我们将在第6章回顾贝叶斯先验,并通过启发式的方法找到先验的更优解。最后,我们在第7章探索如何将贝叶斯推断用于A/B测试。
目 录
第1章 贝叶斯推断的哲学
1.1 引言
1.2 我们的贝叶斯框架
1.3 概率分布
1.4 使用计算机执行贝叶斯推断
1.5 结论
1.6 补充说明
1.7 习题
1.8 答案
第2章 进一步了解PyMC
第3章 打开MCMC的黑盒子
第4章 从未言明的最伟大定理
第5章 失去一只手臂还是一条腿
第6章 弄清楚先验
第7章 贝叶斯A/B测试
术语表