从朴素贝叶斯分类器到贝叶斯网络(下)

书接上文 :从朴素贝叶斯分类器到贝叶斯网络(上) 算法


3、贝叶斯网络网络


贝叶斯网络(Bayesian Network)是一种用于表示变量间依赖关系的数据结构。有时它又被称为信念网络(Belief Network)或几率网络(Probability Network)。在统计学习领域。几率图模型(PGM,Probabilistic Graphical Models)常用来指代包括贝叶斯网络在内的更加宽泛的一类机器学习模型。好比隐马尔可夫模型(HMM,Hidden Markov Model)也是一种PGM。数据结构


详细而言,贝叶斯网络是一个有向无环图(Directed Acyclic Graph),当中每个节点都标注了定量的几率信息,并具备例如如下结构特色:机器学习

(1)一个随机变量集构成了图结构中的节点集合。变量可以是离散的,也可以是连续的。ide

(2)一个链接节点对的有向边集合反映了变量间的依赖关系。函数

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

(3)每个节点Xi都有一个(在给定父节点状况下的)条件几率分布,这个分布量化了父节点对其之影响。学习


在一个正确构造的网络中,箭头显式地表示了X对Y的直接影响。spa

而这样的影响关系每每来自于现实世界的经验分析。.net

一旦设计好贝叶斯网络的拓扑结构,仅仅要再为每个节点指定当给定详细父节点时的条件几率,那么一个主要的几率图模型就创建完毕了。虽然现实中贝叶斯网络的结构可能很复杂。但无论多么复杂的拓扑本质上都是由一些主要的结构单元通过必定之组合演绎出来的。

而且终于的拓扑和相应的条件几率全然可以给出所有变量的联合分布。这样的表现方式远比列出所有的联合几率分布要精简得多。图1给出了三种主要的结构单元,如下咱们将分别对它们进行介绍。


图1  三种主要的结构单元


首先,假设几个随机变量之间是全然独立的。那么它们之间将没有不论什么的边进行链接。

而对于朴素贝叶斯中的假设,即变量之间是条件独立(Conditionally Independent)的,那么可以画出此种结构如图1中的左图所看到的。

这代表在给定Y的状况下,X和Z是条件独立的。

其次,第二种与之相反的状况如图1中的中图所看到的。此时X和Z是全然独立的。

咱们一般把左图的状况称为“Common Cause”,而把中图的状况称为“Common Effect”。

最后,对于图1中右图所看到的的链式结构,X和Z再也不是相互独立的。但在给定Y时,X和Z就是独立的。因为P(Z|X,Y)=P(Z|Y)。


文献[1]中给出了一个简单的贝叶斯网络演示样例。如图2所看到的。假设你在家里安装了一个防盗报警器。

这个报警器对于探測盗贼的闯入很可靠,但是偶尔也会对轻微的地震有所反应。你还有两个邻居John和Mary。他们保证在你工做时假设听到警报声就给你打电话。John听到警报声时老是会给你打电话,但是他们有时候会把电话铃声当成警报声,而后也会打电话给你。另外一方面,Mary特别喜欢大声听音乐,所以有时候根本听不见警报声。给定了他们是否给你打电话的证据,咱们但愿预计假设有人入室行窃的几率。

图2  贝叶斯网络演示样例

现在临时忽略图中的条件几率分布,而是将注意力集中于网络的拓扑结构上。

在这个防盗网络的案例中。拓扑结构代表盗贼和地震直接影响到警报的几率(这至关于一个Common Effect的结构),但是John或者Mary是否打电话仅仅取决于警报声(这至关于一个Common Cause的结构)。所以网络表示出了咱们的一些假设:“John和Mary不直接感知盗贼,也不会注意到轻微的地震”(这代表当给定随机变量Alarm时,“盗贼或地震”都独立于“打电话”),而且他们不会在打电话以前交换意见(因此在给定随机变量Alarm时,John打电话和Mary打电话就是条件独立的)。


