Pymc3:很慢而且停滞不前

时间:2014-05-15 17:23:17

标签: python linear-regression pymc pymc3

有什么理由说NUTS采样器可能很慢或失速? 我使用http://twiecki.github.io/blog/2014/03/17/bayesian-glms-3/作为某些人的基础 层次线性回归工作。 我尝试从find_MAP()开始尝试,它在100之后仍然停滞不前 2000次迭代

我的代码是

with pm.Model() as hierarchical_model:
   # Hyperpriors for group nodes
   mu_a = pm.Normal('mu_alpha', mu=0., sd=100**2)
   sigma_a = pm.Uniform('sigma_alpha', lower=0, upper=100)
   mu_b = pm.Normal('mu_beta', mu=0., sd=100**2)
   sigma_b = pm.Uniform('sigma_beta', lower=0, upper=100)

   a = pm.Normal('alpha', mu=mu_a, sd=sigma_a, shape=n_dis)
   b = pm.Normal('beta', mu=mu_b, sd=sigma_b, shape=n_dis)

   # Model error
   eps = pm.Uniform('eps', lower=0, upper=100)

   actual_est = a[disRefV] + b[disRefV] * data.baseline.values

   actual_like = pm.Normal('actual_like', mu=actual_est, sd=eps, observed=data.prepanel)

with hierarchical_model:
    start = pm.find_MAP()
    step = pm.NUTS()
    hierarchical_trace = pm.sample(2000, step, progressbar=True)

非常感谢提前

1 个答案:

答案 0 :(得分:2)

NUTS有时会卡住。您是否对数据进行了分数/标准化?这通常有助于我的实验。如果您使用的是分层模型,您可能希望根据组均值对您的数据进行z分数,而不是单独的方法。

然后你可以重新调整你的后代,使它们在原始空间中(Kruscke一书中的公式17.1“做贝叶斯数据分析”)。