当前位置: 首页 > article >正文

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

        贝叶斯网络(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.kler.cn/a/396717.html

相关文章:

  • 基于Matlab的碎纸片的自动拼接复原技术
  • 【Redis】Redis的一些应用场景及使用策略
  • 数据分析-48-时间序列变点检测之在线实时数据的CPD
  • 【Qt实现虚拟键盘】
  • 帽子矩阵--记录
  • 自由学习记录(22)
  • Molecular signatures database (MSigDB) 3.0
  • 使用YOLOv9进行图像与视频检测
  • 浪浪云轻量服务器搭建vulfocus网络安全靶场
  • kubesphere环境-本地Harbor仓库+k8s集群(单master 多master)+Prometheus监控平台部署
  • ctfshow(328)--XSS漏洞--存储型XSS
  • 2024年11月第2个交易周收盘总结
  • VLC-QT----Linux编译并运行示例
  • 信息安全工程师(83)Windows操作系统安全分析与防护
  • aws中AcmClient.describeCertificate返回值中没有ResourceRecord
  • RedisTemplate序列化设置
  • 【阅读记录-章节2】Build a Large Language Model (From Scratch)
  • 程序代码设计模式之模板方法模式(1)
  • 3.dns域名解析服务
  • DHTMLX-gantt组件显示不同的颜色
  • 嵌入式linux中块设备驱动框架基本实现
  • 基于物联网的智能超市快速结算系统
  • mindspore发布件
  • Linux下编译安装Nginx
  • MongoDB创建联合唯一性约束
  • 数仓建设之Oracle常见语法学习