注意网络中没有相应于Mary当前正在大声听音乐或者电话铃声响起来使得John误觉得是警报的节点。这些因素实际上已经被归纳在与从Alarm到JohnCalls或者到MaryCalls这两条边相关联的不肯定性中了。

这同一时候体现了操做中的惰性与无知:要搞清楚为何那些因素会以或多或少的可能性出现在不论什么特殊状况下,需要大量的工做,而且无论怎样咱们都没有合理的途径来获取相关信息。上面的几率实际上归纳了各类状况的潜在无限集合,当中包括报警器可能会失效的状况(诸如环境湿度太高、电力故障、电线被切断、警铃里卡了一仅仅死老鼠等等)或者John和Mary没有打电话报告的状况(诸如出去吃午餐了、外出度假、临时性失聪、直升机刚巧飞过而噪声隆隆等)。如此一来,一个小小的智能体可以处理很庞大的世界。至少是近似地处理。假设咱们可以引入附加的相关信息,近似的程度还可以进一步地提升。


现在回到图中的条件几率分布上。

每个分布都被显示为一个条件几率表(CPT, Conditional Probability Table)。这样的形式的表格适用于离散型随机变量。本文也仅讨论这样的类型的表示方法。

CPT中的每一行包括了每个节点值在给定条件下的条件几率。这个所谓的“给定条件”就是所有父节点取值的某个可能组合。每一行几率加起来和必需是1,因为行中条目表示了该相应变量的一个无遗漏的状况集合。

对于布尔变量,一旦知道它为真的几率是p,那么它为假的几率就应该是1-p。

因此可以省略第二个数值。一般,一个具备k个布尔父节点的布尔变量的CPT中有2^k个独立的可指定几率。

而对于没有父节点的节点而言,它的CPT仅仅有一行,表示了该变量可能取值的先验几率(好比图中的Burglary和Earthquake相应的CPT)。


4、模型推理


当咱们已经肯定了一个贝叶斯网络的结构时。怎样利用它进行推理将成为焦点。好比现在咱们想知道当John和Mary都打电话时发生地震的几率。

即 P(E = T | J = T, M = T) = ?


总的来讲,一般可採用的方法有三种:1)首先是利用与朴素贝叶斯类似方法来进行推理(当中相同用到贝叶斯公式),咱们称其为枚举法;2)其次是一种更为常用的算法。咱们称之为消去法;3)最后另外一种基于蒙特卡洛法的近似推理方法,本文将仅讨论前两种算法。


4.1  枚举法


为了详细地说明原委。咱们仍是从一个简单的几率论知识点開始。众所周知。由n个随机变量X1, X2, ..., Xn构成的向量

X = (X1, X2, ..., Xn) 称为n维随机向量(或称n维随机变量)。首先咱们以二维随机向量(X,Y)为例来讲明边缘分布的概念。随机向量(X,Y)的分布函数F(x,y)全然决定了其份量的几率特征。

因此由F(x,y)便能得出份量X的分布函数FX(x),以及份量Y的分布函数FY(y)。而相对于联合分布F(x,y),份量的分布FX(x)FY(y)称为边缘分布。由

FX(x) = P{X x} = P{X ≤ x, Y+∞} = F(x, +)

FY(y) = P{Y y} = P{X +∞,Y y} = F(+∞, y)

可得

FX(x) = F(x, +),  FY(y) = F(+∞, y)

(X,Y)为二维离散随机变量,则


(X,Y)为二维连续随机变量,设密度函数为p(x,y),则


回忆在朴素贝叶斯中所使用的策略。咱们依据已经观察到的证据计算查询命题的后验几率。并将使用全联合几率分布做为“知识库”,从中可以获得所有问题的答案。这当中贝叶斯公式发挥了重要做用,而如下的演示样例相同演示了边缘分布的做用。

从一个很简单的样例開始:一个由3个布尔变量Toothache、Cavity以及Catch (因为牙医的钢探针不洁而致使的牙龈感染)组成的定义域。其全联合分布是一个2 × 2 × 2 的表格,例如如下表所看到的。




