使用Metropolis-Hastings算法时如何确定步长

时间:2015-02-24 01:46:16

标签: numpy pymc mcmc random-walk

我对Metropolis-Hastings算法有一个简单的问题。 假设分布只有一个变量x,x的值范围是s = [ - 2 ^ 31,2 ^ 31]。

在抽样过程中,我需要提出x的新值,然后决定是否接受它。

x_{t+1} =x_t+\epsilon 

如果我想自己实现它,如何确定\ epsilon的值。

基本解决方案是从Uniform [-2 ^ 31,2 ^ 31]中选择一个值并将其设置为\ epsilon。如果值范围是无限的,如[-inf,inf]?

,该怎么办?

当前的MCMC库(例如pymc)如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

最好的方法是编写一个自调整算法,该算法以步长方差的任意方差开始,并随着算法的进展调整此方差。你正在拍摄Metropolis算法的接受率为25-50%。

答案 1 :(得分:1)

假设您有$ d $维度参数,最佳比例约为目标分布规模的$ 2.4d ^( - 1/2)$倍,这意味着$ d = 1 $和0.23的最佳接受率为0.44 $ d $转到\ infinity。

参考:随机游走大都会算法中的自动步长选择, Todd L. Graves,2011年。