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()
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()
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 공유 변수를 삽입하는 방법을 보여줄 것입니다. 감사!
입니다. 오류를 재현하지 못합니다. 귀하의 모델 이름이'basic_model'인데,'ppc = pm.sample_ppc (trace, model = model, samples = 100)'을 사용합니다. 변수를 섞어 보지 않으시겠습니까? (아마도 Jupyter 노트북을 사용하기 때문에). – aloctavodia
와우, 그게 내 문제를 해결해 줬어. 시간을내어 주셔서 감사합니다. 때로는 또 다른 눈을 갖는 데 도움이됩니다! –