2016-11-23 8 views
2

PyMC3을 사용하여 베이지안 선형 회귀를 수행합니다. 내 모델을 만들었고 동일한 모델을 사용하여 새 X 값의 후부를 예측하고 싶습니다. 나는 설명서 웹 사이트 https://pymc-devs.github.io/pymc3/notebooks/posterior_predictive.html (Prediction 참조)의 지시 사항을 따르려고 시도했다. 분석 전에 X 값을 theano 공유 변수로 만든 다음 모델 작성 후 값을 변경하고 run_ppc()을 실행합니다. 예를 들어 (실제 분석을 위해 더 많이 실행 하겠지만) 200 회 반복을 실행했습니다.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' 

을 변수를 변경하지 않고이 오류는 나타나지 않지만 pats 형식이 theano 공유 변수를 어떻게 받아들이는지 모르겠습니다. 그래서 해결책은 내 오류 메시지를 해결하거나, 모델의 희미한 버전에 theano 공유 변수를 삽입하는 방법을 보여줄 것입니다. 감사!

+1

입니다. 오류를 재현하지 못합니다. 귀하의 모델 이름이'basic_model'인데,'ppc = pm.sample_ppc (trace, model = model, samples = 100)'을 사용합니다. 변수를 섞어 보지 않으시겠습니까? (아마도 Jupyter 노트북을 사용하기 때문에). – aloctavodia

+0

와우, 그게 내 문제를 해결해 줬어. 시간을내어 주셔서 감사합니다. 때로는 또 다른 눈을 갖는 데 도움이됩니다! –

답변

0

aloctavodia가 지적했듯이, 이것은 변수 설정에서 간단한 오류입니다. ppc = pm.sample_ppc(trace, model=model, samples=100)에서 modelmodel = basic_model