贝叶斯网络——基于概率的图模型(详解)

        贝叶斯网络(Bayesian Network,简称BN)是一种基于概率图模型的表示方法,用于表示变量之间的依赖关系,并通过条件概率推断变量间的关系。它通过有向无环图(DAG)来描述变量之间的依赖关系,其中每个节点表示一个随机变量,边表示变量之间的条件依赖关系。 

基本概念

有向无环图(DAG)

叶斯网络由一个有向无环图组成,其中每个节点通过有向边与其他节点相连。边的方向表示一个变量对另一个变量的条件依赖关系,且没有环路,即图中不存在从一个节点回到其本身的路径。

专家知识

专家知识可以理解为一系列定理或者已知结论,主要用于确定变量间的依赖关系。比如,根据科学知识,X影响Y,我们可以确定依赖关系: X→Y

条件依赖

图中的边表示变量之间的条件依赖关系。如果节点A指向节点B,则节点B的值在已知节点A的条件下依赖于节点A的值。节点B的值与其父节点的值之间的关系通常通过条件概率分布(CPD)来描述。

依赖关系举例:A→B,A→C,B→C,B→A,C→A,C→B等等。

条件概率表(CPT):

每个节点都有一个条件概率表,用来描述该节点在给定其父节点条件下的概率分布。如果一个节点没有父节点(即是根节点),那么它的条件概率表就是其边缘分布。

主要步骤

(一)随机变量的选择与定义

每个变量通常代表一个特征或事件,可能是离散的也可能是连续的。比如在医疗诊断中,变量可以是症状、疾病或治疗效果等。

举个例子:

目标:目标是评估一个人的信用风险(是否违约)。

基本变量(特征变量):

  • 信用历史(C):个人的信用历史是否良好(好/差)

  • 收入水平(A):借款人的收入水平(高/低)

  • 债务比率(D):借款人债务与收入的比例(低/高)

  • 负债历史(L):借款人是否有过欠款记录(有/没有)

  • 工作稳定性(W):借款人是否有稳定的工作(有/没有)

  • 等等

目标变量:

  • 违约风险(R):借款人是否有违约的风险(是/否)。

(二)学习网络结构

若没有专家知识,我们要确定变量间的依赖关系、并构建贝叶斯网络结构,就要从数据中去学习他们的关系,构建网络结构。

贝叶斯网络的核心部分是通过图结构表示变量之间的依赖关系。每个节点表示一个随机变量,边则表示一个条件依赖关系。

  • 父节点与子节点:在图中,每个节点(变量)可能依赖于其他节点。通过“父节点”和“子节点”来描述依赖关系。父节点影响子节点的取值,子节点的值受到父节点的条件概率影响。

  • 无环性:贝叶斯网络的图结构是有向无环图(DAG),即图中不存在回路。这保证了从某个节点出发无法沿着边回到同一个节点。

  • 条件独立性假设:对于每个节点,条件独立性假设表明,节点在给定其父节点条件下,与其他未直接连接的节点是条件独立的。例如,如果变量A→B,而B→C,则在给定B的情况下,A和C是条件独立的。


学习贝叶斯网络的结构通常有两个步骤:结构学习和参数学习。

结构学习

        这一步骤的目标是从数据中推断出最佳的网络结构,即确定哪些变量是相互依赖的,通过某些方法选择合适的有向边,构建出网络结构。结构学习主要方法如下:

评分搜索方法(通常与贪心算法结合一起用):

        其核心思想是通过计算每种可能边(或依赖关系)的“评分”,并选择得分最高的边,逐步构建网络结构。评分方法通过比较不同结构的好坏来搜索最佳网络结构。最常见的评分函数有:

  • 对数似然:对数似然是基于给定数据的条件概率计算出的值。其值越高,说明网络结构对数据的拟合越好。对数似然函数:log⁡P(D∣G),其中 D 是观测数据,G 是网络结构,表示数据在给定结构下的条件概率。

  • 贝叶斯信息准则(BIC):BIC是考虑模型复杂度的评分函数,它在对数似然上增加了一个惩罚项,避免过度拟合。BIC的公式是: BIC = -2 \log P(D | G) + k \log(N),其中,k 是网络中参数的数量,N 是样本量。较低的BIC值表示较优的模型

