序 言
概率编程是一类计算机编程框架,用于灵活地构建贝叶斯模型,一旦构建好模型,强大的推断算法便可以独立于特定的模型而工作,并通过模型拟合数据。把灵活的模型定义与自动推断结合在一起便得到了一个强大的工具,方便研究者们快速地构建、分析和迭代新的统计模型。这个迭代过程与以往用贝叶斯模型拟合数据的方式有很大的不同:以往的推断算法仅对某一特定的模型有效。这不仅导致人们在构建模型和设计推断算法的时候,需要具备很强的数据技巧,还降低了迭代速度:需要先修改模型,然后重新设计推断算法。而概率编程则将统计建模的过程大众化,大大降低了对使用者的数学水平的要求,缩短了构建新模型时所需花费的时间,同时还能增强使用者对数据内涵的洞察。
概率编程背后的思想并不新鲜。BUGS是最早的概率编程实践之一,于1989年首次发布。由于能够成功应用的模型非常有限,而且推断过程很慢,因此这些第一代语言不太实用。如今,人们已经开发出了许多概率编程语言,并在学术界和各大公司(如谷歌、微软、亚马逊)广泛地用于解决各种复杂问题。那现代的概率编程语言有哪些变化呢?最大的变化来自哈密顿蒙特卡洛采样算法,它相较以往的采样算法要高出若干个数量级,以往的算法只能用来解决一些玩具问题,而如今的算法可以用于解决非常复杂的大规模问题。尽管这些采样器起源于1987年,但得益于最近的一些概率编程系统,如Stan和PyMC3,它们才被广泛地使用起来。
本书将从务实的角度介绍概率编程这一强大而灵活的工具,它将影响你如何思考和解决复杂的分析问题。作为PyMC3的核心开发者之一,没有人比Osvaldo Martin更适合来写这本书了。Osvaldo非常擅长将复杂的问题拆解成容易理解和吸收的部分,他宝贵的实战经验将带领读者穿过这片复杂的领域。书中的图表和代码是非常有用的资源,这些都将增进读者对背后理论知识的直观理解。 ...