pymc
pymc copied to clipboard
Compute Metropolis average accept probability with `logsumexp`
In the Metropolis step stats that we report on the progressbar, we have a probability of acceptance. This is currently computed in a very direct way, just np.mean(np.exp(log_accept_prob)). We can do better with np.exp(logsumexp(log_accept_prob) - log(len(log_accept_prob))).
In really gnarly models, I've encountered overflows in this step. This might also be because there's a max(delta_logp, 1) missing from the acceptance probabilities. But even if we add that, the computation method in this PR is more numerically stable and accurate.
📚 Documentation preview 📚: https://pymc--7783.org.readthedocs.build/en/7783/