约束搜索方法

        与贪心算法不同,约束方法通过统计检验来推断节点之间的独立性,从而确定哪些边应当存在。约束方法的边选择不是基于评分函数的,而是基于条件独立性测试的结果。

  • PC算法:首先初始化空网络,假设所有的变量之间都有边。然后通过一系列的条件独立性测试逐步去除不必要的边。具体来说,对于每对节点 X 和 Y,PC算法会测试它们在其他节点条件下是否独立。如果测试结果是独立的,则去掉这条边。

启发式搜索方法

        启发式搜索方法采用随机化搜索的策略,目的是避免陷入局部最优解。与贪心算法类似,启发式方法也会逐步探索可能的边,但它们允许一定程度的“跳跃”,以避免陷入局部最优。

  • 模拟退火:模拟退火是一个全局优化方法,可以避免贪心算法可能陷入局部最优解。它通过模拟物理过程中的退火过程,逐步降低系统的能量(类似于网络评分的最小化)。在搜索过程中,模拟退火允许某些不太优的选择,以此来跳出局部最优。

  • 遗传算法:遗传算法通过模拟自然选择过程来寻找最优网络结构。首先,生成一组网络结构(种群),然后通过交叉和变异操作生成新的一代网络。每一代的网络结构都通过评分函数进行评估,优胜者会“繁殖”出下一代。

参数学习

        当网络结构确定后,下一步是计算每个节点的条件概率表(CPT,Conditional Probability Table)。对于离散变量,通常使用最大似然估计(MLE)来计算条件概率;对于连续变量,则可以使用贝叶斯估计或最大似然估计(MLE)来拟合分布参数。

贝叶斯估计、最大似然估计(MLE)在后面的例子会讲。

 

(三)模型评估

建立了贝叶斯网络之后,还需要通过模型验证来评估其性能。这可以通过交叉验证等方法进行,以确保贝叶斯网络在未知数据上的表现良好。

违约风险评估的贝叶斯网络模型(示例)

        假设我们有一组银行用户的数据,包含了多个特征,用于评估每个用户的违约风险。我们希望通过学习贝叶斯网络的结构和参数来预测用户是否会违约。贝叶斯网络将帮助我们理解特征之间的关系,并通过学习数据中的条件概率来进行预测。

(1)数据定义(数据准备)

目标变量:

  • 是否违约(Default):目标变量,用户是否违约,离散变量(是/否)

特征变量:

  • 收入(Income):用户的年收入,通常是连续变量。

  • 信用分数(CreditScore):用户的信用评分,通常是离散变量。

  • 负债比率(DebtRatio):用户的负债占收入的比例,通常是连续变量。

  • 婚姻状况(MaritalStatus):用户的婚姻状况,离散变量(已婚、未婚、离异等)。

  • 历史违约(PastDefault):用户过去是否有违约记录,离散变量(有违约、无违约)。

  • 贷款金额(LoanAmount):用户申请的贷款金额,连续变量。

(2)结构学习

我们首先需要确定特征之间的依赖关系。在没有专家知识的情况下,我们可以使用数据驱动的方法来学习贝叶斯网络的结构。使用评分搜索方法贪心算法学习网络结构:

初始步骤

从一个空网络开始,所有变量之间没有任何边。

第一轮:

比较所有变量之间的依赖关系,计算每条边的评分(使用BIC示例)。例如:

  • Income→DebtRatio  ,计算P(Income,DebtRatio)的评分

  • P(CreditScore,Default)的评分

  • P(Income,Default)的评分

  • ......

  • 选择评分最高的一条边,假设是Income→DebtRatio,表示收入影响负债比率。

贝叶斯信息准则(BIC)

评分公式:BIC = -2 \log P(D | G) + k \log(N)

其中,log⁡P(D∣G),其中 D 是观测数据,G 是网络结构,N为样本量,k是网络中参数的数量

目标:求解出对数似然函数log⁡P(D∣G),再求BIC

对于离散型数据(基于MLE极大似然估计求解)

对于每一个节点Xi,给定其父节点 \text{Pa}(X_i) 的条件概率计算式为:

