在PyMC3中更新模型

我目前正在PyMC3中构建以下模型:

obs_data = 25


with pm.Model() as model:
      xct = pm.Normal('xct',mu = 315.5,sigma = 48)
       #xct = np.random.normal(315.5,48) 
       a = pm.Normal('a',mu=0,sigma = 2.0)


# specify the time that the data points comes in at
       t = 15


       g_e = 2.5
       f_e = 5.0


       RH_ref = 65


       RH_real = pm.Beta('RH_real',alpha=40.0,beta = 100.0)


       k_e = ( (1 - (RH_real/100)**f_e)/ (1 - (RH_ref/100)**f_e)) ** g_e



       b_c = pm.Normal('b_c',mu=-0.567,sigma = 0.024)
       t_c = 2.0
       k_c = (t_c/7)**b_c



      k_t = pm.Normal('k_t',mu=1.25,sigma = 0.35)

      C_s = pm.Normal('C_s',mu = 0.00082,sigma = 0.0001)


      t0 = 0.767 

      tow = 0.1

      bw = pm.Normal('bw',mu =0.446,sigma = 0.163)
      p_sr = 0.1

      W_t = (t0/t) **(((p_sr * tow)**bw)/2)


      g = a + np.sqrt(2 * k_e * k_c * (k_t * Racc_inv + xct) * C_s) * np.sqrt(t)* W_t


      output = pm.Lognormal('output',mu = g,sigma  = 2,observed = obs_data)
      step0 = pm.NUTS([xct],target_accept = 0.9)
      step1 = pm.NUTS([a],target_accept = 0.9)
      step2 = pm.NUTS([b_c],target_accept = 0.9)
      step3 = pm.NUTS([k_t],target_accept = 0.9)
      step4 = pm.NUTS([RH_real],target_accept = 0.9)
      step5 = pm.NUTS([Racc_inv],target_accept = 0.9)
      step6 = pm.NUTS([epsilon_t],target_accept = 0.9)
      step7 = pm.NUTS([C_s],target_accept = 0.9)
      trace = pm.sample(13000,init='advi+adapt_diag_grad',step=[step0,step1,step2,step3,step4,step5,step6,step7],cores=4,tune=8000,chains = 8)

但是,我得到了错误: 调整后有159个差异。增加target_accept或重新设定参数。”并在结尾处:“对于某些参数,有效样本的数量小于10%。”

使用这种分步方法,我得到的分歧最少。我该如何摆脱它们?我知道有可能重新设置参数,但是当我以特定方式设置系统时该怎么办?

还有其他采样方法吗?

lykccz 回答:在PyMC3中更新模型

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3158460.html

大家都在问