依据几率公理的要求。联合分布中的所有几率之和为1 。

不论是简单命题仍是复合命题,咱们仅仅需要肯定在当中命题为真的那些原子事件。而后把它们的几率加起来就可得到不论什么命题的几率。好比,命题Cavity ∨ Toothache在 6 个原子事件中成立,因此可得

P(Cavity ∨ Toothache) = 0.108 + 0.012 + 0.072 + 0.008 + 0.165 + 0.064 = 0.28

一个特别常见的任务是将随机变量的某个子集或者某单个变量的分布抽取出来。也就是咱们前面提到的边缘分布。

好比,将所有Cavity取值为真的条目抽取出来在求和就获得了Cavity的无条件几率(也就是边缘几率)

P(Cavity) = 0.108 + 0.012 + 0.072 + 0.008 = 0.2

该过程称为边缘化(Marginalisation),或者称为“和出”(Summing Out)——因为除了Cavity之外的变量都被求和过程排除在外了。

对于不论什么两个变量集合Y和Z,可以写出例如如下的通用边缘化规则(这其实就是前面给出的公式,咱们仅仅是作了简单的变量替换)

也就是说。Y的分布可以经过依据不论什么包括Y的联合几率分布对所有其余变量进行求和消元获得。依据乘法规则,这条规则的一个变形涉及条件几率而不是联合几率:

这条规则称为条件化。之后会发现。对于涉及几率表达式的所有种类的推导过程,边缘 化和条件化具备很强大的威力。


在大部分状况下。在给定关于某些其余变量的条件下,咱们会对计算某些变量的条件几率产生感兴趣。

条件几率可以如此找到:首先依据条件几率的定义式获得一个无条件几率的表达式,而后再依据全联合分布对表达式求值。

好比。在给定牙疼的条件下。可以计算蛀牙的几率为

P(Cavity | Toothache) = P(Cavity ∧ Toothache) / P(Toothache)

=( 0.108 +0.012) / (0.108 + 0.012 + 0.016 + 0.064) = 0.6

为了验算。还可以计算已知牙疼的条件下。没有蛀牙的几率为

P(┐Cavity | Toothache) = P(Cavity ∧ Toothache) / P(Toothache)

=( 0.016 +0.064) / (0.108 + 0.012 + 0.016 + 0.064) = 0.4

注意这两次计算中的项 1/P(Toothache) 是保持不变的,与咱们计算的Cavity的值无关。其实,可以把它当作是P(Cavity I Toothache)  的一个归一化常数,保证其所包括的几率相加等于1,也就是忽略P(Toothache) 的值,这一点咱们在朴素贝叶斯部分已经讲过。


此外,咱们将用α来表示这样的常数。用这个符号咱们可以把前面的两个公式合并写成一个:

P(Cavity | Toothache) =α P(Cavity, Toothache)

=α [P(Cavity, Toothache, Catch) + P(Cavity, Toothache, Catch)]

[〈0.108, 0.016〉+〈0.012, 0.064〉] = α〈0.12, 0.08〉=〈0.6, 0.4〉

在许多几率的计算中,归一化都是一个很实用的捷径。


从这个例于里可以抽取出一个通用推理过程。

咱们将仅仅考虑查询仅涉及一个变量的状况。咱们将需要使用一些符号表示:令X 为查询变量(前面样例中的Cavity);令E 为证据变量集合(也就是给定的条件,即前面样例中的Toothache )。 e 表示其观察值;并令 Y 为其他的未观測变量(就是前面例于中的Catch) 。查询为P(X I e)。可以对它求值:


当中的求和针对所有可能的y (也就是对未观測变量Y的值的所有可能组合)。注意变量 X, E 以及Y一块儿构成了域中所有布变量的完整集合。因此P(X, e, y)仅仅只是是来自全联合分布几率的一个子集。算法对所有X和Y的值进行循环以枚举当 e 固定时所有的原子事件。而后依据全联合分布的几率表将它们的几率加起来,最后对结果进行归一化。


