Załóżmy, że otrzymaliśmy wcześniejszą wiadomość od X (na przykład X ~ Gaussian) i operatora przesyłania do przodu y = f (x). Przypuśćmy, że za pomocą eksperymentu zaobserwowaliśmy y i że ten eksperyment może być powtarzany w nieskończoność. Zakłada się, że wyjście Y ma charakter gaussowski (Y-Gaussian) lub wolne od szumów (Delta Y (obserwacja)).Rozwiązywanie odwrotnych problemów z PyMC
Jak konsekwentnie aktualizować nasz subiektywny poziom wiedzy o X biorąc pod uwagę obserwacje? Próbowałem następujący model z PyMC, ale wydaje mi czegoś brakuje:
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
Niedrażniącym nie jest zbieżny do xtrue.
Wiem, że f (x) nie jest biempionem, zostało wybrane z tego konkretnego powodu. Nie widzę żadnego argumentu, aby MCMC zawodziło z tą dystrybucją wejściową, o ile wiem, MCMC jest w stanie wypróbować złożone, wielomodalne dystrybucje. – juliohm
Och, zrozumiałem twoją sprawę, problem polega na tym, jak aktualizuję stan sprzed. Używając po prostu pos.mean() i pos.var() zakładam rozwiązanie unimodalne. Jak rozwiązałbyś ten problem, znajdując zarówno 2, jak i -2? – juliohm
Innymi słowy, jak reprezentować nieparametryczne dystrybucje za pomocą PyMC? Biorąc pod uwagę ślad, przygotuj plik PDF pasujący do histogramu. – juliohm