贝叶斯网络讨论与Python实现

    一贝叶斯网络核心思想

 从局部信息推广全局的过程,现实中的任何分析是已经获得一定知识的前提下去做判断,即为条件概率,通过贝叶斯公式实现条件概率的求解。

P(E/M)=P(E,M))/P(M)) =P(E)*P(M/E)/P(M) (1)

其中第三个等式是贝叶斯公式的精髓,它存在两个意义(一)简化求解计算复杂度,直接采用公式二的联合概率密度求解假设为N个变量则需要列出2^{^{N}}表以获得联合概率的具体表示方式,若为条件概率密度则只需要N个表即可(二)实现了P(M/E)与P(E/M)的转换,即存在假设一个条件概率是难求的可以通过一个简单的概率可以获知,例如P(E=家庭收入超过两千/M=买一千块手机)的条件概率,比P(M=买一千块手机的条件概率/E=家庭收入超过两千/)难获得可以通过后者求解可得到。

     二独立性判断

条件概率(1)可由联合概率密度求解,可以从联合概率密度分离出独立变量后简化计算难度,或者可以用第三个等式求解,若多个变量时条件概率密度的独立的计算难度会大大降低,所以独立性判断至关重要。D分离方法为有效的独立性判断手段,起将变量X,Y之间的连接方法划分为三种形式:

因果链条

共同原因

共同结果

会变色是连接变量X,Y的中间变量Z,灰色状态代表中间变量已知,白色是未知情况,判断标准为:

P(X,Y)=P(X)P(Y)则满足完全独立,若P(X/Z,Y))=P(X/Z)则代表给定Z的情况下X,Y之间条件独立,若不成立举反例即可。

对于这三种方式可以得到如下结论:

(一)对于因果变量,若中间变量未知,则X,Y变量不相互独立,若中间变量已知,则X,Y变量相互独立

(二)对于共同原因,若变量未知,则,则X,Y变量相互独立,若中间变量已知,则X,Y变量不相互独立

(二)对于共同结果,若变量未知,则,则X,Y变量相互独立,若中间变量已知,则X,Y变量不相互独立

  二高效的贝叶斯网络构建

我们应该构建最高效的贝叶斯网络以最低的计算代价获得所需条件概率结果,如果采用非因果方式编码会导致变量之间的连接网络变复杂,计算代价大,构建高效贝叶斯网络的法则:原因节点现在结果节点前面并以小于结果节点的进行编写

二非离散型变量的处理

若输入是连续型变量则采用高斯函数对输入进行建模

若输入是连续型函数则采用sigmoid函数可以输出为布尔型变量

三贝叶斯网络的高效运算

如果采用从左至右算法进行计算会存在多个变量重复计算的情况,

(一)消元法

方法:我们一般采用以存数量换取计算代价从右向做进行计算后再进行求和,这样可以减少计算量,从左至右计算相当于宽度求解过程,从右向左计算,是模块点乘思想但是计算复杂度也不低,不同的排序会在过程中产生不同的因子

技巧:

删去非查询变量和证据变量祖先的变量的节点。

(二)聚类

将小类整合成大类进行计算即可

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
贝叶斯网络是一种用于建模概率关系的图模型。它由一组节点和有向边组成,节点表示随机变量,边表示变量之间的概率依赖关系。贝叶斯网络中的节点可以分为两类:父节点和子节点。父节点是指在网络中具有入边的节点,子节点是指在网络中具有出边的节点。贝叶斯网络通过条件概率表(CPT)来描述节点之间的依赖关系。 在贝叶斯网络中,节点的状态由其父节点的状态决定。通过观察一些节点的状态,可以推断其他节点的状态。这种推断过程称为贝叶斯推断。贝叶斯网络可以用于概率推理、决策分析、异常检测等方面。 在Python中,可以使用第三方库pgmpy来实现贝叶斯网络。pgmpy提供了一系列用于构建和分析贝叶斯网络的工具和方法。首先,需要定义网络中的节点和边,并为每个节点设置其条件概率表。然后,可以使用pgmpy中的贝叶斯推断算法进行概率推理。pgmpy还支持网络的学习,即从数据中学习网络的结构和参数。 以下是一个简单的示例代码,演示了如何使用pgmpy实现一个贝叶斯网络: ```python from pgmpy.models import BayesianModel from pgmpy.factors.discrete import TabularCPD # 定义贝叶斯网络的结构 model = BayesianModel([('A', 'C'), ('B', 'C'), ('B', 'D'), ('C', 'E')]) # 定义节点的条件概率表 cpd_a = TabularCPD(variable='A', variable_card=2, values=[[0.2, 0.8]]) cpd_b = TabularCPD(variable='B', variable_card=2, values=[[0.3, 0.7]]) cpd_c = TabularCPD(variable='C', variable_card=3, values=[[0.1, 0.2, 0.7], [0.4, 0.4, 0.2], [0.3, 0.3, 0.4]], evidence=['A', 'B'], evidence_card=[2, 2]) cpd_d = TabularCPD(variable='D', variable_card=2, values=[[0.5, 0.5]], evidence=['B'], evidence_card=[2]) cpd_e = TabularCPD(variable='E', variable_card=2, values=[[0.3, 0.7]], evidence=['C'], evidence_card=[3]) # 将条件概率表添加到贝叶斯网络中 model.add_cpds(cpd_a, cpd_b, cpd_c, cpd_d, cpd_e) # 进行贝叶斯推断 from pgmpy.inference import VariableElimination infer = VariableElimination(model) print(infer.query(variables=['E'], evidence={'A': 1, 'B': 1})) ``` 该示例中,我们定义了一个具有5个节点和4条边的贝叶斯网络。然后,我们为每个节点定义了其条件概率表。最后,使用VariableElimination类进行贝叶斯推断,计算给定'A'和'B'节点状态为1时,'E'节点的后验概率分布。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值