对每一个节点Xi,上式连乘,得到似然函数 P(D∣G)计算式:

最后得出BIC评分:BIC = -2 \log P(D | G) + k \log(N)

对于连续型数据(基于MLE极大似然估计求解)

对于连续型数据,假设节点 Xi 给定其父节点 \text{Pa}(X_i) 服从某个已知的分布,常见的假设是条件分布为高斯分布。对于每一个节点Xi,给定其父节点 \text{Pa}(X_i) 的条件概率计算式为:

其中:

对每一个节点Xi,得到似然函数 P(D∣G)计算式:

最后得出BIC评分:BIC = -2 \log P(D | G) + k \log(N)

第二轮:

更新网络,加入这条边后,计算其他可能的边的评分。例如:

  • CreditScore→Default  , P(CreditScore,Default)的评分

  • P(DebtRatio,Default)的评分

  • P(MaritalStatus,DebtRatio)的评分

  • 等等

  • 选择评分最优的边,假设是 DebtRatio→Default,表示负债比率影响违约风险。

后续轮次:

持续进行边的选择和添加,直到所有可能的依赖关系都被评估过,并且没有更好的边可添加。最后得到一个网络结构(可能是局部最优网络结构)。

贪心算法优点

  • 计算效率高:与全局搜索方法相比,贪心算法的计算量较小,适合大数据集。

  • 简单易理解:贪心算法结构简单,实现起来相对容易。

贪心算法缺点

  • 可能陷入局部最优:贪心算法只考虑当前步骤最优的选择,容易陷入局部最优解,无法保证得到全局最优的网络结构。为了避免局部最优解,可以通过多次随机初始化并选择最优解来改善这一点。

(3)参数学习

学习得到一个网络结构后,我们需要学习(即计算)每个节点的条件概率分布表。

如果使用MLE计算:

离散型计算公式

连续型计算公式

如果使用贝叶斯估计

我们结合贝叶斯定理和全概率公式,得到条件概率计算公式:

 其中,Bi为当前节点的取值,A为父节点。

对于离散型,我们使用数据集的频率信息(出现次数)计算各种概率P,比如:

对于连续型,我们使用对应分布的概率密度函数计算各种概率P,比如:

参数学习计算出CPT以后,我们其实就得到了一个贝叶斯网络(图模型)。最后就是模型评估了,这里就不写了。

贝叶斯网络的优缺点

优点

  • 表示复杂的依赖关系:贝叶斯网络能够清晰地表示变量之间的因果关系及其条件独立性,适用于描述复杂的因果模型。

  • 灵活性强:可以处理离散和连续变量,支持不同类型的数据(如二元变量、整数、实数等)。

  • 易于推理:通过贝叶斯推理,可以根据已有的证据推断其他变量的状态,适合不确定性较大的问题。

  • 处理缺失数据:贝叶斯网络在数据缺失的情况下,仍能有效地进行推理和预测,能在一定程度上“填补”缺失数据。

  • 直观易理解:网络的图形化结构使得贝叶斯网络容易被理解和解释,尤其是在非专业人员中。

缺点

  • 结构学习困难:从数据中学习贝叶斯网络的结构是一项非常复杂的任务,尤其是在节点数目较多或数据量不足时,学习出的结构可能不准确。

  • 计算复杂度高:对于大规模网络,尤其是涉及大量变量和条件概率的情况,推理和学习的计算复杂度较高,需要较大的计算资源。

  • 依赖先验知识:贝叶斯网络需要依赖先验概率和条件概率表,这些信息有时需要人工设定,且可能会受到偏见的影响。

  • 需要大量数据:尽管贝叶斯网络能处理不完全数据,但在大规模或复杂网络中,准确的学习和推断通常需要大量的训练数据。

应用场景

  • 医疗诊断:贝叶斯网络能够将患者的症状、病史、检测结果等变量进行联合建模,从而推断疾病的可能性,特别适合处理不确定性较大的医学诊断任务。

  • 故障诊断:在工业或系统监控中,贝叶斯网络可以帮助识别故障的原因并推断出可能的故障路径。

  • 风险分析与管理:在金融、保险、工程等领域,贝叶斯网络用于建模复杂的风险因素,评估不同情境下的风险。

  • 自然语言处理:在语言模型、语义分析和信息抽取等任务中,贝叶斯网络可用于建模词语、句子及其上下文之间的依赖关系。

  • 机器学习中的特征选择和分类:贝叶斯网络有时用于特征选择,尤其是在面对高维数据时,利用其条件独立性来简化模型结构。

