您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

使用PyMC3进行增量模型更新

使用PyMC3进行增量模型更新

遵循@ChrisFonnesbeck的建议,我写了一个有关增量优先更新的小型教程笔记本。在这里能找到它:

https://github.com/pymc- devs/pymc3/blob/master/docs/source/notebooks/updating_priors.ipynb

基本上,您需要将后验样本包装到自定义的Continuous类中,该类从它们中计算出KDE。以下代码可以做到这一点:

def from_posterior(param, samples):

    class FromPosterior(Continuous):

        def __init__(self, *args, **kwargs):
            self.logp = logp
            super(FromPosterior, self).__init__(*args, **kwargs)

    smin, smax = np.min(samples), np.max(samples)
    x = np.linspace(smin, smax, 100)
    y = stats.gaussian_kde(samples)(x)
    y0 = np.min(y) / 10 # what was never sampled should have a small probability but not 0

    @as_op(itypes=[tt.dscalar], otypes=[tt.dscalar])
    def logp(value):
        # Interpolates from observed values
        return np.array(np.log(np.interp(value, x, y, left=y0, right=y0)))

    return FromPosterior(param, testval=np.median(samples))

然后,alpha通过from_posterior使用参数名称和来自上一次迭代的后验的跟踪样本来调用函数来定义模型参数的先验(例如):

alpha = from_posterior('alpha', trace['alpha'])
其他 2022/1/1 18:36:59 有441人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