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))
按照@ChrisFonnesbeck的建议,我写了一个关于增量预先更新的小教程笔记本。可以在这里找到:
https://github.com/pymc-devs/pymc3/blob/master/docs/source/notebooks/updating_priors.ipynb
基本上,您需要将后验样本包装在一个定制的连续类中,该类从中计算KDE。下面的代码就是这样做的:
然后,通过调用
^{pr2}$from_posterior
函数来定义模型参数的previor(比如alpha
),方法是使用参数名和上一次迭代后面的跟踪样本来调用from_posterior
函数:相关问题 更多 >
编程相关推荐