#  若文章对大噶有帮助的话,希望点个赞支持一下叭!

# 文章如有错误,欢迎大噶指正!

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

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

相关文章

[智能车摄像头是一种安装在汽车上用于辅助驾驶和提高安全性的重要设备]

智能车摄像头是一种安装在汽车上用于辅助驾驶和提高安全性的重要设备。它们通常包括几个不同类型,如前视摄像头、环视摄像头、行车记录仪等。这些摄像头的主要功能有: 前视摄像头(Forward Camera):用于提供驾驶员前方…

用WordPress需要学习哪些编程知识

要使用WordPress搭建和管理网站,您需要掌握一些基本的编程知识。以下是一些关键的技能和概念: 基本编程知识 – HTML:用于构建网页的结构。 – CSS:用于设计和布局网页。 – PHP:WordPress是基于PHP的,…

numpy中的transpose()和pytorch中的permute()

它们都用于重新排列张量的维度,但在实现细节和使用方式上有所不同 numpy.transpose numpy.transpose 函数用于重新排列数组的维度。它接受一个元组作为参数,表示新的维度顺序。 numpy.transpose(a, axesNone) a:输入的数组。 axes&#xff…

linux,一、部署LNMP环境二、配置动静分离三、地址重写四、编写systemd Unit文件

一、部署LNMP环境 二、配置动静分离 三、地址重写 四、编写systemd Unit文件一、部署LNMP环境 环境说明 主机名 IP地址 角色 server1(已存在) eth0:192.168.88.254/24 客户端 proxy(已存在) eth0:192.168.8…

组件间通信(组件间传递数据)

组件间通信(组件间传递数据) 在 Vue.js 中,组件间通信是开发者需要经常处理的任务,特别是在构建具有多层次组件的复杂应用时。根据组件之间的关系和数据流的复杂程度,可以采用不同的通信方式。以下是常用的几种组件间通信方式: …

使用Element UI实现前端分页,及el-table表格跨页选择数据,切换分页保留分页数据,限制多选数量

文章目录 一、前端分页1、模板部分 (\<template>)2、数据部分 (data)3、计算属性 (computed)4、方法 (methods) 二、跨页选择1、模板部分 (\<template>)2、数据部分 (data)3、方法 (methods) 三、限制数量1、模板部分 (\<template>)2、数据部分 (data)3、方法…

git常用命令+搭vscode使用

1.克隆远程代码 git clone http:xxx git clone ssh:xxx clone的url 中 https和 ssh是有区别的: git中SSH和HTTP连接有什么区别-CSDN博客 当然https拉下来的代码每次pull /push都需要验证一次自己的账户和密码,可以config进行配置不用每次手敲: 解决VScode中每次git pu…

我的docker随笔45:在龙芯平台安装docker

本文介绍在龙芯平台安装docker。 前言 2017年下半年开始接触docker时&#xff0c;那会李大锤刚刚会爬&#xff0c;而今年&#xff08;2024年&#xff09;下半年&#xff0c;李大锤已经是一个经常考得C并且经常和妹妹吵架的二年级学生了。这么多年就过去&#xff0c;docker一直…

GitLab 如何跨版本升级?

本分分享 GitLab 跨版本升级的一些注意事项。 众所周知&#xff0c;GitLab 的升级必须要严格遵循升级路径&#xff0c;否则就会出现问题&#xff0c;导致升级失败。因此&#xff0c;在 GitLab 升级之前需要做好两件事情&#xff1a; 当前版本的确认升级路径的确认 极狐GitLa…

网上商城系统设计与Spring Boot框架

3 系统分析 当用户确定开发一款程序时&#xff0c;是需要遵循下面的顺序进行工作&#xff0c;概括为&#xff1a;系统分析–>系统设计–>系统开发–>系统测试&#xff0c;无论这个过程是否有变更或者迭代&#xff0c;都是按照这样的顺序开展工作的。系统分析就是分析系…

