Początkujący PyMC: jak właściwie pobierać próbki z dopasowanego modelu

12

Próbuję bardzo prostego modelu: dopasowanie Normalnego, w którym zakładam, że znam precyzję i chcę tylko znaleźć środek. Poniższy kod wydaje się poprawnie pasować do Normalnego. Ale po dopasowaniu chcę próbkować z modelu, tj. Generować nowe dane, które są podobne do mojej datazmiennej. Wiem, że mogę użyć trace("mean")do pobrania próbek dla zmiennej średniej. Ale jak mogę uzyskać nowe próbki z samego modelu?

Przeglądałem dokumenty np . Http://pymc-devs.github.io/pymc/database.html#accessing-sampled-data . Spojrzałem również na kilka przykładów, np. Katastrofy wydobywcze i kilka z notatników Probabilistic Programming, i żaden z nich o tym nie wspomina. Ja (mniej więcej początkujący MCMC) spodziewałem się, że próbowanie z dopasowanego modelu było najważniejsze! czego mi brakuje?

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")?
jmmcd
źródło
Dokładnie pytanie, które miałem! Zastanawiasz się, czy w pymc3 uproszczono predykcyjne próbkowanie ...
Vladislavs Dovgalecs 15.04.16

Odpowiedzi:

15

Patrzysz na tak zwaną dystrybucję predykcyjną . Uwzględnienie tego jest bardzo proste. Przed utworzeniem Modeldodaj dodatkową zmienną stochastyczną:

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

...

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

Sztuczne dane z dopasowanego modelu

Spowoduje to wygenerowanie sztucznych danych z dopasowanego modelu. Dzięki za zwrócenie mojej uwagi na ten nadzór, włączę go do projektu BMH.

Cam.Davidson.Pilon
źródło
Jak stworzyć tablicę n losowych zmiennych, w których n jest losowe? stackoverflow.com/questions/45283843/… (Przepraszam, że to za dużo ...)
drake
4

Wylądowałem tutaj kilka lat później, szukając tego samego za pomocą PyMC3, więc zostawiam odpowiedź dotyczącą nowej wersji: (z posterior Predictive Checks ).

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

Teraz ppc zawiera 500 wygenerowanych zestawów danych (zawierających po 100 próbek), z których każdy używa innego ustawienia parametrów niż tylny.

Jan Kukacka
źródło