2016-11-23 2 views
2

Использование PyMC3 для выполнения байесовской линейной регрессии. Я построил свою модель, и я хочу предсказать задний цвет для новых значений X, используя ту же модель. Я пытаюсь выполнить инструкции на веб-сайте документации: https://pymc-devs.github.io/pymc3/notebooks/posterior_predictive.html (см. Прогноз). Это включает в себя преобразование значений X в общую переменную anano перед анализом, а затем изменение значений после создания модели и запуск run_ppc(). Я выполнил быстрые 200 итераций, как пример (я бы использовал намного больше для фактического анализа).Предсказание Posterior для новых данных в байесовской линейной регрессии с использованием PyMC3

X1_shared = theano.shared(final_df['poll_diff'].values) 
Y1 = final_df['rd_diff'].values 

basic_model = pm.Model() 
with basic_model: 

    # Priors for unknown model parameters 
    sigma = HalfCauchy('sigma', beta=10, testval=1.) 
    intercept = Normal('Intercept', 0, sd=20) 
    x_coeff = Normal('x', 0, sd=20) 

    # Define likelihood 
    likelihood = Normal('y', mu=intercept + x_coeff * X1_shared, 
         sd=sigma, observed= Y1) 

    #start = find_MAP() 
    start = find_MAP() # Find starting value by optimization 
    step = NUTS(scaling=start) # Instantiate MCMC sampling algorithm 
    trace = sample(200, step, start=start) 
pm.traceplot(trace) 
plt.show() 

enter image description here

sns.lmplot(x="poll_diff", y="rd_diff", data=final_df, size=10) 
x = np.array(range(-1, 2)) 
pm.glm.plot_posterior_predictive(trace, samples=100, eval=x) 
plt.show() 

enter image description here

X1_shared.set_value(ana_2016_df['poll_diff'].values) 
ppc = pm.sample_ppc(trace, model=model, samples=100) 

Но я получаю следующее сообщение об ошибке:

AttributeError       Traceback (most recent call last) 
<ipython-input-73-9c1eb48d987f> in <module>() 
----> 1 ppc = pm.sample_ppc(trace, model=model, samples=100) 

C:\Users\W\Anaconda3\lib\site-packages\pymc3\sampling.py in sample_ppc(trace, samples, model, vars, size, random_seed) 
    349 
    350  if vars is None: 
--> 351   vars = model.observed_RVs 
    352 
    353  seed(random_seed) 

AttributeError: module 'pymc3.model' has no attribute 'observed_RVs' 

Следует отметить, что если я использую лопух обозначения Versio n, не изменяя переменные, эта ошибка не появляется, но я не знаю, как пассивный формат будет принимать переменную anano. Таким образом, решение будет либо адресовать мое сообщение об ошибке, либо показать, как ввести переменную anano в патчую версию модели. Благодаря!

+1

Я не могу воспроизвести вашу ошибку. Я заметил, что ваше имя модели - 'basic_model', но затем вы используете' ppc = pm.sample_ppc (trace, model = model, samples = 100) '. Разве вы не смешиваете переменные? (возможно, потому, что вы работаете с ноутбуком Jupyter). – aloctavodia

+0

Вау, это решило мою проблему. Спасибо, что нашли время, чтобы посмотреть на это, иногда это помогает иметь еще один набор глаз! –

ответ

0

Как указала алоктавадия, это была простая ошибка при настройке переменных. В ppc = pm.sample_ppc(trace, model=model, samples=100), model должно быть model = basic_model

Смежные вопросы