贝叶斯网络

贝叶斯公式

由乘法法则
P ( A B ) = P ( A ) P ( B ∣ A ) = P ( B ) P ( A ∣ B ) P(AB)=P(A)P(B|A)=P(B)P(A|B) P(AB)=P(A)P(BA)=P(B)P(AB)
可得:
P ( A ∣ B ) = P ( A ) P ( B ∣ A ) P ( B ) P(A|B)=\frac{P(A)P(B|A)}{P(B)} P(AB)=P(B)P(A)P(BA)
进一步地
P ( A i ∣ B ) = P ( B ∣ A i ) P ( A i ) ∑ j P ( B ∣ A j ) P ( A j ) P(A_i|B)=\frac{P(B|A_i)P(A_i)}{\sum_j{P(B|A_{j})P(A_j)}} P(AiB)=jP(BAj)P(Aj)P(BAi)P(Ai)
其中, A 1 , ⋯   , A n A_1,\cdots ,A_n A1,,An是完备事件组,即 ∪ i = 1 n A i = Ω , A i A j = ϕ , P ( A i ) > 0 \cup^{n}_{i=1}A_i=\Omega,A_iA_j=\phi,P(A_i)>0 i=1nAi=Ω,AiAj=ϕ,P(Ai)>0

贝叶斯网络

概念

贝叶斯网络是一种模拟人类推理过程中因果关系的不确定性处理模型,其网络拓扑结构是一个有向无环图。两个节点之间通过有向边连接,表示两个随机变量之间具有因果关系。

定义

假设有向无环图 G = ( I , E ) G=(I,E) G=(I,E) I I I是点集, E E E是有向边集;令
X = X i , i ∈ I X=X_i,i\in{I} X=Xi,iI
表示有向无环图 G G G的某一节点 i i i所代表的随机变量,若随机变量 X X X的联合概率可以表示成:
p ( x ) = ∏ i ∈ I p ( x i ∣ x p a r e n t ( i ) ) p(x)=\prod_{i{\in}I}p(x_i |x_{parent(i)}) p(x)=iIp(xixparent(i))
则称 X X X为相对有向无环图 G G G的贝叶斯网络,其中 X p a r e n t X_{parent} Xparent X X X的“因”,直接对任意的随机变量,其联合概率可由各自的局部条件概率分布相乘得到:
p ( x 1 , ⋯   , x k ) = p ( x k │ x 1 , ⋯   , x k − 1 ) ⋯ p ( x 2 ∣ x 1 ) p ( x 1 ) p(x_1,\cdots,x_k )=p(x_k│x_1,\cdots,x_{k-1}){\cdots}p(x_2 |x_1)p(x_1) p(x1,,xk)=p(xkx1,,xk1)p(x2x1)p(x1)

结构

head-to-head

由贝叶斯网络的定义,有
P ( a , b , c ) = P ( a ) P ( b ) P ( c ∣ a , b ) P(a,b,c)=P(a)P(b)P(c|a,b) P(a,b,c)=P(a)P(b)P(ca,b)
两边同时对随机变量 c c c积分
∑ c P ( a , b , c ) = ∑ c P ( a ) P ( b ) P ( c ∣ a , b ) ∑ c P ( a , b , c ) = P ( a ) P ( b ) ∑ c P ( c ∣ a , b ) P ( a , b ) = P ( a ) P ( b ) \sum_cP(a,b,c)=\sum_cP(a)P(b)P(c|a,b)\\ \sum_cP(a,b,c)=P(a)P(b)\sum_cP(c|a,b)\\ P(a,b)=P(a)P(b) cP(a,b,c)=cP(a)P(b)P(ca,b)cP(a,b,c)=P(a)P(b)cP(ca,b)P(a,b)=P(a)P(b)
即在 c c c未知的条件下, a a a b b b独立,称之为head-to-head条件独立。

tail-to-tail
由贝叶斯网络的定义,有

P ( a , b , c ) = P ( c ) P ( a ∣ c ) P ( b ∣ c ) P(a,b,c)=P(c)P(a|c)P(b|c) P(a,b,c)=P(c)P(ac)P(bc)

  • c c c未知, a a a b b b不独立;
  • c c c已知,有 P ( a , b ∣ c ) = P ( a , b , c ) P ( c ) = P ( c ) P ( a ∣ c ) P ( b ∣ c ) P ( c ) = P ( a ∣ c ) P ( b ∣ c ) P(a,b|c)=\frac{P(a,b,c)}{P(c)}=\frac{P(c)P(a|c)P(b|c)}{P(c)}=P(a|c)P(b|c) P(a,bc)=P(c)P(a,b,c)=P(c)P(c)P(ac)P(bc)=P(ac)P(bc) a a a b b b条件独立。