如下咱们就用枚举法来解决本节開始时抛出的问题: P(E = T | J = T, M = T) = ?


P(E|j,m) = α P(E, j, m)

当中。咱们用小写字母 j 和 m 来表示 J = T。以及M = T(也就是给定J和M)。

但表达式的形式是P(E|j,m)而非P(e|j,m),这是因为咱们要将E = T 和 E = F这两个公式合并起来写成一个。

相同,α 是标准化常数。而后就要针对其余未观測变量(也就是本题中的Burglary和Alarm)的值的所有可能组合进行求和,则有

依据图2中所看到的之贝叶斯网络。应该很easy可以写出下列关系式。


假设你没法轻易地看出这样的关系,也可以经过公式推导一步一步的得出。首先。在给定条件a的状况下。J和M条件独立。因此有P(j,m|a) = P(j|a)P(m|a)。B和E独立。因此有P(b)P(E)=P(b,E)。进而有P(b)P(E)P(a|b,E)=P(a,b,E)。

在给定a的时候。b、E和jm独立(相应图1中的第3种状况),因此有P(j,m|a) = P(j,m|a,b,E)。由这几个关系式就能得出上述结论。

如下咱们来循环枚举并加和消元。

在计算上还可以略微作一点改进。

因为P(E)对于ΣaΣb来讲是一个常数,因此可以把它提出来。这样就避免了屡次乘以P(E)所形成的低效。


上式中所有的值都可以基于CPT求得。算术固然是很繁杂的,咱们这里不详细给出终于的结果。但一个显而易见的事实是当变量的数目变多时,全联合分布的表长增加是至关惊人的!因此咱们很但愿可以有一种更轻巧的办法来替代这样的枚举法,因而便有了如下将要介绍的消去法。


4.2  消去法


变量消去算法(Variable Elimination Algorithm)是一种基于动态规划思想设计的算法。

而且在算法运行的过程当中需要使用因子表来储存中间结果,当再次需要使用时无需又一次计算而仅仅需调用已知结果,这样就减小了算法运行的时间消耗。


Each factor is a matrix indexed by the values of its argument variable. 好比。与P(j|a)和P(m|a)相相应的因子fJ(A)和fM(A)仅仅依赖于A。因为J和M在咱们的问题里是已知的,所以fJ(A)和fM(A)都是两个元素的矩阵(也是向量)


在这样的记法中括号中的參数表示的是变量,而下标仅仅是一种记号。因此你也可以使用f4(A)和f5(A)来取代fJ(A)和fM(A)。但咱们这里使用J和M来做为下标的意图是考虑用P( _ | A)的 _ 来做为标记。因此P(a|b,E)可以写成fA(A, B, E)。注意因为A,B,  E都是未知的。因此fA(A, B, E) 就是一个2×2×2的矩阵。即

最初的因子表是经CPT改造而来的,例如如下图所看到的。



而后进行自底向上的计算,Step1: fJ(A)×fM(A) = fJM(A),A仍然是变量,则有


此时新产生的因子表为


Step2: fA(A, B, E)×fJM(A) = fAJM(A, B, E),即

此时新产生的因子表为



Step3: 


此时新产生的因子表为

Step4:

此时新产生的因子表为



Step5:


此时新产生的因子表为


Step6:


此时新产生的因子表为



由此即可依据上表算得问题之答案


P(E=T | j,m) = P(E=T | j,m) / [P(E=T | j,m) + P(E=F | j,m)]  = 0.0037/(0.0037 + 0.0069) = 0.3491


最后总结一下消去算法的运行步骤:




參考文献

[1] Stuart Russell and Peter Norvig. Artificial Intelligence: A Modern Approach.[2] Some examples from: Kevin B. Korb and Ann E. Nicholson. Bayesian Artificial Intelligence[3] Some slides derived from The University of Melbourne Statistical Machine Learning (COMP90051)

相关文章
相关标签/搜索