PyMC-Anfänger: Wie man tatsächlich aus dem angepassten Modell probiert


11

Ich versuche ein sehr einfaches Modell: Anpassen eines Normalen, bei dem ich davon ausgehe, dass ich die Präzision kenne und nur den Mittelwert ermitteln möchte. Der folgende Code scheint korrekt zum Normal zu passen. Aber nach dem Anpassen möchte ich aus dem Modell eine Stichprobe erstellen, dh neue Daten generieren, die meiner dataVariablen ähnlich sind. Ich weiß, dass ich trace("mean")Stichproben für die mittlere Variable erhalten kann. Aber wie kann ich neue Muster vom Modell selbst erhalten?

Ich habe mir Dokumente angesehen, z . B. http://pymc-devs.github.io/pymc/database.html#accessing-sampled-data . Ich habe mir auch einige Beispiele angesehen, z. B. die Bergbaukatastrophen und einige aus den Notizbüchern zur probabilistischen Programmierung, und keine erwähnt dies. Ich (mehr oder weniger ein MCMC-Anfänger) hatte erwartet, dass die Probenahme aus dem angepassten Modell der springende Punkt war! Was vermisse ich?

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")?

Genau die Frage, die ich hatte! Ich
frage

Antworten:


13

Sie suchen die sogenannte prädiktive Verteilung . Dies einzubeziehen ist sehr einfach. Fügen Sie vor dem Erstellen Modeldie zusätzliche stochastische Variable hinzu:

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

...

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

Künstliche Daten aus dem angepassten Modell

Dadurch werden künstliche Daten aus dem angepassten Modell generiert. Vielen Dank, dass Sie mich auf dieses Versehen aufmerksam gemacht haben. Ich werde es in das BMH-Projekt aufnehmen.


Wie erstellt man ein Array von n Zufallsvariablen, in denen n zufällig ist? stackoverflow.com/questions/45283843/… (Entschuldigung, das ist zu viel ...)
Drake

2

Ich bin einige Jahre später hier gelandet, als ich mit PyMC3 nach dem gleichen Thema gesucht habe. Daher werde ich eine Antwort hinterlassen, die für die neue Version relevant ist: (von Posterior Predictive Checks ).

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

Jetzt enthält ppc 500 generierte Datensätze (mit jeweils 100 Proben), die jeweils eine andere Parametereinstellung als der hintere verwenden.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.