1. 一般情况:先验设定存在问题(不合适),建议按照同一问题背景下,用别人找到的推荐先验设置。或者查阅相关论文,使得变量先验符合模型背景。
2. 在使用别人的推荐先验还是存在极慢的采样,可以检查数据集,数据的分布情况是否和参考教程一致,比如别人是正态,你的是双峰或者偏正态,可以先进行转化调整。
3. 更换初始方法,例如find_MAP。
4. 上述方法只能解决很慢的情况下,一两天都不能采样出结果。【我的数据量15k,18个参数,chain=2,跑了6h,供参考】如果还有什么好的解决方法可以留言,一起学习。
机翻如下:
NUTS 采样的速度取决于参数的数量,而更多地取决于后验的形状。如果后验在没有相关性的情况下相当接近正态,那么 10000 个参数不是问题。但是如果你的后验有某些特征,事情会很快变得更加困难。比较 NUTS 和 Metropolis 之间的采样速度通常是毫无意义的,Metropolis 只是没有注意到它的样本很糟糕,并且很乐意为您提供大量无用的样本。
使采样变得困难的事情,没有特定的顺序:
pm.fit
以查看您得到的结果以及它们是否与跟踪有些匹配。(如果你觉得很冒险,你也可以使用 progess 分支中的工作https://github.com/pymc-devs/pymc3/pull/2327 35,在 advi 之后适应缩放。更新这不再是正在进行的工作,因为 3.2 这是默认值)init
参数pm.sample
,'nuts'
还设置了一个完整的质量矩阵来摆脱的相关性)小故事:您的模型可能有问题。尝试从轨迹中绘制变量,并查看不同变量之间的散点图。
另一个讨论与解释: