import random,math
def gibbs(N=50000,thin=1000):
x=0
y=0
print "Iter x y"
for i in range(N):
for j in range(thin):
x=random.gammavariate(3,1.0/(y*y+4))
y=random.gauss(1.0/(x+1),1.0/math.sqrt(2*x+2))
print i,x,y
gibbs()
上面的python代码是Gibbs Sampling,以下行让我感到困惑。
for j in range(thin):
这个额外内循环的意义是什么?
答案 0 :(得分:1)
原因似乎是在你的Gibbs采样中引入了细化。细化用于减少连续样本之间的相关性的影响。吉布斯采样产生马尔可夫样本链,并且附近的样本是相关的,而通常意图是绘制独立的样本。
要实现这一点,您只能使用每个M-th
值,而忽略所有中间值。在这种情况下,M
存储在变量thinning
中,并且您只获取每个thinning
值,然后打印在for循环下方。