贝叶斯统计这个名字取自长老会牧师兼业余数学家托马斯·贝叶斯(Thomas Bayes,1702—1761),他最先推导出了贝叶斯定理,该定理于其逝世后的1763年发表。但真正开发贝叶斯方法的第一人是Pierre-Simon Laplace(1749—1827),因此将其称为拉普拉斯统计也许更合理。尽管如此,我们将遵循斯蒂格勒的同名法则,在本书的其余部分使用传统的贝叶斯方法命名。从贝叶斯和拉普拉斯(以及许多其他人)的开创性时代至今,发生了很多事情,特别是开发了很多新想法,其中大部分是由计算机技术推动和/或实现的。本书旨在提供一个关于此主题的现代视角,涵盖从基础知识到使用现代贝叶斯工作流和工具等各方面内容。
本书旨在帮助贝叶斯初学者成为中级从业者。这并不代表你读完本书后会自动达到中等水平,但希望本书能够引导你朝富有成效的方向发展。如果你通读这本书,认真做练习,把书中的想法应用于自己的问题,并继续向他人学习,那么将更容易进步。
要特别指出,本书面向对应用贝叶斯模型解决数据分析问题感兴趣的贝叶斯从业者。通常,学术界和工业界是有区别的。但本书没有做这样的区分,因为无论是大学生还是就职于公司的机器学习工程师,都能从本书中受益。
我们的目标是:阅读本书后,你不仅能够熟悉贝叶斯推断,而且能轻松地对贝叶斯模型进行探索性分析,包括模型比较、模型诊断、模型评估和结果交流等。我们计划从现代计算的角度讲授这些内容。对我们来说,如果采用计算方法,贝叶斯统计会更易于理解和应用。例如,我们更关注实证检查假设被推翻的原因,而不试图从理论上证明假设是正确的。这也意味着我们会使用许多可视化的表达手段。通读后,建模方法的其他含义将会逐步变得清晰。
如本书标题所表明的,书中使用Python编程语言。更具体地说,本书将主要使用PYMC3[138]和TensorFlow Probability(TFP)[47]作为模型构建和推断的主要概率编程语言(PPL),并使用ArviZ作为探索性分析贝叶斯模型的主要软件库[91]。本书并未对所有Python PPL进行详尽评述和比较,因为选择较多而且发展迅速。反之,我们专注于贝叶斯分析的实践方面。编程语言和软件库只是用于达到目的的手段。
虽然本书选择的编程语言是Python及少量软件库,但书中涵盖的统计和建模概念基本与编程语言和软件库无关,可以应用于许多计算机编程语言,如R、Julia和Scala等。因此,虽不了解Python但掌握上述编程语言的读者,也可以从本书中受益。当然,如果能够在自身熟悉的编程语言中找到等效的软件库或代码进行实践则最好。此外,我们鼓励将本书中的Python示例代码转换为其他编程语言或框架。