head-to-tail
由贝叶斯网络的定义,有

P ( a , b , c ) = P ( a ) P ( c ∣ a ) P ( b ∣ c ) P(a,b,c)=P(a)P(c|a)P(b|c) P(a,b,c)=P(a)P(ca)P(bc)

  • c c c未知, a a a b b b不独立;
  • c c c已知,有 P ( a , b ∣ c ) = P ( a , b , c ) P ( c ) = P ( a ) P ( c ∣ a ) P ( b ∣ c ) P ( c ) = P ( c ) P ( a ∣ c ) P ( b ∣ c ) P ( c ) = P ( a ∣ c ) P ( b ∣ c ) P(a,b|c)=\frac{P(a,b,c)}{P(c)}=\frac{P(a)P(c|a)P(b|c)}{P(c)}=\frac{P(c)P(a|c)P(b|c)}{P(c)}=P(a|c)P(b|c) P(a,bc)=P(c)P(a,b,c)=P(c)P(a)P(ca)P(bc)=P(c)P(c)P(ac)P(bc)=P(ac)P(bc) a a a b b b条件独立。
    x i x_i xi给定的条件下, x i + 1 x_{i+1} xi+1的分布和 x 1 , ⋯   , x i − 1 x_1,\cdots,x_{i-1} x1,,xi1条件独立,只和 x i x_i xi有关,和其他变量条件独立。即当前状态只跟前一时刻状态有关,这种顺次演变的随机过程,就是马尔科夫链(Markov chain)。

实现

主要依赖基于python的pgmpy库:GitHub 使用教程

网络拓扑结构
代码实现

引入相关的包

from pgmpy.models import BayesianModel
from pgmpy.factors.discrete.CPD import TabularCPD
from pgmpy.inference import VariableElimination

定义网络结构

# 边集
edge_list = [('A','C'),('A','D'),('C','F'),('C','E'),('B','D'),('D','E')]
# 定义网络结构
network = BayesianModel(edge_list)

定义变量之间的条件概率,入度为0的节点用先验概率进行信息表达

# variable 节点名称 variable_card 节点取值个数 values 节点的概率表 evidence 节点的父节点 evidence_card 父节点的取值个数
A_cpd = TabularCPD(variable='A', variable_card=2,
                   values=[[0.8], [0.2]])
                   
B_cpd = TabularCPD(variable='B', variable_card=2,
                   values=[[0.9], [0.1]])

C_cpd = TabularCPD(variable='C', variable_card=2,
                   values=[[0.8, 0.1], [0.2, 0.9]],
                   evidence=['A'], evidence_card=[2])

D_cpd = TabularCPD(variable='D', variable_card=2,
                   values=[[0.8, 0.2, 0.2, 0.1],
                           [0.2, 0.8, 0.8, 0.9]],
                   evidence=['A', 'B'],
                   evidence_card=[2, 2])

E_cpd = TabularCPD(variable='E', variable_card=2,
                   values=[[0.8, 0.2, 0.2, 0.1],
                           [0.2, 0.8, 0.8, 0.9]],
                   evidence=['C', 'D'],
                   evidence_card=[2, 2])

F_cpd = TabularCPD(variable='F', variable_card=2,
                   values=[[0.8, 0.1], [0.2, 0.9]],
                   evidence=['C'], evidence_card=[2])

把条件概率表加入到网络

network.add_cpds(A_cpd, B_cpd, C_cpd, D_cpd, E_cpd, F_cpd)

推理

# 推理,变量消除
inference = VariableElimination(network)
# 给定随机变量E
evidence_dict = {'E': 1}  
# 求A,B的概率
A_probability = inference.query(variables=['A'], evidence=evidence_dict)
B_probability = inference.query(variables=['B'], evidence=evidence_dict)

以上Demo是人为定义了网络结构,在实际应用中可以通过训练数据学习到网络结构

