Numpy 使用Metropolis时如何确定步长–;黑斯廷斯算法

Numpy 使用Metropolis时如何确定步长–;黑斯廷斯算法,numpy,pymc,mcmc,random-walk,Numpy,Pymc,Mcmc,Random Walk,我有一个关于大都会黑斯廷斯算法的简单问题。 假设分布只有一个变量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)如何解决该问题?最好的方法是编写一个自调整算法,该

我有一个关于大都会黑斯廷斯算法的简单问题。 假设分布只有一个变量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)如何解决该问题?

最好的方法是编写一个自调整算法,该算法从步长方差的任意方差开始,并随着算法的进展调整该方差。您希望Metropolis算法的接受率达到25-50%。

假设您有$d$维度参数,最佳比例约为$2.4d^(−1/2)$乘以目标分布的规模,这意味着$d=1$的最佳接受率为0.44,$d$的最佳接受率为0.23,这将无限大

参考:随机行走Metropolis算法中的自动步长选择, 托德·L·格雷夫斯,2011年