使用PyMC3进行增量模型更新

2024-06-01 05:43:20 发布

您现在位置:Python中文网/ 问答频道 /正文

是否可以在pyMC3中增量更新模型。我目前找不到这方面的信息。所有文档始终使用先验已知的数据。在

但在我看来,贝叶斯模型也意味着能够更新一种信念。这在pyMC3中可能吗?我在哪里可以找到信息?在

谢谢:)


Tags: 数据文档模型信息增量信念先验pymc3
1条回答
网友
1楼 · 发布于 2024-06-01 05:43:20

按照@ChrisFonnesbeck的建议,我写了一个关于增量预先更新的小教程笔记本。可以在这里找到:

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

基本上,您需要将后验样本包装在一个定制的连续类中,该类从中计算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))

然后,通过调用from_posterior函数来定义模型参数的previor(比如alpha),方法是使用参数名和上一次迭代后面的跟踪样本来调用from_posterior函数:

^{pr2}$

相关问题 更多 >