Angenommen, wir sind gegeben vorveröffentlichten auf X (z.B. X ~ Gaussian) und einen vorderen Operator y = f (x). Nehmen wir weiter an, wir haben y mittels eines Experiments beobachtet und dieses Experiment kann unbegrenzt wiederholt werden. Der Ausgang Y wird als Gauß (Y ~ Gauß) oder rauschfrei (Y ~ Delta (Beobachtung)) angenommen.Lösen inverser Probleme mit PyMC
Wie aktualisiert man ständig unseren subjektiven Kenntnisgrad über X angesichts der Beobachtungen? Ich habe das folgende Modell mit PyMC versucht, aber es scheint, ich etwas fehlt:
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
Der hintere nicht konvergierenden ist XTRUE.
Ich weiß, f (x) ist keine Bijektion, wurde aus diesem Grund gewählt. Ich kann kein Argument dafür finden, dass MCMC mit dieser Eingabeverteilung fehlschlägt, soweit ich weiß, ist MCMC in der Lage, komplexe multimodale Verteilungen zu testen. – juliohm
Oh, ich habe deinen Standpunkt verstanden, das Problem liegt darin, wie ich den vorherigen update. Mit pos.mean() und pos.var() nehme ich eine unimodale Lösung an. Wie würden Sie dieses Problem lösen, um sowohl 2 als auch -2 zu finden? – juliohm
Mit anderen Worten, wie man nicht-parametrische Verteilungen mit PyMC darstellt? Stellen Sie eine gegebene PDF-Datei mit dem Histogramm her. – juliohm