历史#
PyMC 于 2003 年开始开发,旨在推广构建 Metropolis-Hastings 采样器的过程,目的是使马尔可夫链蒙特卡洛 (MCMC) 方法更易于应用科学家使用。选择将 PyMC 开发为 Python 模块,而不是独立的应用程序,使得 MCMC 方法可以在更大的建模框架中使用。到 2005 年,PyMC 已经足够可靠,可以向公众发布 1.0 版本。一小群经常使用的用户,他们大多与佐治亚大学有关联,提供了 PyMC 改进到可用状态所需的大部分反馈。
2006 年,David Huard 和 Anand Patil 加入了 Chris Fonnesbeck 的 PyMC 2.0 开发团队。该软件的这次迭代致力于比以前任何版本的 PyMC 提供更高的灵活性、更好的性能和更好的最终用户体验。PyMC 2.2 于 2012 年 4 月发布。它包含了大量的错误修复和优化,以及一些新功能,包括改进的输出绘图、CSV 表格输出、改进的插补语法和后验预测检查图。PyMC 2.3 于 2013 年 10 月 31 日发布。它包括 Python 3 兼容性、改进的摘要图以及一些重要的错误修复。
2011 年,John Salvatier 开始考虑实现基于梯度的 MCMC 采样器,并开发了 mcex
包来试验他的想法。第二年,John 受团队邀请重新设计 PyMC,以适应 Hamiltonian Monte Carlo 采样。这导致 Theano 被采用为计算后端,并标志着 PyMC 开发的开始。PyMC 的第一个 alpha 版本于 2015 年 6 月发布。在接下来的 2 年中,核心开发团队发展到 12 名成员,第一个版本 PyMC 3.0 于 2017 年 1 月发布。2020 年,PyMC 开发人员 fork 了 Theano,并在 2021 年将 fork 后的项目重命名为 Aesara。
版本 3#
PyMC 的第三个主要版本受益于从头开始重写。用户界面和性能的显著改进由此产生。虽然 PyMC2 依赖 Fortran 扩展(通过 f2py)进行大部分计算密集型工作,但 PyMC 利用 Aesara(Theano 库的一个分支,来自蒙特利尔学习算法研究所 (MILA))进行基于数组的表达式求值来执行其计算。这最重要的是提供了快速自动微分,这是为概率编程提供推断的基于梯度的采样和优化方法的核心。
与先前版本的主要变化
新的灵活对象模型和语法(与 PyMC2 不向后兼容)。
基于梯度的 MCMC 方法,包括 Hamiltonian Monte Carlo (HMC)、No U-turn Sampler (NUTS) 和 Stein 变分梯度下降。
变分推断方法,包括自动微分变分推断 (ADVI) 和算子变分推断 (OPVI)。
用于基于公式轻松指定广义线性模型 (GLM) 的接口。
椭圆切片采样。
用于表示时间序列的专用分布。
一个 Jupyter 笔记本库,提供案例研究和完全开发的用法示例。
还有更多!
虽然 Aesara 的添加为 PyMC 的开发增加了一定程度的复杂性,从根本上改变了底层计算的执行方式,但开发团队努力保持原始 PyMC 模型规范语法的优雅简洁性。
版本 4#
待办事项:从历史角度解释 v4 的开发,然后链接到 PyMC 4.0 发布公告,以了解有关实际新功能和改进的解释