采样 Sampling in BN¶
之前在强化学习中已经接触过采样sampling的方法,但是当时的目的是学习Learning
在贝叶斯网络中,节点的概率信息是已知的,采样的目的是比直接计算更快地得到概率推理的结果,虽然这个结果不一定准确
假设一个节点A,有60%概率得到+a,40%概率得到-a
我们可以用一个0-1之间的随机数模拟这个节点,当随机数在0-0.6之间,视为采样得到+a;0.6-1之间视为-a
如果一个采样方法是一致的consistent,意味着当采样次数足够大,频率能趋近于正确的概率
先验采样 Prior Sampling¶
沿着BN从上到下进行抽取样本,根据每个节点的概率分布来模拟抽取的概率
然后根据样本的频率,就可以推理概率,例如
\[P(+c) = N(+c) / N\]
\[P(+c \mid -s) = N(+c,-s) / N(-s)\]
伪代码:
#generate one sample
def PriorSampling():
for i in (1,2,...,n):
sample x_i from P(X_i | Parents(X_i))
return (x_1,x_2,...,x_n)
拒绝采样 Rejection Sampling¶
和先验采样的流程基本一致
唯一的区别是,对于带有条件概率的推理,不保留所有样本最后再计算,而是直接丢弃不符合条件evidence的样本
伪代码:
def RejectionSampling():
for i in (1,2,...,n):
sample x_i from P(X_i | Parents(X_i))
if x_i not consistent with evidence:
return
#reject - no sample is generated in this try
return (x_1,x_2,...,x_n)
抽取到符合条件的样本的可能性就是P(condition),所以很多样本都被抛弃了,没有得到有效利用
似然加权 Likelihood Weight¶
在拒绝采样中,会抛弃很多不符合证据的样本;而似然加权对于包含证据的节点,不按照概率去生成,而是直接固定,概率用来调整样本的权重
比如计算P(+s,+w),一开始权重为1
抽取C和R节点的过程和之前相同,假设抽取到了+c +r
在S节点,不按照P(S|+c)去生成样本,而是直接固定为证据+s,权重乘以P(+s|+c) = 0.1
在W节点,直接固定+w,然后权重乘以P(+w|+s,+r) = 0.99
最后该样本的权重为0.099
推理概率的时候,按照加权的频率计算
伪代码:
def LikelihoodWeight():
weight = 1
for i in (1,2,...,n):
if X_i is an evidence variable:
x_i = evidence x_i for X_i
weight *= P(x_i | Parents(X_i))
else:
sample x_i from P(X_i | Parents(X_i))
return (x_1,x_2,...,x_n),weight
当证据概率极低,而且还在BN的下游时,似然加权就没有很有效了
比如 Fire -> Alarm,推理概率P(+a)
按照现实情况设定概率,+f概率很低,警报也非常准确
那么首先对F节点,绝大多数样本都抽取到-f,然后固定+a,但是权重P(+a|-f)也将非常小
极少数+f样本,才有较大的权重
Gibbs Sampling¶
- 先固定所有证据,其他变量随机赋值
- 然后进行迭代:每一次选择一个变量,重新赋值,赋值的概率依据是 \(P(X_i \mid \text{其余全部确定的变量} )\)
- 大量重复这个过程,得到一条样本链
最后进行概率推理:丢弃开头的一部分样本(烧入期,让链稳定),然后每隔几步取一个样本(减少相关性),这些样本就近似服从目标概率
如何得到概率 \(P(X_i \mid \text{其余全部确定的变量} )\)
根据BN的特性进行计算,与\(X_i\)无关的项都会抵消掉
比如在上图中:
\[
\begin{aligned}
P(S|+c,+r,-w) & =\frac{P(S,+c,+r,-w)}{P(+c,+r,-w)} \\
& =\frac{P(S,+c,+r,-w)}{\sum_{s}P(s,+c,+r,-w)} \\
& =\frac{P(+c)P(S|+c)P(+r|+c)P(-w|S,+r)}{\sum_{s}P(+c)P(s|+c)P(+r|+c)P(-w|s,+r)} \\
& =\frac{P(S|+c)P(-w|S,+r)}{\sum_{s}P(s|+c)P(-w|s,+r)}
\end{aligned}
\]
相关性
样本链中相邻的样本高度相似,具有相关性