贝叶斯网络(DAG及簇树)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

贝叶斯网络(Ⅰ)
本章正式介绍不确定推理的贝叶斯网络,也叫概率网络或者信度网络。

在很多应用领域中贝叶斯网络都是一个强大的工具。

1 贝叶斯网络的定义
1.1贝叶斯网络的定义
贝叶斯网络是由网络节点和连接网络节点的带方向的边构成的有向无环图,或者说是一种数据结构。

网络中的每个节点都表示一个变量,并且每个变量对应一个条件概率表,整个贝叶斯网络和其中的变量的条件概率表将变量的联合概率分布进行分解表示。

所以贝叶斯网络用于表示变量之间的依赖关系,并为联合概率分布提供了一种简明的规范。

其详细描述如下:
1)其所有网络节点构成一个随机变量集。

变量可以是离散的或连续的。

2)其连接网络节点的是有向边或箭头。

如果存在从节点X指向Y的有向边,则称X是Y 的一个父节点。

3)其每个节点V i都有一个条件概率分布P(V i|Parents(V i)),量化其父节点对该节点的影响,就是给出在父节点的条件下当前节点各种状态的出现概率。

4)图中不存在有向环,因此是一个有向无环图,简写为DAG;
1.2贝叶斯网络的一些例子
例1 汽车诊断的部分贝叶斯网络
图1:对汽车不能启动进行诊断的贝叶斯网络(先验概率)
当任何变量的状态已知时,可将其作为证据输入,并对网络概率进行更新
图2:输入证据汽车启动=false(100%)的贝叶斯网络进行概率更新(后验概率)
图2在已知汽车不能正常工作的情况下,可以看出导致该结果的最大可能原因是火花塞(spark plugs=ok(45%), battery voltage=strong(80%))。

图3输入证据汽车启动=false(100%) 前灯=off(100%)
的网络概率更新(后验概率) 图3是在输入证据汽车启动=false (100%)的基础上一个好的诊断系统可能推荐测试车前灯,如果车前灯不能正常工作,前灯=off (100%)也作为证据输入,并对网络进行更新,battery voltage=none(53%),火花塞电压=ok=62.6,可以推断是电池电压不正常。

例2 Mary 上班迟到
图4: Mary 上班迟到的贝叶斯网络
由以上两个例子可以得知,利用贝叶斯网络进行推理需要了解一下几个方面
1)规则是独立的,且只有条件满足时才执行,但是,一旦执行,就很难取消与新证据冲突的结果;
2)不同的规则之间能够以微妙的方式产生联系。

如在例2中汽车晚点和火车晚点本来相互独立,但是在诊断推理过程中,如果知道Mary上班迟到,那么火车晚点或汽车晚点就会产生联系(收敛连接);当然还有两个事件本来是联系的,在一定的事件出现后变得独立,如牙洞问题(发散连接);以及连续连接等情况。

因此我们应该知道如何利用不同的规则之间在一定情况下的联系
3)在贝叶斯网络中,从不同的方向上进行推理会导致一些微妙的问题,
如:如果汽车晚点,那么Mary上班迟到;如果Mary迟到,那么火车晚点。

在知道汽车晚点会得到Mary迟到,再调用第二条规则得出,火车晚点,这是不符合实际情况的。

因此要考虑贝叶斯网络中的各条规则从不同的方向推理时会产生什么反应。

1.3 贝叶斯网络的语义
上面描述了贝叶斯网络是什么样的,但是没有说明它的含义是什么。

有两种方式理解贝叶斯网络的语义,第一种是将贝叶斯网络视为联合概率分布的表示。

第二种将其视为是对条件依赖性语句集合的编码。

这两种观点是等价的,但是前者能够帮助我们理解如何构造网络,而后者则能够帮助我们设计推理过程。

贝叶斯网络对联合概率分布的表示
联合概率分布中的每个条目都可以通过贝叶斯网络的信息计算出来,也即贝叶斯网络是联合概率分布的分解表示,或者每个贝叶斯网络对应着一个联合概率分布。

如果用P{V1,V2,…,V n}表示变量集合U{V1,V2,…,V n}的联合概率分布,那么根据链式法,考虑了独立性假设,P(U)是所有条件概率的乘积:
P(U)=∏P(V i|双亲(V i)) (1)
在Mary迟到的例子中,如果给出关于Mary迟到贝叶斯网络(图4),利用给定的各个变量的条件概率表,由式(1)我们可以得到其联合概率分布(图5)
P(Mary,公共汽车,火车)=P(Mary|公共汽车,火车)P(公共汽车|火车)P(火车)
图5:Mary上班迟到的贝叶斯网络的联合概率分布
P(bus=late|Mary=late)=0.081/0.15=0.54
P(T rain=late|Bus=late,Mary=late)=0.027/(0.027+0.054)=0.33
7 d分离
在因果网络中有三种连接形式:收敛、发散、连续。

