令Q={Q1,Q2,Q3……Qn}表示待查询的变量,E={E1,E2,E3……En}为证据变量,已知其取值为e={e1,e2,e3……ek}。目标是计算后验概率P={Q = q | E = e},其中q={q1,q2,q3……qn}是待查询变量的一组取值。以西瓜问题为例,待查询变量为Q={好瓜,甜度},证据变量E={色泽,敲声,根蒂}并且已经知道甜度为e={亲绿,浊响,蜷缩},查询的目标值是q={是,高},即这是好瓜并且甜度高的概率有多少
输入:贝叶斯网 B={G,谁他}
采样次数 T
证据变量 E 以及取值 e
待查询的变量 Q 以及 取值q
过程:
nq=0
q0对Q随机赋予初始值
for t =1,2……T do
for Qi 属于 Q do
Z = E ∪ Q \ {Qi}
z = e ∪ q^(t-1) \{qi(t-1)}
根据 B 计算分布 PB(Qi | Z =z)
qit = 根据 PB(Qi | Z =z)采样所获得Qi取值
qt = 将q^(t-1) 中的 qi(t-1) 用 qi(t)代替
end for
if q^t =q then
np=np+1
end if
end for
输出:
P( Q =q | E = e)= nq / T
吉布斯采样算法先随机产生一个与证据 E= e 一致的样本 q0 作为初始点,然后每部从当前样本出发产生下一个样本。具体来说,在第t次的采样中,算法先假设 q^t = q^(t-1),然后对非证据变量逐个进行采样来改变其取值,采样概率根据贝叶斯网路B 和其他变量的当前取值(Z = z))进行计算获得,假设经过 T 次采样得到与 q一致的样本共有n q个,则可以近似的估算出 后验概率
P (Q = q | E = e) = nq / T
实质上,吉布斯采样是在贝叶斯网所有变量的联合状态空间与证据 E =e一致的子空间的随机漫步,每一步仅仅依赖于前一步的状态,这是一个马尔科夫链。在一定的条件下,无论从什么初始状态开始,马尔可夫链第t步的状态分布在 t -> ∞ 必定收敛于一个平稳分布,对于吉布斯采样来说,这个分布恰好是 P(Q | E = e)。因此,当T 很大的时候,吉布斯采样相当于是根据 P(Q | E = e)采样,从而保证了 P(Q =q | E= e)收敛于nq / T