我使用了基于 Clojure 的“Anglican”,我认为这对我不利。糟糕的文档和太小的社区无法找到帮助。此外,我仍然无法熟悉基于 Scheme 的语言。所以我想把语言改成基于 Python 的东西。
也许 Pyro 或 PyMC 可能是这种情况,但我完全不知道这两者。
- 这两个框架有什么区别?
- 它们可以用于相同的问题吗?
- 有没有比较突出的例子?
我使用了基于 Clojure 的“Anglican”,我认为这对我不利。糟糕的文档和太小的社区无法找到帮助。此外,我仍然无法熟悉基于 Scheme 的语言。所以我想把语言改成基于 Python 的东西。
也许 Pyro 或 PyMC 可能是这种情况,但我完全不知道这两者。
只想更新 2020 年以前的答案,因为它们现在已经两年了,这个页面是 Google 上的第一个结果。
Pyro 基于 PyTorch 构建。它具有完整的 MCMC、HMC 和 NUTS 支持。它具有出色的文档。
PyMC3 建立在 Theano 之上,这是一个完全死掉的框架。根据 ZAR 对此回复的评论(2021 年编辑),PyMC4 已停产。
第三个选项是 Tensorflow Probability,它在很大程度上基本上包含了 PyMC,并具有我们都期望从 Tensorflow 获得的易用性和出色的文档。(是的,这是个玩笑)。
它们几乎都是一样的,所以尝试一下,试试你旁边的人使用的任何东西,或者只是掷硬币。最好的库是您实际用于编写工作代码的库。至于哪个更流行,概率编程本身是非常专业的,所以你不会在任何东西上找到很多支持。
从这里
Pyro 是一种深度概率编程语言,专注于变分推理,支持可组合推理算法。Pyro 的目标是更加动态(通过使用 PyTorch)和通用(允许递归)。
Pyro 包含深度神经网络,目前专注于变分推理。Pyro 还没有做马尔可夫链蒙特卡洛(不像 PyMC 和 Edward)。
Pyro 建立在 pytorch 上,而 PyMC3 建立在 theano 上。所以你得到了 PyTorch 的动态编程,最近宣布 Theano一年后将不再维护。然而,我发现 PyMC 有很好的文档和很好的资源。另一种选择是 Edward 建立在 Tensorflow 之上,它比 pyro atm 更成熟、功能更丰富。Edward 的作者声称它比 PyMC3 更快。
我想这个决定归结为你正在寻找的特性、文档和编程风格。