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 data
Variablen ä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")?
Antworten:
Sie suchen die sogenannte prädiktive Verteilung . Dies einzubeziehen ist sehr einfach. Fügen Sie vor dem Erstellen
Model
die zusätzliche stochastische Variable hinzu: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.
quelle
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 ).
quelle