1)收敛连接
当未知C的状态时(C不是一个证据),那么C的双亲是独立的。

但是如果收到C的状态,那么双亲就变成条件依赖了。

称变量A和B是d分离。

例如:
P93关于Mary上班迟到的问题
2)发散连接
当未知C的状态时(C不是一个证据),那么C的后代是依赖的。

但是如果收到C的状态,那么后代就变成条件条件独立了。

称变量A和B是在已知C情况的d分离
3)连续连接
当未知B的状态时(B不是一个证据),A和C是依赖的。

但是如果收到B的状态后,A和C变成条件条件独立了。

称变量A和C是在已知B情况的d分离
通过观察d分离点我们可以找到更加简介的联合分布的表示
例办公室未锁
模型的变量和可能的状态
David-在办公室或外出
办公室-锁或未锁
清洁工-离开办公室时锁或未锁
计算机-开或关
并且:David 和清洁工都是办公室锁打开的原因
David是计算机开或关的原因
然后,将每个变量表示为一个条件概率分布表得到该问题的贝叶斯网络(图6)
图6:办公室未锁问题的贝叶斯网络
根据)|()(i i
V V
P U P 双亲(∏=
其联合概率分布
P(U)=P(Office|David,Cleaner)P(Computer|David)P(David)P(cleaner) 由此可以得到该问题的联合概率分布表(教材P97表5.2)
在贝叶斯网络的基础上得到的关于问题的联合概率分布后,根据该联合概率分布我们可以计算所有与此相关的概率情况,如: P(Bus=late|Mary=late) P(Train=late|Mary=late)
P(office=unlock)
P(computer=on|office=unlock)等等
但是在实际中,产生一个包括所有变量的概率分布表是不现实的(变量过多)。

因此我们需要建立一种新的求解方案。

由于网络能够表达因果关系以及依赖性,可以实现现实世界的管理,因此利用网络我们通过一系列信息传递来实现概率计算。

这里提到的网络是一个树,称为簇树,我们并不定义所有变量的联合概率分布表,而是为每个变量保存一张表,当证据到达时我们把信息传递给树中的其他节点。

信息传递使用某种基本规则计算树中的每个变量的更新概率
2实现贝叶斯网络更新的算法
b a对应的簇树
a 贝叶斯网络
利用贝叶斯网络可以进行精确推理,算法步骤:
(1)将DAG转化为簇树;
(2)为每个簇节点和分离点创建一张表。

表中条目的数目对应于簇的每个成员变量的状态组合数目。

并在表中加入一列来记录表ф(T)的概率分布,该列对于每个条目的值置为1。

ф(T)←1
(3)为每个变量确定一个簇,该簇必须包含该变量V及其父辈节点。

(4)初始化每个簇表;
(5)在簇树中传递消息直到树一致(消息从一个簇传递到另一个簇)。

当消息从簇节点C到达分离点S时,根据下面的公式计算新的分离表:
Ф(S)=∑Ci\Sф(C i)
当从分离点S向簇节点j传递消息时,新簇表的计算方法是,旧簇表乘以分离表除以旧分离表:
Ф(C j)= Ф(C j)(Ф(S)/ Ф(S old))
例1:
1)首先构造相应于贝叶斯网络的簇树,DAG转化为簇树
b ?????
a ?????
图7
簇树由簇节点和分离点构成。

簇节点是由贝叶斯网络中的变量节点构成,对于每个变量至少有一个簇节点包含它及其父辈节点,例如图7中变量B属于簇节点BA,该簇包含节点B及其父辈节点A。

簇节点一旦形成就被放入具有分离点的簇树中,而每个分离点是与其相邻的簇节点所共有的变量。

例如在图7中,A,B,C,D,E为变量,AB,CA,EC,DC都是簇节点,A,C为分离点。

2)然后为每个簇节点和分离点创建一张表。

表中条目的数目对应于簇的每个成员变量的状态组合数目。

并在表中加入一列来记录表ф(T)的概率分布,该列对于每个条目的值置为1。

ф(T)←1
在图7中假设所有变量都有两个状态,那么每个簇节点表有四种状态,每个分离点有两种状态。

为每个变量确定一个簇,该簇必须包含该变量V及其父辈节点。

