PyMC3在创建位置模型期间生成错误

时间:2019-05-06 09:25:10

标签: python bayesian pymc3 poisson

我写了简单的泊松模型创建代码。但是PyMC3会产生错误,需要在模型内部添加一个附加变量。

模型看起来不错。但我不确定出了什么问题。

代码:

with pm.Model() as model:

    lambda_1 = pm.Exponential('lambda_1', alpha) # create stochastic    variable
    lambda_2 = pm.Exponential('lambda_2', alpha) #create stochastic variable

    tau = pm.DiscreteUniform("tau", lower=0, upper=size)
    print("Random output:", tau.random(), tau.random(), tau.random())


    def lambda_ (tau=tau, lambda_1 = lambda_1, lambda_2 = lambda_2):
       out = np.zeros(size)
       out[:tau] = lambda_1
       out[tau:] = lambda_2

       return out

   observation = pm.Poisson("obs", lambda_, lambda_value = textfile,    observed=True)

   model = pm.Model(observation, lambda_1, lambda_2, tau)

错误:

  

文件“”,
中的第1行      runfile('/ home / saul / pythonWork / textmessageAnalysis.py',wdir ='/ home / saul / pythonWork')

     

runfile中的文件“ /home/saul/anaconda3/lib/python3.7/site-packages/spyder_kernels/customize/spydercustomize.py”,第786行       execfile(文件名,命名空间)

     

exec文件中的文件“ /home/saul/anaconda3/lib/python3.7/site-packages/spyder_kernels/customize/spydercustomize.py”,第110行       exec(compile(f.read(),文件名,'exec'),命名空间)

     

文件“ /home/saul/pythonWork/textmessageAnalysis.py”,第51行,在       观察= pm.Poisson(“ obs”,lambda_,lambda_value =文本文件,observed = True)

     

中的文件“ /home/saul/.local/lib/python3.7/site-packages/pymc3/distributions/distribution.py”,第31行       引发TypeError(“上下文堆栈上没有模型,这对于”

     

TypeError:上下文堆栈上没有模型,实例化分布是必需的。在'with model:'块内添加变量,或使用'.dist'语法进行独立分发。

1 个答案:

答案 0 :(得分:0)

我解决了这个问题。该问题主要是由于PyMC3的性质与PyMC完全不同。

更新后的代码如下。

n_data_points = size   
idx = np.arange(n_data_points)
with model:
    lambda_ = pm.math.switch(tau >= idx, lambda_1, lambda_2)            


with model:
    obs = pm.Poisson("obs", lambda_, observed=textfile)
print(obs.tag.test_value)

model = pm.Model([obs, lambda_1, lambda_2, tau])
print(model)