CoreJava Eclipse插件 二叉树排序 gitee csv tinymce vue样式 bootstrap后台模版 在线考试系统代码 erp项目描述 mysql安装后怎么使用 string转16进制 idea开发python python模块 python操作mongodb python运算 安装python教程 python写文件 python如何调用函数 python正则替换 python安装程序 javapackage java中的正则表达式 java开发学习 java基础代码 java判断语句 java文件删除 linux系统简介 flash实例 java小程序 雪地求生 亚索刀光特效包 路由器有没有辐射 bz2解压命令 u盘系统下载 iar下载 VSPD cad视口旋转 电脑书籍下载 免费图片文字识别软件
当前位置: 首页 > 学习教程  > 编程语言

草地湿模型详解

2020/10/16 18:28:27 文章标签:

草地湿模型详解前言一、草地湿模型二、BNT参数学习(MATLAB)三、耗时统计结果前言 贝叶斯网络又称信度网络,是Bayes方法的扩展,是目前不确定知识表达和推理领域最有效的理论模型之一。从1988年由Pearl提出后,已经成为近几年来研究的热点.。一…

草地湿模型详解

  • 前言
  • 一、草地湿模型
  • 二、BNT参数学习(MATLAB)
  • 三、耗时统计
  • 结果


前言

贝叶斯网络又称信度网络,是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的条件概率表。


本文链接: http://www.dtmao.cc/news_show_300437.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?