pymc3模型在使用默认初始化的采样器中失败,但可与“地图”一起使用

时间:2019-06-30 22:41:39

标签: python pymc3

在解决“统计反思”中的问题时-我正在使用pymc3解决“萨拉曼德斯”问题10H4。 (下面的代码)

采样器总是失败,并显示错误:

  

RV alpha。ravel()[0]的导数为零。

但是当我将init ='map'选项传递给采样器时,我得到的结果与使用R code的其他人相似。强烈建议不要在采样器的输出中使用“ map” init选项,但许多其他init选项也存在问题。

数据为here

我尝试按照与错误消息相关的网络搜索中的建议更改先验条件。

with pm.Model() as hw_10_4:
    alpha = pm.Normal('alpha',mu=0,sd=5)
    beta = pm.Normal('beta',mu=0,sd=5)
    l = pm.Deterministic('lambda',pm.math.exp(alpha + beta*pctcover))
    s = pm.Poisson('salam',l,observed=salaman)
    trace_10_4 = pm.sample(1000, tune=1000, init='map')

我有想要的结果,但是我有兴趣进一步了解为什么我首先遇到问题。我是PYMC3的新手,并想完全了解发生了什么。

谢谢!

1 个答案:

答案 0 :(得分:1)

是的,PyMC3确实似乎无法很好地处理全局扩展。很高兴Stan似乎不会像PyMC3那样受阻,但实际上在两种情况下,只要将回归预测器标准化就可以进行理想的采样。 PyMC3的某些统计重新思考代码中的The unofficial port就是这样做的for that problem。 FWIW,我通常从scale导入sklearn.preprocessing,其行为与文本中使用的R scale相同。

对于使用MAP初始化,这在高维预测变量空间中主要是一个问题。在这里,我不会只使用一个预测变量。