草地湿模型详解


前言

贝叶斯网络又称信度网络,是Bayes方法的扩展,是目前不确定知识表达和推理领域最有效的理论模型之一。从1988年由Pearl提出后,已经成为近几年来研究的热点.。一个贝叶斯网络是一个有向无环图(Directed Acyclic Graph,DAG),由代表变量节点及连接这些节点有向边构成。节点代表随机变量,节点间的有向边代表了节点间的互相关系(由父节点指向其子节点),用条件概率进行表达关系强度,没有父节点的用先验概率进行信息表达。节点变量可以是任何问题的抽象,如:测试值,观测现象,意见征询等。适用于表达和分析不确定性和概率性的事件,应用于有条件地依赖多种控制因素的决策,可以从不完全、不精确或不确定的知识或信息中做出推理。
本文是对草地湿模型进行研究。

一、草地湿模型

在这里插入图片描述

贝叶斯结构图:
在这里插入图片描述

二、BNT参数学习(MATLAB)

代码如下(示例):

#模型设置#

N=4;
dag=zeros(N,N);
C=1;S=2;R=3;W=4;
dag(C,[R S])=1;
dag(R,W)=1;
dag(S,W)=1;

#生成多项式条件概率#

false = 1; true = 2;
ns = 2*ones(1,N); % binary nodes 节点状态数
figure
draw_graph(dag);
bnet = mk_bnet(dag, ns);
bnet.CPD{
    
    C} = tabular_CPD(bnet, C, [0.5 0.5]);
bnet.CPD{
    
    R} = tabular_CPD(bnet, R, [0.8 0.2 0.2 0.8]);
bnet.CPD{
    
    S} = tabular_CPD(bnet, S, [0.5 0.9 0.5 0.1]);
bnet.CPD{
    
    W} = tabular_CPD(bnet, W, [1 0.1 0.1 0.01 0 0.9 0.9 0.99]);

bnet.CPD{
    
    W}

CPT = cell(1,N);
for i=1:N
  s=struct(bnet.CPD{
    
    i});  % 创建或转换为结构数组。
  CPT{
    
    i}=s.CPT;
end

#构造样本数据#

nsamples =5000;
samples = cell(N, nsamples); %创建单元格数组

for i=1:nsamples
  samples(:,i) = sample_bnet(bnet); %SAMPLE_BNET从贝叶斯网络生成随机样本。
end
data = cell2num(samples); %CELL2NUM将2D单元格数组转换为2D数字数组

#建立贝叶斯网络#

bnet2 = mk_bnet(dag, ns);  

#手动构造条件概率表cpt#

bnet2.CPD{
    
    C} = tabular_CPD(bnet2, C, 'clamped', 1, 'CPT', [0.5 0.5], ...
			   'prior_type', 'dirichlet', 'dirichlet_weight', 0);
bnet2.CPD{
    
    R} = tabular_CPD(bnet2, R, 'prior_type', 'dirichlet', 'dirichlet_weight', 0);
bnet2.CPD{
    
    S} = tabular_CPD(bnet2, S, 'prior_type', 'dirichlet', 'dirichlet_weight', 0);
bnet2.CPD{
    
    W} = tabular_CPD(bnet2, W, 'prior_type', 'dirichlet', 'dirichlet_weight', 0); % tabular_CPD生成多项式条件概率

#显示估计的参数#

Parameter_MLE=bnet2;
CPT_MLE=cell(1,N);
for i=1:N
    s=struct(Parameter_MLE.CPD{
    
    i});
    CPT_MLE{
    
    i}=s.CPT;
end

Parameter_MLE_W = CPT_MLE{
    
    4};

#从完全观察到的数据中查找MLE#
#先验0的贝叶斯更新等效于ML估计#

% Find MLEs from fully observed data 从完全观察到的数据中查找MLE
bnet4 = learn_params(bnet2, samples); %LEARN_PARAMS查找完全观察的模型的最大似然参数

% Bayesian updating with 0 prior is equivalent to ML estimation 先验0的贝叶斯更新等效于ML估计
bnet5 = bayes_update_params(bnet2, samples);  %给定完全观察到的数据,BAYES_UPDATE_PARAMS贝叶斯参数更新

#显示学习参数结果#

% MLE
CPT4 = cell(1,N);
for i=1:N
  s=struct(bnet4.CPD{
    
    i});  % violate object privacy
  CPT4{
    
    i}=s.CPT ;
end
CPT4{
    
    4}

% Bayesian
CPT5 = cell(1,N);
for i=1:N
  s=struct(bnet5.CPD{
    
    i});  % violate object privacy
  CPT5{
    
    i}=s.CPT ;
  assert(approxeq(CPT5{
    
    i}, CPT4{
    
    i}));
end
CPT5{
    
    4}

三、耗时统计

T=cputime;

E=cputime-T;
disp(E)


结果

在这里插入图片描述
在这里插入图片描述

由上表数据可以观察到,MLE与Bayesian学习到的条件概率基本一致;并且随着学习数据量的增加,学习到的条件概率表越来越逼近于Ground truth的条件概率表。

猜你喜欢

转载自blog.csdn.net/qq_37423357/article/details/109120964