了解PyMC3函数的参数



我碰到了这段代码:

data = np.repeat((0, 1), (3, 6))
with pm.Model() as normal_approximation:
p = pm.Uniform('p', 0, 1)
w = pm.Binomial('w', n=len(data), p=p, observed=data.sum())
mean_q = pm.find_MAP() # MAP: maximum a posteriori probability
std_q = ((1/pm.find_hessian(mean_q, vars=[p]))**0.5)[0]
mean_q['p'], std_q

我试着搜索谷歌一般并查看文档中pm.Binomial的参数observed是什么,find_hessian的函数是什么(例如vars关键字的含义是什么)-但我看不到任何解释。

谁能不仅给我解释这些问题,而且给我介绍正确的来源,让我自己回答这些问题?

我一般建议通读教程,特别是"API快速入门";和"入门";的人。它们将涵盖PyMC3如何构建随机变量作为计算图的图形模型的基础知识,包括observedrv是什么(即,您已经观察到的,因此可以从中评估可能性的数据)。除非一个人已经有很强的贝叶斯推理背景,否则通过实例学习可能是最有效的途径。

否则,保持API在手,并使用Python的help函数。

例如,您可以使用后者获得find_hessian的签名:

> help(pm.find_hessian)
find_hessian(point, vars=None, model=None)
Returns Hessian of logp at the point passed.

Parameters
----------
model: Model (optional if in `with` context)
point: dict
vars: list
Variables for which Hessian is to be calculated.

这种特殊的方法更像是一种内部实用程序(例如,它被NUTS采样器使用),但是那些具有数学统计或物理背景的人(例如编写原始代码的人)会将其识别为二阶偏矩阵,并理解其与协方差矩阵的关系。在特定的代码中,它正在计算MAP位置(mean_q)的p变量,然后将其转换为标准差。

https://docs.pymc.io/en/stable/api/distributions/discrete.html#pymc3.distributions.discrete。Binomial描述了np参数,但没有列出observed。在深入研究源代码之后,我发现Binomial继承自一个名为Distribution的类,该类声明了observed参数:

observed:可选

在模型中注册随机变量时要传递的观测数据。

参见Model.register_rv

最新更新