PyMC 초보자 : 실제로 적합 모델에서 샘플링하는 방법


12

나는 매우 간단한 모델을 시도하고 있습니다. 정밀도를 알고 있다고 가정하는 법선을 피팅하고 평균을 찾고 싶습니다. 아래 코드는 Normal에 올바르게 맞는 것 같습니다. 그러나 피팅 후 모델에서 샘플링하고 싶습니다. 예를 들어 data변수 와 유사한 새 데이터를 생성 합니다. trace("mean")평균 변수에 대한 샘플을 얻는 데 사용할 수 있다는 것을 알고 있습니다 . 그러나 어떻게 모델 자체에서 새로운 샘플을 얻을 수 있습니까?

http://pymc-devs.github.io/pymc/database.html#accessing-sampled-data와 같은 문서를 살펴 보았습니다 . 또한 광산 재난과 같은 몇 가지 예와 확률 적 프로그래밍 노트북에서 몇 가지 예를 살펴 보았지만 이것에 대해서는 언급하지 않았습니다. 나는 (MCMC 초보자) 다소 적합 모델로부터의 샘플링이 핵심이라고 생각했다! 내가 무엇을 놓치고 있습니까?

from pymc import *
data = np.array([-1, 0, 4, 0, 2, -2, 1, 0, 0, 2, 1, -3, -1, 0, 0, 1, 0, 1])
mean = Uniform("mean", -4, 4)
precision = 2.0**-2
obs = Normal("obs", mean, precision, value=data, observed=True)
model = Model( {"mean": mean, "obs": obs})
mcmc = MCMC(model)
mcmc.sample(10000, 1000, 1)
# I can get samples for the "mean" variable
mean_samples = mcmc.trace("mean")[:]
hist(mean_samples)
# but how can I do the equivalent of mcmc.trace("obs")?

내가 가진 질문은 정확히! pymc3에서 예측 샘플링이 단순화되는지 궁금합니다.
Vladislavs Dovgalecs

답변:


15

예측 분포 라는 것을 찾고 있습니다. 이것을 포함하는 것은 매우 간단합니다. 를 만들기 전에 Model추가 확률 변수를 추가하십시오.

predictive = mc.Normal( "predictive", mean, precision )
model = Model( {"mean": mean, "obs": obs, "pred":predictive})

...

predictive_traces = mcmc.trace("predictive")[:]
hist( predictive_traces )

적합 모델의 인공 데이터

그러면 적합 모형에서 인공 데이터가 생성됩니다. 이 감독에 관심을 가져 주셔서 감사합니다. BMH 프로젝트에 포함시킬 것입니다.


n이 임의 인 n 개의 임의 변수 배열을 어떻게 생성합니까? stackoverflow.com/questions/45283843/… (죄송합니다. 너무 큽니다 ...)
drake

4

몇 년 후 PyMC3를 사용하여 동일한 것을 찾을 때 여기에 도착 했으므로 새 버전과 관련된 답변을 남겨 두겠습니다 : (Postior Predictive Checks ).

ppc = pm.sample_ppc(trace, samples=500, model=model, size=100)

이제 ppc에는 500 개의 생성 된 데이터 세트 (각각 100 개의 샘플이 포함됨)가 포함되어 있으며, 각각은 후방과 다른 매개 변수 설정을 사용합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.