贝叶斯网络——基于概率的图模型(详解)
贝叶斯网络(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是条件独立的。
学习贝叶斯网络的结构通常有两个步骤:结构学习和参数学习。
结构学习
这一步骤的目标是从数据中推断出最佳的网络结构,即确定哪些变量是相互依赖的,通过某些方法选择合适的有向边,构建出网络结构。结构学习主要方法如下:
评分搜索方法(通常与贪心算法结合一起用):
其核心思想是通过计算每种可能边(或依赖关系)的“评分”,并选择得分最高的边,逐步构建网络结构。评分方法通过比较不同结构的好坏来搜索最佳网络结构。最常见的评分函数有:
对数似然:对数似然是基于给定数据的条件概率计算出的值。其值越高,说明网络结构对数据的拟合越好。对数似然函数:logP(D∣G),其中 D 是观测数据,G 是网络结构,表示数据在给定结构下的条件概率。
贝叶斯信息准则(BIC):BIC是考虑模型复杂度的评分函数,它在对数似然上增加了一个惩罚项,避免过度拟合。BIC的公式是: ,其中,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)
评分公式:
其中,logP(D∣G),其中 D 是观测数据,G 是网络结构,N为样本量,k是网络中参数的数量
目标:求解出对数似然函数logP(D∣G),再求BIC
对于离散型数据(基于MLE极大似然估计求解)
对于每一个节点Xi,给定其父节点 的条件概率计算式为:
对每一个节点Xi,上式连乘,得到似然函数 P(D∣G)计算式:
最后得出BIC评分:
对于连续型数据(基于MLE极大似然估计求解)
对于连续型数据,假设节点 Xi 给定其父节点 服从某个已知的分布,常见的假设是条件分布为高斯分布。对于每一个节点Xi,给定其父节点 的条件概率计算式为:
其中:
对每一个节点Xi,得到似然函数 P(D∣G)计算式:
最后得出BIC评分:
第二轮:
更新网络,加入这条边后,计算其他可能的边的评分。例如:
-
CreditScore→Default , P(CreditScore,Default)的评分
-
P(DebtRatio,Default)的评分
-
P(MaritalStatus,DebtRatio)的评分
-
等等
-
选择评分最优的边,假设是 DebtRatio→Default,表示负债比率影响违约风险。
后续轮次:
持续进行边的选择和添加,直到所有可能的依赖关系都被评估过,并且没有更好的边可添加。最后得到一个网络结构(可能是局部最优网络结构)。
贪心算法优点:
计算效率高:与全局搜索方法相比,贪心算法的计算量较小,适合大数据集。
简单易理解:贪心算法结构简单,实现起来相对容易。
贪心算法缺点:
可能陷入局部最优:贪心算法只考虑当前步骤最优的选择,容易陷入局部最优解,无法保证得到全局最优的网络结构。为了避免局部最优解,可以通过多次随机初始化并选择最优解来改善这一点。
(3)参数学习
学习得到一个网络结构后,我们需要学习(即计算)每个节点的条件概率分布表。
如果使用MLE计算:
离散型计算公式
连续型计算公式
如果使用贝叶斯估计
我们结合贝叶斯定理和全概率公式,得到条件概率计算公式:
其中,Bi为当前节点的取值,A为父节点。
对于离散型,我们使用数据集的频率信息(出现次数)计算各种概率P,比如:
对于连续型,我们使用对应分布的概率密度函数计算各种概率P,比如:
参数学习计算出CPT以后,我们其实就得到了一个贝叶斯网络(图模型)。最后就是模型评估了,这里就不写了。
贝叶斯网络的优缺点
优点
-
表示复杂的依赖关系:贝叶斯网络能够清晰地表示变量之间的因果关系及其条件独立性,适用于描述复杂的因果模型。
-
灵活性强:可以处理离散和连续变量,支持不同类型的数据(如二元变量、整数、实数等)。
-
易于推理:通过贝叶斯推理,可以根据已有的证据推断其他变量的状态,适合不确定性较大的问题。
-
处理缺失数据:贝叶斯网络在数据缺失的情况下,仍能有效地进行推理和预测,能在一定程度上“填补”缺失数据。
-
直观易理解:网络的图形化结构使得贝叶斯网络容易被理解和解释,尤其是在非专业人员中。
缺点
-
结构学习困难:从数据中学习贝叶斯网络的结构是一项非常复杂的任务,尤其是在节点数目较多或数据量不足时,学习出的结构可能不准确。
-
计算复杂度高:对于大规模网络,尤其是涉及大量变量和条件概率的情况,推理和学习的计算复杂度较高,需要较大的计算资源。
-
依赖先验知识:贝叶斯网络需要依赖先验概率和条件概率表,这些信息有时需要人工设定,且可能会受到偏见的影响。
-
需要大量数据:尽管贝叶斯网络能处理不完全数据,但在大规模或复杂网络中,准确的学习和推断通常需要大量的训练数据。
应用场景
-
医疗诊断:贝叶斯网络能够将患者的症状、病史、检测结果等变量进行联合建模,从而推断疾病的可能性,特别适合处理不确定性较大的医学诊断任务。
-
故障诊断:在工业或系统监控中,贝叶斯网络可以帮助识别故障的原因并推断出可能的故障路径。
-
风险分析与管理:在金融、保险、工程等领域,贝叶斯网络用于建模复杂的风险因素,评估不同情境下的风险。
-
自然语言处理:在语言模型、语义分析和信息抽取等任务中,贝叶斯网络可用于建模词语、句子及其上下文之间的依赖关系。
-
机器学习中的特征选择和分类:贝叶斯网络有时用于特征选择,尤其是在面对高维数据时,利用其条件独立性来简化模型结构。
# 若文章对大噶有帮助的话,希望点个赞支持一下叭!
# 文章如有错误,欢迎大噶指正!