如何在贝叶斯网络中求解某变量的边缘分布?

这是一个问题。


贝叶斯网络如下:

CPTs如下:

(1) How to compute p( L | C = high )?


p( L | C = high )

= p(L, C=high) / p(C=high)   // Bayesian Theorem.

= Joint dist / p(C=high)  // 但是这里需要的却是joint dist!

求 Joint dist,便想到 变量消减,如下:

p( L, C)

= Σ ... Σ p(H) * p(L) * p(A) * p(V|H,L) * p(S|H,L) * p(C|V) * p(O|V,S) * p(B|O,T) * p(T|A)  // 积分掉与L,C没任何关系的部分,加和=1

= ΣH ΣV p(H) * p(L) * p(V|H,L) * p(C|V)   // 可见,结果只保留了与L,C有关的部分;因为H,V与L,C有牵扯,所以没法加和消减掉变量

= p(L) ΣV p(C|V) ΣH p(H) * p(V|H,L)

注意:消元的顺序不能胡来:

比如p(O|V,S)是可以最终消掉的,但O还作为了p(B|O,T)的条件部分,所以,

  • 先消掉p(B|O,T)  (如果B此时能消,也即是不在其他地方充当条件)
  • 然后才能消O。

之后就是穷举V, H的过程。

先处理这一个部分:

ΣH p(H) * p(V|H,L)   // 可见,除了H,剩余的两个变量(V,L)需要穷举所有离散情况,以便消减掉H

1. ΣH p(H) * p(V=low |H,L=true )

2. ΣH p(H) * p(V=high|H,L=true ) = 1 - ΣH p(H) * p(V=low|H,L=true )   // 求出1,即自动得出2

3. ΣH p(H) * p(V=low |H,L=false)

4. ΣH p(H) * p(V=high|H,L=false) = 1 - ΣH p(H) * p(V=low|H,L=false)   // 求出3,即自动得出4

计算过程:

1. ΣH p(H) * p(V=low |H,L=true ) 等价于 p(V=low |L=true )

= p(H=true) * p(V=low|H=true,L=true) + p(H=false) * p(V=low |H=false,L=true)   // 变为了可查表的形式

= 0.2 * 0.95 + 0.8 * 0.01

= 0.198

2. ΣH p(H) * p(V=high|H,L=true ) 等价于 p(V=high|L=true )

= 1 - ΣH p(H) * p(V=low|H,L=true )

= 1 - 0.198

= 0.802

3. ΣH p(H) * p(V=low |H,L=false) 等价于 p(V=low |L=false)

= p(H=true) * p(V=low|H=true,L=false) + p(H=false) * p(V=low |H=false,L=false)   // 变为了可查表的形式

= 0.2 * 0.98 + 0.8 * 0.05

= 0.236

4. ΣH p(H) * p(V=high|H,L=false) 等价于 p(V=high|L=false)

= 1 - ΣH p(H) * p(V=low|H,L=false)

= 1 - 0.236

= 0.764

再处理剩下的部分:

p(L) * Σv p(C|V) * p(V|L)   // 可见,除了V,剩余的两个变量(C,L)需要穷举所有离散情况,以便消减掉V

1. p(L=true ) * Σv p(C=high|V) * p(V|L=true ) 

2. p(L=false) * Σv p(C=high|V) * p(V|L=false)  // 注意,Σv外有p(L),故不能直接采用补集的方法计算

计算过程:

1. p(L=true ) * Σv p(C=high|V) * p(V|L=true ) 等价于 p(L=true, C=high)

= p(L=true ) * p(C=high|V=low ) * p(V=low |L=true) + p(L=true ) * p(C=high|V=high) * p(V=high|L=true ) 

= 0.05 * 0.01 * 0.198 + 0.05 * 0.7 * 0.802

= 0.028169

2. p(L=false) * Σv p(C=high|V) * p(V|L=false) 等价于 p(L=false, C=high)

= p(L=false) * p(C=high|V=low ) * p(V=low |L=false) + p(L=false) * p(C=high|V=high) * p(V=high|L=false) 

= 0.95 * 0.01 * 0.236 + 0.95 * 0.7 * 0.764

= 0.510302

Result:

p( L | C = high )

= p(L, C=high) / { p(C=high) }  // Bayesian Theorem.