全概率分布可以回答相关领域的任何问题,但随着变量数目的增 加,全概率分布的联合取值空间却可能变得很大。另外,对所有的原 子事实给出概率,对用户来说也非常困难。 若使用Bayes 规则,就可以利用变量之间的条件独立关系简化计 算过程,大大降低所需要声明的条件概率的数目。我们可以用一个叫 作Bayesian 网的数据结构来表示变量之间的依赖关系,并为全概率分 布给出一个简明的表示。 定义(Bayesian 网):Bayesian 网T 是一个三元组(N,A,P),其 中 1. N 是节点集合 2. A 是有向弧集合,与N 组成有限非循环图G =(N,A) 3. P {p(V | ) :V N} v    ,其中 v  代表节点V 的父亲节点集合 Bayesian 网是一个有向非循环图: (1) 网中节点与知识领域的随机变量一一对应(下文中不区分节 点与变量); (2)网中的有向弧表示变量间的因果关系,从节点X 到节点Y 有 向弧的直观含义是X 对Y 有直接的因果影响;影响的强度或者说不确 定性由条件概率表示; (3)每个节点有一个条件概率表,定量描述其所有父亲节点对于 该节点的作用效果。 -2- (4)由领域专家给定网络结构和条件概率表。 )由领域专家给定网络结构和条件概率表。 )由领域专家给定网络结构和条件概率表。 )由领域专家给定网络结构和条件概率表。 )由领域专家给定网络结构和条件概率表。 )由领域专家给定网络结构和条件概率表。 )由领域专家给定网络结构和条件概率表。 )由领域专家给定网络结构和条件概率表。 )由领域专家给定网络结构和条件概率表。 对领域专家来说,决定在特中存哪些条件独立联系通常是 对领域专家来说,决定在特中存哪些条件独立联系通常是 对领域专家来说,决定在特中存哪些条件独立联系通常是 对领域专家来说,决定在特中存哪些条件独立联系通常是 对领域专家来说,决定在特中存哪些条件独立联系通常是 对领域专家来说,决定在特中存哪些条件独立联系通常是 对领域专家来说,决定在特中存哪些条件独立联系通常是 对领域专家来说,决定在特中存哪些条件独立联系通常是 对领域专家来说,决定在特中存哪些条件独立联系通常是 对领域专家来说,决定在特中存哪些条件独立联系通常是 对领域专家来说,决定在特中存哪些条件独立联系通常是 对领域专家来说,决定在特中存哪些条件独立联系通常是 对领域专家来说,决定在特中存哪些条件独立联系通常是 对领域专家来说,决定在特中存哪些条件独立联系通常是 较容易的 较容易的 较容易的 (给定网络结构相对容易 给定网络结构相对容易 给定网络结构相对容易 给定网络结构相对容易 给定网络结构相对容易 )─ 事实上,要远比际声明出这 事实上,要远比际声明出这 事实上,要远比际声明出这 事实上,要远比际声明出这 事实上,要远比际声明出这 事实上,要远比际声明出这 事实上,要远比际声明出这 事实上,要远比际声明出这 事实上,要远比际声明出这 些概率本身容易得多 些概率本身容易得多 些概率本身容易得多 些概率本身容易得多 些概率本身容易得多 (给定准确的条件概率相对 给定准确的条件概率相对 给定准确的条件概率相对 给定准确的条件概率相对 给定准确的条件概率相对 给定准确的条件概率相对 困难) 。一旦 。一旦 。一旦 BayesianBayesianBayesianBayesianBayesian Bayesian网的拓扑结构给定, 则只需对那些直接相互依赖节点出条件概率网的拓扑结构给定, 则只需对那些直接相互依赖节点出条件概率网的拓扑结构给定, 则只需对那些直接相互依赖节点出条件概率网的拓扑结构给定, 则只需对那些直接相互依赖节点出条件概率网的拓扑结构给定, 则只需对那些直接相互依赖节点出条件概率网的拓扑结构给定, 则只需对那些直接相互依赖节点出条件概率网的拓扑结构给定, 则只需对那些直接相互依赖节点出条件概率网的拓扑结构给定, 则只需对那些直接相互依赖节点出条件概率网的拓扑结构给定, 则只需对那些直接相互依赖节点出条件概率网的拓扑结构给定, 则只需对那些直接相互依赖节点出条件概率网的拓扑结构给定, 则只需对那些直接相互依赖节点出条件概率网
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值