贝叶斯网络:利用变量消除(Variable Elimination)进行推理

news2024/12/23 17:09:54

贝叶斯网络简介

贝叶斯网络(Bayesian network)也叫贝氏网路、信念网络(belief network)或是有向无环图(DAG)模型,是一种概率图模型。它利用DAG的结构,得到一组随机变量{X1,X2,...,Xn}的条件概率分布(conditional probability distributions, or CPDs)。它的作用简单来说就是:通过分析因果关系来理解数据。

一般而言,DAG中节点表示随机变量,包括可观测变量,或潜在变量、未知参数。连接两个节点的箭头代表这两个随机变量是具有因果关系非条件独立的;若没有箭头连接二者的情况就称随机变量彼此间条件独立。单箭头的起点是“”,终点是“”;两节点之间产生一个条件概率值

贝叶斯网络的应用包括:疾病和相关症状间的概率关系(已知症状,计算各疾病的发生概率);生物信息学中基因调控网络、蛋白质结构分析、基因表达分析等;各个领域的决策支持系统;电力故障分析,如利用因果分析技术帮助电力、能源等公司找到电力系统中的风险所在等。

贝叶斯网络是一种强有力的基于概率的不确定性推理方法。它可以模拟某个变量改变会产生什么样的结果,比如天气的改变会如何影响能源供给和购物的状况。贝叶斯网络神经网络最大区别优势是,前者的运作过程有透明性,不是黑盒子。

贝叶斯网络的计算方法

贝叶斯网络的计算方法分为精确推导法和随机推导法。前者包括列举推理法、变量消除推理法(variable elimination)。后者包括直接取样推导法、拒绝取样推导法、概率加权推导法、马尔可夫链蒙特卡罗推导法。本文介绍精确推导法中的两个方法。

列举推理法

假如有两个服务器S1和S2,会发送数据包到用户端(用U表示)。而S2的发送成功率与S1的成功与否有关。其DAG结构图表示如下。对每个数据包传输,只有两个可能值:T(成功)或 F(失败)。那么就有如下的联合概率公式:P(S1,S2,U)=P(S1)*P(S2|S1)*P(U|S1,S2)

现在思考一个问题:假设用户U已经收到数据包,那么S1发送数据成功的概率是多大?

即我们要求P(S1=T|U=T)

而已知{S1}的真值表、{S1,S2}的真值表、{S1,S2,U}的真值表,这个问题是可以直接手动推导的!

P(S1=T|U=T)推导如下:

变量消除推理法

在BN(贝叶斯网络)中,我们把Pr(X)叫做边际概率(Marginal Probability),把Pr(X|E)叫做条件概率,其中E可以是单个或联合证据(conjunctive evidence)。这里的X叫做查询变量(query variable),E叫做证据变量(evidence variable),所有其他变量都叫隐变量(hidden variable)。注意:边际概率的意思是,我们没有得到任何证据。我们通常对后验概率感兴趣,也就是某件事已经发生,想计算这件事发生的原因是由某个因素引起的概率。

现在考虑一个案例,名字叫“如果John和Mary都打电话(Call)给你,那么发生入室盗窃(Burglary)的概率是多少?”。

故事的背景如下:假如你正在参加一个聚会,突然John打电话给你,你离开聚会并接听,他说家里有警报(Alarm),但是他说的话不一定是事实(只是具有某个概率),因为他经常喝醉。然后没多久Mary打电话给你,说回家吧,家里有警报(Alarm),同样她的话可信度也对应一个概率。现在你需要弄清楚这是由入室盗窃(Burglary)引起的警报,还是由地震(Earthquake)引起的警报,或者他俩都说的谎话(喝醉产生幻觉或故意开玩笑)。

你要求的是P(B|J=True, M=True)

第一步P(B| j, m)=\frac{P(B,j, m)}{P(j, m)},其中j,m都是小写,分别表示J,M的具体值,这里是J=True, M=True

(注:大写字母表示随机变量,需要处理它的所有可能值。因此P(B| j, m)就表示当John和Mary都打电话来时,家里发生入室盗窃(Burglary)的概率是多大,未发生的概率是多大)

第二步:显然上式分母是个常数,不重要。当J为真,M为真,分母对于入室盗窃的真假,是个恒定的值。而分子P(B,j, m)将随B的取值(True或False)变化而变化。

因此我们可以简单说:P(B| j, m)与P(B,j, m)成正比。比例性的另一个说法是,乘以某个alpha,于是我们有P(B| j, m)=\alpha P(B,j, m)