= p(L, C=high) / { p(L=true, C=high) + p(L=false, C=high) }

= p(L, C=high) / { 0.028169 + 0.510302 }

可见,结果就是Bernoulli distribution with probability with theta = 0.028169/(0.028169 + 0.510302)=0.052312938

(2) Then, compute p( L | C = high ) using the Junction Tree Algorithm. 


1. Moralisation

2. Triangulation

得到clique:{A, T}, {O,T,B}, {V, S,O}, {V, C}, {V, H, L, S}

3. Construction of the junction tree

4. Assignment of potentials

ψ(CV)   = P(C|V)
ψ(VSO) = P(O|V,S)
ψ(VHLS) = P(V|H,L)P(S|H,L)P(H)P(L)
ψ(OTB) = P(B|O,T)
ψ(TA) = P(T|A)P(A)
Φ(V) = Φ(VS) = Φ(O) = Φ(T) = 1

根据以下算法更新evidence:

  

  From left to right: 

Φ(V) = 1

Φ*(V) = Σc ψ(CV) = Σc P(C|V) = P(C = high|V)

From right to left: 

Φ(T) = 1

Φ*(T) = Σa ψ(TA) = Σa P(T|A)P(A) = P*(T)

ψ(OTB) = P(B|O,T)

ψ*(OTB) = ψ(OTB) x Φ*(T)/Φ(T) = ψ(OTB)

Φ(O) = 1

Φ*(O) = Σtb ψ(OTB) = Σtb P(B|O,T) = 1

ψ(VSO) = P(O|V,S)

ψ*(VSO) = ψ(VSO) x Φ*(O)/Φ(O) = ψ(VSO)

Φ(VS) = 1

Φ*(VS) = Σo ψ(VSO) = Σo P(O|V,S) = 1

更新 { V H L S }:

ψ*(VHLS)

= ψ(VHLS) x { Φ*(V) x Φ*(VS) } / { Φ(V) x Φ(VS) }

= P(V|H,L) * P(S|H,L) * P(H) * P(L) * { P(C = high|V) * 1 } / { 1 * 1 }

= P(V|H,L) * P(S|H,L) * P(H) * P(L) * P(C = high|V) 

注意:我们当下已获得了置信传播的一个结果,就是 ψ*(VHLS),消息从左右两边都传递到了这里。

接下来,我们会如何用这个结果呢?这个结果又能给我们带来怎样的好处呢?

以下用于下一步的类比参考。

(1)用置信传播结果表示边缘条件概率

(2)头上加了小弯弯表示是已知变量,就是条件部分的变量。

照猫画虎就是如下:

p(L|C=high)

= p(L,C=high) / p(C=high)  // Bayesian Theorem.

注意这里,分子分母的计算与传统方法比较时开始发生变化的地方,要体会。

已知:ψ*(VHLS)

分子:ΣVHS ψ*(VHLS)

分母:ΣVHSL ψ*(VHLS)

分母:(L这种情况下消不掉)

P(V|H,L) * P(S|H,L) * P(H) * P(L) * P(C = high|V) 

变为:ΣVHL{ P(V|H,L) * P(H) * P(L) * P(C = high|V) }

分子:

P(V|H,L) * P(S|H,L) * P(H) * P(L) * P(C = high|V) 

变为:ΣVH{ P(V|H,L) * P(H) * P(L) * P(C = high|V) }

可见,还是变为了穷举V,H的结果,最终也得到了方案(1)相同的结论。

后记:

这个例子可能不太完美,建议自己做一次P(O|H=true, L=true, A=true)。过程当中尤其体会对变量A的处理。

因为A是条件中的变量,所以在方法一中不能消去,这导致了计算资源的浪费;

在方法二中,就没有这个问题。好运。

