Supponiamo siamo in una precedente su X (ad esempio X ~ gaussiana) e un attaccante operatore y = f (x). Supponiamo di aver osservato y per mezzo di un esperimento e che questo esperimento possa essere ripetuto indefinitamente. Si presume che l'uscita Y sia gaussiana (Y ~ gaussiana) o priva di disturbi (Y ~ Delta (osservazione)).Risoluzione problemi inversi con PyMC
Come aggiornare costantemente il nostro grado di conoscenza soggettiva su X date le osservazioni? Ho provato il seguente modello con PyMC, ma sembra che mi manca qualcosa:
from pymc import *
xtrue = 2 # this value is unknown in the real application
x = rnormal(0, 0.01, size=10000) # initial guess
for i in range(5):
X = Normal('X', x.mean(), 1./x.var())
Y = X*X # f(x) = x*x
OBS = Normal('OBS', Y, 0.1, value=xtrue*xtrue+rnormal(0,1), observed=True)
model = Model([X,Y,OBS])
mcmc = MCMC(model)
mcmc.sample(10000)
x = mcmc.trace('X')[:] # posterior samples
Il posteriore non sta convergendo a Xtrue.
So che f (x) non è una biiezione, è stato scelto per quella specifica ragione. Non riesco a vedere alcun argomento perché MCMC fallisca con questa distribuzione di input, per quanto ne so, MCMC è in grado di campionare distribuzioni multimodali complesse. – juliohm
Oh, ho capito il tuo punto, il problema è in come aggiorno il precedente. Semplicemente usando pos.mean() e pos.var() sto assumendo una soluzione unimodale. Come risolveresti questo problema per trovare sia 2 che -2? – juliohm
In altre parole, come rappresentare le distribuzioni non parametriche con PyMC? Data la traccia, produrre un PDF che corrisponda all'istogramma. – juliohm