PyMC3 генерирует ошибку при создании модели Possion - PullRequest
1 голос
/ 06 мая 2019

Я написал простой код создания модели Пуассона. Но 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')

Файл "/home/saul/anaconda3/lib/python3.7/site-packages/spyder_kernels/customize/spydercustomize.py", строка 786, в runfile execfile (имя файла, пространство имен)

Файл "/home/saul/anaconda3/lib/python3.7/site-packages/spyder_kernels/customize/spydercustomize.py", строка 110, в execfile exec (compile (f.read (), filename, 'exec'), пространство имен)

Файл "/home/saul/pythonWork/textmessageAnalysis.py", строка 51, в наблюдение = pm.Poisson ("obs", lambda_, lambda_value = текстовый файл, наблюдаемый = True)

Файл "/home/saul/.local/lib/python3.7/site-packages/pymc3/distributions/distribution.py", строка 31, в new повысить TypeError («Нет модели в стеке контекста, которая необходима для»

TypeError: Нет модели в стеке контекста, которая необходима для создания экземпляров распределений. Добавьте переменную внутри блока 'with model:' или используйте синтаксис '.dist' для автономного дистрибутива.

1 Ответ

0 голосов
/ 13 мая 2019

Я решил проблему. Проблема была в основном из-за природы 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)
...