第三步:注意这个例子一共有5个变量,在完全联合分布中有2^5=32个可能的组合。现在目标公式考虑了BJM三个变量,就有2^2=4个情况可以表示:(地震为真,警报为真)、(地震为真,警报为假)、(地震为假,警报为真)、(地震为假,警报为假)。我们可以写为对隐变量求和完整联合分布。于是得到:P(B| j, m)=\alpha \sum_{E,A} P(B,E,A,j, m)

第四步:根据该问题的贝叶斯网络的DAG结构,我们进一步得到P(B| j, m)=\alpha \sum_{E,A} P(B)P(E)P(A|E,B)P(j|A)P(m|A)

重点:贝叶斯网络的完整联合分布始终可以通过拓扑顺序乘以所有条件概率来表示。

第五步:进一步做代数整理,把\sum_{E,A}拆解成\sum_{E}\sum_{A}的分步求和,也就是所谓的逐步变量消除。为此,先对A求和,再对E求和,就得到:

P(B| j, m)=\alpha P(B)\sum_{E} P(E)\sum_{A}P(A|E,B)P(j|A)P(m|A)

第六步:为进一步理解上述公式,我们画一个计算图。考虑B为真(True)的场景,即要计算P(b| j, m)这个概率值,根据公式应该是P(b| j, m)=\alpha P(b)\sum_{E} P(E)\sum_{A}P(A|E,B)P(j|A)P(m|A)

假设入室盗窃发生的概率(即P(b))为0.001,地震发生的概率(即P(e))为0.002,那么地震未发生的概率(即P(¬e))为0.998;假设入室盗窃和地震都发生时,警报响的概率(即P(a|b,e))为0.95,那么此时警报不响的概率(即P(¬a|b,e))为0.05;假设入室盗窃发生而地震未发生时,警报响的概率(即P(a|b,¬e))为0.94,那么此时警报不响的概率(即P(¬a|b,¬e))为0.06;假设警报响而John打来电话的概率(即P(j|a))为0.90;假设警报响而Mary打来电话的概率(即P(m|a))为0.70;假设警报不响而John打来电话的概率(即P(j|¬a))为0.05;假设警报不响而Mary打来电话的概率(即P(m|¬a))为0.01。那么,就得到如下的贝叶斯网络概率图,其中含“+”的圈圈表示求和节点(即∑),而不含“+”的圈圈表示乘法节点。

需要指出,上图底部两侧计算是重复的、冗余的,可用动态规划(DP)计算。本文不作过多讨论。

重点:在贝叶斯网络中进行计算推理的动态编程算法,就叫做变量消除(Variable Elimination)

变量消除(VE)使用名称因子(factor),因子是一个函数,VE通过按顺序消除所有变量,直到因子只剩下查询变量(Query Variable )。为了消除一个变量,必须联合包含该变量的所有因子;输出该变量对新的因子的影响之和;输出乘积形式的联合分布(Joint distribution)。

变量消除(VE)的例子

还是上面的例子,现在我们求P(J)

P(J)=\sum _{M,A,B,E}P(J,M,A,B,E)

=\sum _{M,A,B,E}P(J|A)P(M|A)P(B)P(A|B,E)P(E)

=\sum _{A}P(J|A)\sum _{M}P(M|A)\sum _{B}P(B) \sum _{E}P(A|B,E)P(E)

上式中\sum _{E}P(A|B,E)P(E)消去了E变量,是A和B的函数

因此,原式可改写为

P(J)=\sum _{A}P(J|A)\sum _{M}P(M|A)\sum _{B}P(B) f1(A,B)

上式中\sum _{B}P(B) f1(A,B)消去了B变量,是A的函数

因此,原式可改写为

P(J)=\sum _{A}P(J|A)\sum _{M}P(M|A) f2(A)

上式中\sum _{M}P(M|A) f2(A)消去了M变量,是A的函数

因此,原式可改写为

P(J)=\sum _{A}P(J|A)f3(A)

上式又消去了A变量,是J的函数

因此,原式可改写为

P(J)=f4(J)

以上展示了变量消除(VE)推理法是如何工作的线性化创建这些计算的序列,并且不断返回。

变量消除(VE)的特定数值计算

我们回到第五步的公式P(B| j, m)=\alpha P(B)\sum_{E} P(E)\sum_{A}P(A|E,B)P(j|A)P(m|A)

其中P(j|A)P(m|A)是A的函数,我们分别列出P(J|A)P(M|A)真值表,如下

表中数据和DAG中一致。

现在计算P(j|A)P(m|A)真值表,如下

我们可以把上式P(j|A)P(m|A)命名为f1,它的取值为0.63和0.005,即

我们的公式变成了P(B| j, m)=\alpha P(B)\sum_{E} P(E)\sum_{A}P(A|E,B)f1(A)

