关于在数据缺失情况下使用EM算法估计贝叶斯网络结构

当我们要建立贝叶斯网络时,需要首先通过因果关系得到贝叶斯的网络结构,再训练得到贝叶斯网的参数集。这里,参数集往往是通过给定数据集进行统计计算得到,但是,有的时候,给定的数据集不一定是完整的,可能某一条或多条的数据缺失一个或两个数据。

这是需要我们在数据缺失的情况下计算参数集,当然最简单的方法是去掉具有缺失数据的行,这样显然在数据集较小的时候会造成参数集的严重不准确。

在贝叶斯引论那本书中提到要用EM算法来解决这个问题。其实EM算法就是最大化期望值算法,这个过程中我们计算在某随机参数情况下的最大似然值,然后根据此似然值对参数值进行了修正,再次计算极大似然值,不断迭代,知道计算得到的值在可接受的阀值范围内。

下面来说一下,他是咋实现的。

首先,输入数据是贝叶斯网络结构、缺失的数据集、收敛阀值

1、设初始迭代次数为0,网络参数为任意值。收敛阀值a

2、根据贝叶斯估计公式计算网络参数的似然值。

其中:

这里面最值注意的是,在计算的时候一定要进行进行一下归一化才能得到真正的结果哦。

进入循环体:

a、用oldscore记录似然值。

b、计算(E步骤)

c、计算的最大值,即“最大似然”撒(M步骤)

d、此时,得到了newScore,比较newScore和oldscore,如果在收敛阀值内,则迭代结束,newscore就是最终结果。否则,使用oldscore记录newscore,迭代次数加一,继续迭代。

 

在书中他还介绍了,使用团树传播方法来简化计算过程。后面再记录。流程。

 

这个算法可以将参数和缺失数据同时计算出来,虽然对方也不清楚他们要什么,但是跑不出这两个。

转载于:https://www.cnblogs.com/Vanior/archive/2012/07/06/2580012.html

### 使用结构EM算法Matlab中构建贝叶斯网络模型 为了实现基于结构期望最大化(Structural Expectation Maximization, SEM算法来从原始数据构建贝叶斯网络,在Matlab中有特定的方法和工具箱可以利用。下面提供了一个简化版的SEM算法框架用于学习贝叶斯网络结构估计参数。 #### 初始化变量与加载数据集 首先定义一些必要的全局变量以及读取输入的数据文件: ```matlab % 加载样本数据 data = csvread('raw_data.csv'); % 假设CSV格式存储着离散化后的观测值矩阵 numNodes = size(data, 2); % 节点数量等于特征维度数 nodeStates = cell(1, numNodes); % 各节点可能的状态集合初始化为空单元数组 for i = 1:numNodes nodeStates{i} = unique(data(:,i)); % 获取各列即各个随机变量的不同取值情况 end ``` #### 定义辅助函数计算局部评分准则 这里采用BIC作为评价标准之一,其他选项还包括AIC等: ```matlab function score = computeLocalScore(nodeIndex, parentSetIndices, data, nodeStates) % 计算给定父结点组合下的单个结点得分 ... end ``` #### 执行结构EM迭代过程 核心部分在于交替执行E步更新隐含边的概率分布Q,M步优化当前图G*直至收敛: ```matlab maxIter = 100; tolerance = 1e-4; currentGraph = zeros(numNodes); prevLogLikelihood = Inf; logLikelihoodHistory = []; for iter = 1:maxIter % E-step: 更新边缘概率表P(X_i|Pa_i), 对于每个潜在连接X_j->X_i都要考虑 % M-step: 寻找使似然最大的新拓扑关系g* logLikelihood = sum(computeLogLikelihood(currentGraph, data)); logLikelihoodHistory(end+1) = logLikelihood; if abs(logLikelihood - prevLogLikelihood) < tolerance * abs(prevLogLikelihood) break; end prevLogLikelihood = logLikelihood; end ``` 上述伪代码片段展示了如何通过循环逐步改进贝叶斯网路结构直到满足停止条件为止[^3]。需要注意的是实际应用时还需要补充许多细节工作比如处理缺失值、连续型属性转换成离散形式等问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值