Pymc3的Python函数用于确定性问题

3
在贝叶斯方法中,这个笔记本创建了一个确定性变量,其源自于一个Python函数:
# from code line 9 in the notebook
@pm.deterministic
def lambda_(tau=tau, lambda_1=lambda_1, lambda_2=lambda_2):
    out = np.zeros(n_count_data)
    out[:tau] = lambda_1  # lambda before tau is lambda1
    out[tau:] = lambda_2  # lambda after (and including) tau is lambda2
    return out

我试图几乎完全重现这个实验,但显然在pymc3中没有@pm.deterministic。你有什么想法如何在pymc3中实现此功能?

1个回答

4

这个模型被翻译为PyMC3端口中的 "Probabilistic Programming and Bayesian Methods for Hackers"

with pm.Model() as model:
    alpha = 1.0/count_data.mean()  # Recall count_data is the
                                   # variable that holds our txt counts
    lambda_1 = pm.Exponential("lambda_1", alpha)
    lambda_2 = pm.Exponential("lambda_2", alpha)

    tau = pm.DiscreteUniform("tau", lower=0, upper=n_count_data - 1)

    # These two lines do what the deterministic function did above
    idx = np.arange(n_count_data) # Index
    lambda_ = pm.math.switch(tau > idx, lambda_1, lambda_2)

    observation = pm.Poisson("obs", lambda_, observed=count_data)
    trace = pm.sample()

请注意,我们只是使用pm.math.switch(它是theano.tensor.switch的别名)来计算lambda_。这里也有pm.Deterministic,但在这里不需要。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接