接下来对给定(E,B)的A条件概率乘以A的f1求和,即考虑\sum_{A}P(A|E,B)f1(A)

由于P(A|E,B)是一个必要的假设前提,我们直接给出真值表,如下:

解释如下:地震发生、盗窃发生,警报响的概率是0.95,警报不响的概率是0.05;地震发生、盗窃未发生,警报响的概率是0.29,警报不响的概率是0.71;地震未发生、盗窃发生,警报响的概率是0.94,警报不响的概率是0.06;地震未发生、盗窃未发生,警报响的概率是0.001,警报不响的概率是0.999。

注意\sum_{A}P(A|E,B)f1(A)是对A求和,消去A变量,因此是E、B的函数,得到:

我们把上式叫做f2(E,B),就有:

我们的公式变成了P(B| j, m)=\alpha P(B)\sum_{E} P(E)f2(E,B),显然E被求和、消去,所以它是B的函数!(当然,B只有True和False两个可能值)

现在考虑除去\alpha的部分,即P(B)\sum_{E} P(E)f2(E,B)

又已知B和E的真值表,如下

表中数据和DAG中一致。

我们得到P(B)\sum_{E} P(E)f2(E,B)的真值表如下

我们不妨把P(B)\sum_{E} P(E)f2(E,B)叫做f3(B),计算后就有

而我们的原公式变成了P(B| j, m)=\alpha f3(B)

现在思考如何把\alpha f3(B)与概率分布P(B| j, m)更好对应起来,即

可以发现f3(B)真值表的总和不为1,我们要对它进行归一化

归一化常数为0.0019,每个概率值要除以它。我们得到:

这就是我们最终要求的概率。

意思是,如果John和Mary都打电话(Call)给你,那么发生入室盗窃(Burglary)的概率是0.32!

这就是使用变量消除在贝叶斯网络中进行推理的方法。

变量消除(VE)推理法的总结

一. 每个操作只是各个因子的简单乘法,并进行累加

