python - How do I calculate Pr(model|data) in Bayesian inference with extremely small numbers? -
i'm doing bayesian inference (manually, using grid search) in python. want calculate probability of each model given data. problem can calculate 'evidence' in log, otherwise 0. so, though between 0-1, can't results for:
pr(data|model1) / (pr(data|model1) + pr(data|model2)) since each term 0 in non-log form.
any ideas?
thanks
let logpr1 , logpr2 log(data|model1) , log(data|model2), respectively, , suppose
in [57]: logpr1 = -802 in [58]: logpr2 = -800 if try express probabilities (not logarithms of probabilities), 0:
in [59]: np.exp(logpr2) out[59]: 0.0 now want compute
log(pr(data|model1) / (pr(data|model1) + pr(data|model2))), which can write as
log(pr(data|model1)) - log(pr(data|model1) + pr(data|model2)). for last term, can use function numpy.logaddexp (which essential tip in answer; see scipy.misc.logsumexp). calculation is:
in [60]: logp = logpr1 - np.logaddexp(logpr1, logpr2) in [61]: logp out[61]: -2.1269280110429918 in case, number not small. in fact, can express plain probability:
in [62]: np.exp(logp) out[62]: 0.11920292202211526
Comments
Post a Comment