初始化每个簇表,用ф(T)并乘以:
P(V|Parents(V))
ф(T)←ф(T)P(V|Parents(V))
在图7中,A指派给簇BA,B指派给簇BA, C指派给簇CA,D指派给簇DC,E指派给簇EC。

图7中簇表对于各簇的初始化可以通过:
BA=ф(T)*P(B|A)P(A),
CA=ф(T)*P(C|A),
DC=ф(T)*P(D|C),
EC=ф(T)*P(E|C)
来完成。

3)在簇树中传递消息直到树一致(消息从一个簇传递到另一个簇)。

当消息从簇节点C到达分离点S时,根据下面的公式计算新的分离表:
Ф(S)=∑Ci\Sф(C i)
当从分离点S向簇节点j传递消息时,新簇表的计算方法是,旧簇表乘以分离表除以旧分离表:
Ф(C j)= Ф(C j)(Ф(S)/ Ф(S old))
4)计算联合概率分布函数 例2:
1)将DAG 转换为簇树,如下图
2)为每个簇节点和分离点生成表。

表中条目的数目对应于每个成员变量的状态组合的数目。

每个条目的值置为1。

如下图 簇BA 和CA ,分离点为A
3)把每个变量指派给一个簇,该簇必须包含该变量及其父辈节点 变量B 和A 指派给簇BA; C 指派给CA 初始化每个簇表, P(Vi|父辈(Vi )) BA=P(B|A)P(A)
CA=P(C|A)
4)初始化完成后进行消息传递,可以从任何一个簇开始,将消息传遍簇树中的任何一个簇。

如果消息从簇BA 开始传递,新的分离点表则由边缘化BA 得到
消息再由分离点向新簇节点CA 传递,于是更新CA 的簇节点表:把CA 的表乘以新分离表除以旧分离表(状态值均为1)。

5)计算联合概率分布:用所有簇表的乘积除以所有分离点表的乘积
为了计算BA 和CA 的乘积,我们创建了一张新表,其相应的元素如下图 簇BA 中的a 1b 1和簇CA 中的a 1c 1的乘积表示为a 1b
1*a 1c 1=a 1b 1c 1
a 1
b 1 a 1
c 2 a 1b 1* a 1c 2=a 1b 1c 2
最后这张表除以新分离点:
这张表表示完整的联合分布,任何变量的分布都可以通过边缘化这张表得到。

另外第4)步中如果从簇CA开始
如果从簇CA开始,那么新的分离点表则边缘化CA得到(由于CA,和BA包含同样的分离点信息。

因此边缘化任何一个簇都会得到同样的分离点表。

随后的信息传递不产生任何改变)
然后更新BA:把BA的表乘以新分离点除以旧分离点(状态值均为1)
计算联合概率分布
例3
1)将DAG转换为簇树,如下图
2)为每个簇节点和分离点生成表。

第1个簇节点
旧分离点表
(3)为每个变量确定一个簇,该簇必须包含该变量V及其父辈节点。

初始化每个簇表,P(Vi|父辈(Vi))
Φ(David,Cleaner,Officer)=P(Officer|David,Cleaner)P(Cleaner)
Φ(David,Computer)=P(Computer|David)P(David)
第1个簇节点
第2个簇节点
1) Φ(David,Cleaner,Officer)->Φ(David,Computer)
边缘化Φ(David,Cleaner,Officer)得到分离点Φ(David)
Φ(David=In)=0.01+0.18+0.09+0.72=1.0
Φ(David=Out)=0.001+0.891+0.099+0.009=1.0
分离点表不变,所以Φ(David,Computer)不必更新;
2) Φ(David,Computer) ->Φ(David,Cleaner,Officer)
边缘化Φ(David,Computer)得到分离点Φ(David)
Φ(David=In)=0.04+0.01=0.05
Φ(David=Out)=0.0095+0.9405=0.95
得到新分离表
最后,更新Φ(David,Cleaner,Officer),旧簇表乘以新分离表除以旧分离表:Φ(David,Cleaner,Officer)= Φ(David,Cleaner,Officer)*Φ(David new)/ Φ(David old)
每个变量的概率分布可以通过边缘化与它相关的簇得到:
例如:
P(Officer)=P(Officer=Locked,Officer=UnLocked)=
(0.005,0.0045)+ (0.009,0.036)+ (0.00095,0.09405)+ (0.84645,0.00855)=(0.8569,0.1431) P(Cleaner)=P(Cleaner=UnLocked, Cleaner =Locked)=(0.1,0.9)。

相关文档
最新文档