二. 复杂度取决于最大的因子,比如在本文的例子中是3个变量,而不是5个(因为j,m都已知);复杂度正比于变量数;和最大因子的消除顺序成指数相关;最优消除顺序的求解是N-hard问题;可以用启发式的方法求解,以及用特殊数据结构(如polytree

三. 没有魔法

polytree的相关资料

https://en.wikipedia.org/wiki/Polytree

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1174415.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java中的static

目录 static修饰成员变量 静态成员变量特征 static修饰成员方法 【静态方法特性】 static成员变量初始化 就地初始化 静态代码块初始化 注意事项 static修饰成员变量 静态成员变量特征 static修饰的成员变量,称为静态成员变量,静态成员变量最大的…

matplotlib从起点出发(10)_Tutorial_10_Layout

使用受约束的绘图干净整洁地将图形合适排列。 受约束的布局会自动调整子图,以便刻度标签、图例和颜色条等装饰不会重叠,同时仍保留用户请求的逻辑布局。 受约束布局类似于“紧密布局”,但它要更灵活。它处理放置在多个轴上的Axes(放置颜色条…

python 命令行界面的用户交互

背景 说一千,道一万,程序是为用户服务的,所以在程序运行过程,与用户交互以获取用户的信息输入和决策确认,是无法避免的编程需要考虑和解决的需求。 一个简单的demo 如下的程序中,程序需要生成一个新的 i…

图片批量归类:告别混乱,实现高效文件管理

在日常生活中,我们经常需要处理大量的图片文件。这些图片可能来自于不同的设备、不同的目录,甚至不同的存储介质。随着时间的推移,这些图片文件会越来越多,管理起来也会越来越困难。如何高效地整理这些图片文件,告别混…

初步利用Ansible实现批量服务器自动化管理

1.Ansible介绍 Ansible是一款开源的自动化运维工具, 在2012年由Michael DeHaan创建, 现在由Red Hat维护。Ansible是基于Python开发的,采用YAML语言编写自动化脚本playbook, 可以在Linux、Unix等系统上运行, 通过SSH协议管理节点, 无需在被管理节点安装agent。Ansible以其简单、…

MySQL 数据库安全性练习题

数据库安全性 一、实验目的 (1)熟悉通过MySQL对数据进行安全性控制 二、实验环境 Windows 11 MySQL Navicat 三、实验内容 今有以下两个关系模式: 职工(职工号,姓名,年龄,职务,工…

11.3递归建二叉树,二叉树函数规范化输入输出,一些二叉树性质,求叶子结点与树的高度

建树 ,递归建树 输入为 建立树 递归 函数参数表为引用或指针 void Creat(BiTree *T){char ch;scanf("%c",&ch);if(ch#){*TNULL;}else{*T(BiTree)malloc(sizeof(BiTNode));(*T)->datach;Creat(&(*T)->nextleft);Creat(&(*T)->nex…

标签识别中的数据泄露:关键分析

一、介绍 在数据驱动的决策时代,收集、处理和分析数据的过程在从医疗保健到金融,从营销到研究的各个领域都发挥着举足轻重的作用。数据分析的基本步骤之一是正确识别数据集中的标签或类别。然而,这项看似简单的任务可能充满挑战,尤…

springboot苍穹外卖实战:八、开发小程序准备工作+入门案例+小程序微信用户登录流程+商品浏览

开发小程序准备工作 官方网址:https://mp.weixin.qq.com/cgi-bin/wx?token&langzh_CN 1、微信小程序注册 注册地址:https://mp.weixin.qq.com/wxopen/waregister?actionstep1 2、 完善小程序信息 登录小程序后台:https://mp.weixin.…

前端框架Vue学习 ——(三)Vue生命周期

生命周期:指一个对象从创建到销毁的整个过程。 生命周期的八个阶段:每触发一个生命周期事件,会自动执行一个生命周期方法(钩子) mounted:挂载完成,Vue 初始化成功,HTML 页面渲染成功…

Linux学习第33天:Linux INPUT 子系统实验(二):Linux 自带按键驱动程序的使用

Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 本节笔记主要内容是学会如何使用Linux自带的按键驱动程序。 一、自带按键驱动程序源码简析 配置选项路径如下: -> Device Drivers ->…

内存学习(3):DRAM的基础存储结构(存储层级、读写过程,刷新与暂存)

1 DRAM背景简介 DRAM,全称为 Dynamic Random Access Memory ,中文名是“动态随机存取存储器”。所谓“动态”是和“静态”相对应的,芯片世界里还有一种 SRAM 静态随机存取存储器的存在。 笼统地说,DRAM 的结构比 SRAM 更简单&am…

UE5——源码阅读——2

这个是非常大的作用域,当程序离开这个东西,就会把它释放掉,设置了一个作用域把当前线程标记为主线程 插入了一个默认的Main,这个东西其实是标记点,这个标记是在UE内部有个性能分析工具可以看到这个标记点,主要是确定位…

【java学习—十三】处理流之三:标准输入输出流(3)

文章目录 1. 相关概念2. 举例与练习2.1. 举例2.2. 练习 1. 相关概念 System.in 和 System.out 分别代表了系统标准的输入和输出设备,默认输入设备是键盘,输出设备是显示器。     System.in 的类型是 InputStream     System.out 的类型是 PrintS…

SpringMvc从菜鸟到大拿完成蜕变

SpringMvc从菜鸟到大拿完成蜕 介绍 Why springmvc Servlet缺点: servlet中的service:方法一次只能处理一类请求;单拿用户表来说,得需要创建五个Servlet;在url中输入的是urlpattern;默认只访问service方法;如何减少Servlet的个数呢? 增加了一个method参数;其他人有可能会喜欢…

腾讯云CVM S5服务器优惠价格表,买一年送3个月

腾讯云服务器CVM标准型S5有活动,CVM 2核2G S5优惠价280.8元一年自带1M带宽,15个月313.2元、2核4G配置748.2元15个月、4核8G配置1437.24元15个月、8核16G优惠价3048.48元15个月,公网带宽可选1M、3M、5M或10M,腾讯云服务器网txyfwq.…

【算法练习Day39】单词拆分多重背包的介绍

​📝个人主页:Sherry的成长之路 🏠学习社区:Sherry的成长之路(个人社区) 📖专栏链接:练题 🎯长路漫漫浩浩,万事皆有期待 文章目录 单词拆分多重背包总结&…

[BUUCTF NewStar 2023] week5 Crypto/pwn

最后一周几个有难度的题 Crypto last_signin 也是个板子题,不过有些人存的板子没到,所以感觉有难度,毕竟这板子也不是咱自己能写出来的。 给了部分p, p是1024位给了922-101位差两头。 from Crypto.Util.number import * flag b?e 655…

Winform 实现俄罗斯方块游戏(一)

第一步,先用GDI绘制小正方形方块,其它形状的用这个方块合成 如何绘制一个方块?先绘制两个正方形,如下: 然后四周用梯形填充,内部颜色用渐变,这样更有立体感,下篇介绍如何实现。

D-link未授权访问以及远程代码执行

随便输入一个错误密码,会跳转到页面: /page/login/login.html?errorfail继续访问有效页面漏洞url: /Admin.shtml然后访问管理页面去更改管理密码 直接构造payload访问漏洞url: /cgi-bin/execute_cmd.cgi?cmdid执行命令&#…