[PGM] Exact Inference for calculating marginal distribution的更多相关文章

  1. [Bayesian] “我是bayesian我怕谁”系列 - Exact Inference

    要整理这部分内容,一开始我是拒绝的.欣赏贝叶斯的人本就不多,这部分过后恐怕就要成为“从入门到放弃”系列. 但,这部分是基础,不管是Professor Daphne Koller,还是统计学习经典,都有 ...

  2. Exact Inference in Graphical Models

    独立(Independence) 统计独立(Statistical Independence) 两个随机变量X,Y统计独立的条件是当且仅当其联合概率分布等于边际概率分布之积: \[ X \perp Y ...

  3. 【概率论】3-5:边缘分布(Marginal Distribution)

    title: [概率论]3-5:边缘分布(Marginal Distribution) categories: Mathematic Probability keywords: Marginal p. ...

  4. 机器学习 —— 概率图模型(Homework: Exact Inference)

    在前三周的作业中,我构造了概率图模型并调用第三方的求解器对器进行了求解,最终获得了每个随机变量的分布(有向图),最大后验分布(双向图).本周作业的主要内容就是自行编写概率图模型的求解器.实际上,从根本 ...

  5. [Bayesian] “我是bayesian我怕谁”系列 - Exact Inferences

    要整理这部分内容,一开始我是拒绝的.欣赏贝叶斯的人本就不多,这部分过后恐怕就要成为“从入门到放弃”系列. 但,这部分是基础,不管是Professor Daphne Koller,还是统计学习经典,都有 ...

  6. 本人AI知识体系导航 - AI menu

    Relevant Readable Links Name Interesting topic Comment Edwin Chen 非参贝叶斯   徐亦达老板 Dirichlet Process 学习 ...

  7. 机器学习&数据挖掘笔记_20(PGM练习四:图模型的精确推理)

    前言: 这次实验完成的是图模型的精确推理.exact inference分为2种,求边缘概率和求MAP,分别对应sum-product和max-sum算法.这次实验涉及到的知识点很多,不仅需要熟悉图模 ...

  8. PGM:概率图模型Graphical Model

    http://blog.csdn.net/pipisorry/article/details/51461878 概率图模型Graphical Models简介 完全通过代数计算来对更加复杂的模型进行建 ...

  9. 概率图模型(PGM)综述-by MIT 林达华博士

    声明:本文转载自http://www.sigvc.org/bbs/thread-728-1-1.html,个人感觉是很好的PGM理论综述,高屋建瓴的总结了PGM的主要分支和发展趋势,特收藏于此. “概 ...

随机推荐

  1. 安装gcc提示no acceptable C compiler found in $PATH

    安装gcc提示no acceptable C compiler found in $PATH 从所报错可以看出是缺少了c编译器,因为gcc就是c编译器,所以没有安装gcc就没有c编译器. 之所以报这样 ...

  2. linux开机启动smb服务

    修改/etc/rc.local文件(增加红色部分) [root@localhost ~]# cat /etc/rc.local #!/bin/sh## This script will be exec ...

  3. ECMAScript 6 中的快捷语法汇总及代码示例

    对于每个 JavaScript 开发人员,快捷语法都是必备技能之一,下面就集中介绍这些快捷语法. 三元运算符 传统写法 const x = 20; let answer; if (x > 10) ...

  4. 5.VBS的一些约定,提高可读性

    1.变量命名约定 2.变量作用域 1)过程级,在事件中,函数或者子过程中 2)Script级,在head部分 原则,定义尽量小的作用域 3.在某个过程开头应该包括这些注释

  5. Gitlab维护记录

    目前互联网公司主流的代码仓库统是gitlab,类似github的实现,维护gitlab已经有两年多的时间, 下面说一下维护过程中的注意点,以及如何维护更好. 分别是搭建,首先得搭建起来,不然怎么玩,其 ...

  6. KBEngine简单RPG-Demo源码解析(1)

    一:环境搭建1. 确保已经下载过KBEngine服务端引擎,如果没有下载请先下载          下载服务端源码(KBEngine):              https://github.com ...

  7. JavaScript 原型与继承机制详解

    引言 初识 JavaScript 对象的时候,我以为 JS 是没有继承这种说法的,虽说 JS 是一门面向对象语言,可是面向对象的一些特性在 JS 中并不存在(比如多态,不过严格来说也没有继承).这就困 ...

  8. Spring Data JPA 复杂/多条件组合查询

    1: 编写DAO类或接口  dao类/接口 需继承 public interface JpaSpecificationExecutor<T> 接口: 如果需要分页,还可继承 public ...

  9. IE事件处理

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  10. 如何生成Azure SAS Token

    在Azure PaaS服务密钥的安全性文章中,提到过客户端实际上发送的是Token,而不是密钥.那么Token是该如何生成呢? Azure相应服务的SDK其实都提供了或者内置了生成Token的方法,可 ...