Опитвам се да моделирам прост вероятностен пример за програмиране с помощта на pymc 2. Играя си с други езици като Church и Anglican и мога да моделирам този проблем без затруднения. Изглежда обаче не мога да го разбера в Python.
Ето кода на англикански, аз мисля, че е доста разбираемо от само себе си:
[assume a (- (poisson 100) 100)]
[assume b (- (poisson 100) 100)]
[observe (normal (+ a b) .00001) 7]
[predict (list a b)]
Използвайки семплера Metropolis-Hastings, получавам:
1 (10 1)
2 (10 8)
9977 (7 0)
20 (7 1)
С Particle Gibbs получавам:
669 (-1 8)
71 (-10 17)
66 (-11 18)
208 (-12 19)
19 (-13 20)
84 (-14 21)
72 (-15 22)
441 (-2 9)
...and so on...
Опитвам се да моделирам това в pymc така:
def make_model():
a = (pymc.Poisson("a", 100) - 100)
b = (pymc.Poisson("b", 100) - 100)
precision = pymc.Uniform('precision', lower=.0001, upper=1.0)
@pymc.deterministic
def mu(a=a, b=b):
return a+b
y = pymc.Normal("y", mu=mu, tau=precision, observed=True, value=7)
return pymc.Model(locals())
def run_mcmc(model):
mcmc = pymc.MCMC(model)
mcmc.sample(5000, burn=1000, thin=2)
return mcmc
result = run_mcmc(make_model())
pymc.Matplot.plot(result)
Получавам следи, където a и b са около 100. Въпреки това, ако стартирам (pymc.Poisson("a", 100) - 100).value
, получавам числа, по-близо до 0.
Пропускам ли нещо тук? Вълнувам се от възможностите, но в момента съм много объркан! Благодаря за всяка помощ!
9977 (7 0)
означава, че a=7, b=0 се появява 9977 пъти от 10 000 проби. - person stratospark   schedule 11.02.2015