Principiante PyMC: come campionare effettivamente dal modello montato


12

Sto provando un modello molto semplice: adattare una Normale dove presumo di conoscere la precisione e voglio solo trovare la media. Il codice seguente sembra adattarsi correttamente al normale. Ma dopo il montaggio, voglio campionare dal modello, ovvero generare nuovi dati che sono simili alla mia datavariabile. So che posso usare trace("mean")per ottenere campioni per la variabile media. Ma come posso ottenere nuovi campioni dal modello stesso?

Ho esaminato i documenti, ad esempio http://pymc-devs.github.io/pymc/database.html#accessing-sampled-data . Ho anche preso in considerazione alcuni esempi, ad esempio le catastrofi minerarie, e diversi dai quaderni di programmazione probabilistica, e nessuno menziona questo. Io (più o meno un principiante MCMC) mi aspettavo che il campionamento dal modello montato fosse il punto! Cosa mi sto perdendo?

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

Esattamente la domanda che avevo! Mi chiedo se il campionamento predittivo sia semplificato in pymc3 ...
Vladislavs Dovgalecs

Risposte:


15

Stai osservando la cosiddetta distribuzione predittiva . Includere questo è molto semplice. Prima di creare il Model, aggiungi la variabile stocastica aggiuntiva:

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

...

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

Dati artificiali dal modello montato

Ciò genererà dati artificiali dal modello montato. Grazie per aver portato questa svista alla mia attenzione, la includerò nel progetto BMH.


Come si crea una matrice di n variabili casuali in cui n è casuale? stackoverflow.com/questions/45283843/… (Siamo spiacenti, è troppo ...)
drake

4

Atterrato qui diversi anni dopo, quando cercavo la stessa cosa usando PyMC3, quindi lascerò una risposta relativa alla nuova versione: (dai controlli predittivi posteriori ).

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

Ora, ppc contiene 500 set di dati generati (contenenti 100 campioni ciascuno), ognuno dei quali utilizza un'impostazione dei parametri diversa da quella posteriore.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.