目录
贝叶斯网络中的精确推理
通过枚举进行推理
变量消元算法
精确推理的复杂度
团算法
贝叶斯网络中的近似推理
直接采样算法
Markov链仿真推理
通过枚举进行推理
P
(
B
∣
j
,
m
)
=
P
(
B
,
j
,
m
)
/
P
(
j
,
m
)
=
a
∗
P
(
B
,
j
,
m
)
=
a
∑
e
∑
a
P
(
B
,
e
,
a
,
j
,
m
)
P(B | j,m)\\ = P(B, j, m) / P(j,m) \\ = a*P(B, j, m)\\ = a\sum_e \sum_a P(B, e,a,j,m)
P(B∣j,m)=P(B,j,m)/P(j,m)=a∗P(B,j,m)=a∑e∑aP(B,e,a,j,m) (通过枚举隐变量来计算)
下面用链式规则计算 P ( B ∣ j , m ) P(B|j,m) P(B∣j,m)
若使用全联合概率分布:
使用链式法则计算,转化为使用父节点表示模式,然后在CPT图找到相应值。
枚举算法伪代码:
枚举算法十分低效,其中有很多重复的计算,即
P
(
j
∣
a
)
P
(
m
∣
a
)
P(j|a) P(m|a)
P(j∣a)P(m∣a)等都计算了两次。
精确推理的复杂度:在最坏的情况下,具有指数级时间空间复杂度
团算法,(类似记忆化搜索,联合搜索:个人推测)通过团算法,可以将一个复杂度为
O
(
n
2
)
O(n^2)
O(n2)的算法降到
O
(
n
)
O(n)
O(n)。
变量消元算法
按照从右到左的次序,把计算的中间结果保存下来,对每个变量的求和只需要查表就行了
贝叶斯网络的近似推理
由于精确推理时间空间复杂度太高,对大规模多联通网络是不可操作的,(NP)。
近似推理基本思想:
1、从分布S中进行N个样本的采样;
2、计算一个逼近的后验概率;
3、证明这个后验概率收敛到真实概率P。
近似推理方法
直接采样方法
根据已知概率分布生成样本,根据已知父节点得到赋值
直接采样,按照拓扑顺序依次对变量进行采样,采样时每个点取正负是由该点的概率分布决定的,即某个点取正的次数和负的次数比值需要符合一定的概率分布。
对与下列分布,先取Cloudy为真:
取完后看Cloudy的子节点中,C为T的概率分布,即S和R的第一行
这个时候取S为F,
P
(
S
=
f
)
=
0.90
P(S = f) = 0.90
P(S=f)=0.90, 取R为T,
P
(
R
=
t
)
=
0.80
P(R = t) = 0.80
P(R=t)=0.80
由于现在S = F且 R = T,所以直接看W的
<
F
,
T
>
<F,T>
<F,T>一栏
- 直接采样法生成的样本服从网络所指定的先验联合概率分布
- 令
S
p
s
(
x
1
,
.
.
.
,
X
n
)
Sps(x_1, ..., X_n)
Sps(x1,...,Xn)为先验采样生成的特定事件的概率由采样过程得到:
所得到的该真实事件的概率:
S
p
s
(
t
,
f
,
t
,
t
)
=
0.5
∗
0.9
∗
0.8
∗
0.9
=
0.324
=
P
(
t
,
f
,
t
,
t
)
S_{ps}(t,f,t,t) = 0.5*0.9*0.8*0.9 = 0.324 = P(t,f,t,t)
Sps(t,f,t,t)=0.5∗0.9∗0.8∗0.9=0.324=P(t,f,t,t)
当N的大量样本极限下,我们期望有32.4%的样本是这个事件
在任何采样方法中,都是通过对实际生成的样本数来计算的,其实就是求出生成的样本的分布,然后证明这些概率收敛到真实概率,利用取样概率去近似真实概率:
- 估计概率在大量样本极限下成为精确值,这样的估计被称为一致估计
- 例如:可以为不完全指定事件
x
1
,
.
.
.
,
x
m
x_1, ... ,x_m
x1,...,xm的概率产生一个一致估计,其中
m
≤
n
m \leq n
m≤n, 即:
P ( x 1 , . . . , x m ) ≈ N p s ( x 1 , . . . , x m ) / N P(x_1, ... ,x_m) \approx N_{ps}(x_1, ..., x_m) / N P(x1,...,xm)≈Nps(x1,...,xm)/N
Rejection sampling(拒绝采样)
由一个易于采样的分布出发,为一个难以直接采样的分布产生采样样本的通用算法,在其最简单的形式中,它可以用于计算条件概率,也就是确定 P ( X ∣ e ) P(X|e) P(X∣e)
计算步骤:
- 1、根据网络指定的先验概率分布生成采样样本;
- 2、拒绝所有与证据不匹配的样本;
- 3、在剩余样本中对事件 X = x X = x X=x的出现频繁程度计数从而得到估计概率。
算法伪代码:
for j = 1 to N do:
x = PRIOR-SAMPLE(bn) //先验信息采样(直接采样)
if x is consistent with e then
N[x] = N[x]+ 1 where x is the value of X in x
return NORMALIZE(N)
拒绝采样的缺点是它拒绝了太多的样本。
似然加权
只生成与证据e一致的事件,避免了拒绝采样的低效率
这个算法固定了证据变量的值,只对非证据变量采样,保证了生成的每个事件都与证据一致。
马尔科夫链蒙特卡洛(MCMC)
MCMC和之前的采样法不一样,他是在状态空间中,随机游走,每次修改一个变量的值,但保持证据变量的值固定不变。
算法流程:
- 总是通过前一事件进行随机改变而生成每个事件样本;
- 为每个变量指定了一个特定的当前状态,下一个状态是通过改变非证据变量 X i X_i Xi进行采样产生,其取决于 X i X_i Xi的马尔科夫覆盖中的变量的当前值;
- 在状态空间中随机游走,保持证据变量的值固定不变。
MCMC采样最终会进入一种动态平衡,即每个状态上消耗的时间与其后验概率成正比。