hive alter table add columns 是否使用 cascade 的方案

结论 alter table xxx add columns 时加上 cascade 时&#xff0c;会把所有的分区都加上此字段。如果不加则只有新的分区会加上此字段&#xff0c;旧的分区没有此字段&#xff0c;即便数据文件里有对应的数据&#xff0c;也不能显示内容。 如果分区都是 insert overwrite 生成…

C#笔记(3)

好的OOP程序--->模块合理、结构清晰、程序规范、注释明确、运行流畅、维护容易、扩展方法。 OOP是学习各种编程的原则、方法、技巧、经验、模式、架构等。 所有面向对象的编程语言&#xff0c;都是把我们要处理的”数据“和”行为“封装到类中。 1、设计类 2、关联类 3…

LabVIEW 实现 find_nearest_neighbors 功能(二维平面上的最近邻查找)

1. 背景介绍 在数据分析和图像处理领域&#xff0c;经常需要查找给定点的最近邻居点。在LabVIEW中&#xff0c;计算二维平面上多个点之间的欧氏距离&#xff0c;并返回距离最近的几个点是一种常见操作。find_nearest_neighbors 函数用于实现这个功能。 2. 欧氏距离计算 在二维…

Python如何从HTML提取img标签下的src属性

目录 前提准备步骤1. 解析HTML内容2. 查找所有的img标签3. 提取src属性 完整代码 前提准备 在处理网页数据时&#xff0c;我们经常需要从HTML中提取特定的信息&#xff0c;比如图片的URL。 这通常通过获取img标签的src属性来实现。 在开始之前&#xff0c;你需要确保已经安装…

C++组合复用中,委托的含义与作用

委托&#xff08;Delegation&#xff09;的含义与作用 委托是一种软件设计技术&#xff0c;它允许一个对象在处理某个请求时&#xff0c;将请求的处理责任转移给另一个对象。委托的核心思想是通过组合&#xff08;composition&#xff09;而不是继承&#xff08;inheritance&a…

nacos-operator在k8s集群上部署nacos-server2.4.3版本踩坑实录

文章目录 操作步骤1. 拉取仓库代码2. 安装nacos-operator3. 安装nacos-server 坑点一坑点二nacos-ui页面访问同一集群环境下微服务连接nacos地址配置待办参考文档 操作步骤 1. 拉取仓库代码 &#xff08;这一步主要用到代码中的相关yml文件&#xff0c;稍加修改用于部署容器&…

.Net Core根据文件名称自动注入服务

.Net Core根据文件名称自动注入服务 说明分析逻辑所有代码一键注入 说明 这个适用于.Net Core 的Web项目,且需要在服务中注入接口的需求.因为之前些Java Web习惯了,所以会有Dao层,Serivce层和Controller层.但是如果一个项目里面对于不同的数据库会有多个Dao,如果一个一个引入会…

鸿蒙版APP-图书购物商城案例

鸿蒙版-小麦图书APP是基于鸿蒙ArkTS-API12环境进行开发&#xff0c;不包含后台管理系统&#xff0c;只有APP端&#xff0c;页面图书数据是从第三方平台(聚合数据)获取进行展示的&#xff0c;包含登录&#xff0c;图书类别切换&#xff0c;图书列表展示&#xff0c;图书详情查看…

Vulnhub靶场案例渗透[8]- HackableII

文章目录 一、靶场搭建1. 靶场描述2. 下载靶机环境3. 靶场搭建 二、渗透靶场1. 确定靶机IP2. 探测靶场开放端口及对应服务3. 扫描网络目录结构4. ftp文件上传漏洞5. 反弹shell6. 提权 一、靶场搭建 1. 靶场描述 difficulty: easy This works better with VirtualBox rather t…

Pycharm 配置 Poetry

Python 环境安装 参考以下&#xff1a; 官网安装步骤 CODA方式安装 Poetry 安装 Poetry在windows下的安装使用 1.下载软件包 下载地址 2.获取安装脚本下载地址 3.使用命令安装 打开cmd&#xff0c;进入安装包和脚本文件所在目录&#xff0c;执行命令&#xff1a; python …