Выборка PyMC игнорирует границы параметра - PullRequest
0 голосов
/ 03 октября 2018

Я хочу использовать выборку срезов в PyMC2.У меня есть пользовательская функция log_likelihood и модель с 4 одинаковыми параметрами с верхними и нижними границами.

Когда я запускаю выборку, PyMC игнорирует границы параметров и генерирует значения вне границ.

Я написал простой пример этого:

import pymc as pm
X = pm.Uniform('X', 0, 1, value=0.45)

@pm.potential
def log_l(X=X):
    print 'X = ',X
    logp = -X**2 / 5.
    print 'logp = ',logp
    return logp


m = pm.MCMC([X, log_l])
m.use_step_method(pm.Slicer, X)
m.sample(iter=1)

Пример вывода:

X =  -0.0287598536765
logp =  -0.000165425836698
X =  -1.02875985368
logp =  -0.211669367307
X =  -2.02875985368
logp =  -0.823173308778
X =  0.971240146324
logp =  -0.188661484366
X =  1.97124014632
logp =  -0.777157542896
X =  -0.157629460676
logp =  -0.00496940937459

Таким образом, выборка генерирует значения X, которые являются отрицательными, несмотря на то, что единообразный априор определяет нижнюю границу 0.

Есть ли у кого-нибудь интуиция относительно того, почему это так?происходит?

...