我建立了一个简单的动态贝叶斯模型,一共有11个参数,训练数据也已经随机给出。在查看了BNT工具箱后发现动态推断函数只能用hmm才能求出最大可能解释。但是在调用这个推断引擎的时候总是出错。下面是我的原函数。`

ss=11;
intra = zeros(11);
intra(1,11) = 1;
intra(2,11) = 1;
intra(3,11) = 1;
intra(4,11) = 1;
intra(5,11) = 1;
intra(6,11) = 1;
intra(7,11) = 1;
intra(8,11) = 1;
intra(9,11) = 1;
intra(10,11) = 1;
inter = zeros(11);
inter(1,1) = 1;
inter(2,1) = 1;
inter(4,4) = 1;
inter(6,6) = 1;
inter(9,9) = 1;%inter(12,1) = 1;
%inter(13,1) = 1;
%inter(15,4) = 1;
%inter(17,6) = 1;
%inter(20,9) = 1;ns=[3 3 3 3 3 2 2 2 3 3 3];
bnet = mk_dbn(intra, inter, ns,'discrete', [], 'observed', 11);
for i=1:22bnet.CPD{i} = tabular_CPD(bnet, i);end
data=[1 3 2 3;2 2 3 2;2 1 3 3;3 2 3 1;3 3 3 1;2 1 2 1;2 2 2 1;1 1 2 2;1 2 1 3;2 3 1 2;2 3 2 1];
%data(2)=[3 2 3 1;2 3 2 2;3 3 1 2;1 3 2 3;1 3 3 3;1 2 1 2;1 2 2 2;2 2 1 1;3 1 2 1;2 1 3 2;1 2 3 2];
%data(3)=[1 3;2 2;2 1;3 2;3 3;2 1;2 2;1 1;1 2;2 3;2 3];
%data(4)=[1;2 ;2 ;3 ;3 ;2; 2; 2;1 ;2 ;1];
bnet = learn_params_dbn(bnet, data);ev = sample_dbn(bnet, T);
evidence = cell(ss,T);
onodes=[1;1;2;2;5;1;7;1;2;2;2];
evidence(onodes,:) = ev(onodes, :); % all cells besides onodes are empty
engine = hmm_inf_engine(bnet,varargin);
[engine, ll] = enter_evidence(engine, evidence);
mpe = find_mpe(engine, evidence)

但是调用hmm_inf_engine时其中的一个 varargin 参数我不知道该怎么取。(原函数调用)我也知道varargin是可以让函数调用的时候输入多个参数。但是推断引擎除了一个bnt还需要什么参数辅助推断我实在想不出来。
输入标量显示无效参数,但总不能输入字符串吧?(输入0,1都不行)
以下是推断引擎的源代码:

function engine = hmm_inf_engine(bnet, varargin)
% HMM_INF_ENGINE Inference engine for DBNs which uses the forwards-backwards algorithm.
% engine = hmm_inf_engine(bnet, ...)
%
% The following optional arguments can be specified in the form of name/value pairs:
% [default value in brackets]
%
% maximize - 1 means max-product, 0 means sum-product [0]
%
% The DBN is converted to an HMM with a single meganode, but the observed nodes remain factored.
% This can be faster than jtree if the num. hidden nodes is low, because of lower constant factors.
%
% All hidden nodes must be discrete.
% All observed nodes are assumed to be leaves, i.e., they cannot be parents of anything.
% The parents of each observed leaf are assumed to be a subset of the hidden nodes within the same slice.
% The only exception is if bnet is an AR-HMM, where the parents are assumed to be self in the
% previous slice (continuous), plus all the discrete nodes in the current slice.ss = bnet.nnodes_per_slice;engine.maximize = 0;%parse optional params  解析可选参数
args = varargin;
nargs = length(args);
if nargs>0for i=1:2:nargsswitch args{i},case 'maximize', engine.maximize = args{i+1};otherwise,  error(['invalid argument name ' args{i}]);       endend
end% Stuff to do with speeding up marginal_family
[int, engine.persist, engine.transient] = compute_interface_nodes(bnet.intra, bnet.inter);
engine.persist_bitv = zeros(1, ss);
engine.persist_bitv(engine.persist) = 1;ns = bnet.node_sizes(:);
ns(bnet.observed) = 1;
ns(bnet.observed+ss) = 1;
engine.eff_node_sizes = ns;for o=bnet.observed(:)'%if bnet.equiv_class(o,1) ~= bnet.equiv_class(o,2)%  error(['observed node ' num2str(o) ' is not tied'])%endcs = children(bnet.dag, o);if ~isempty(cs)error(['observed node ' num2str(o) ' is not allowed children'])end
end[engine.startprob, engine.transprob, engine.obsprob] = dbn_to_hmm(bnet);% This is where we will store the results between enter_evidence and marginal_nodes
engine.one_slice_marginal = [];
engine.two_slice_marginal = [];ss = length(bnet.intra);
engine.evidence = [];
engine.node_sizes = [];% avoid the need to do bnet_from_engine, which is slow
engine.slice_size = ss;
engine.parents = bnet.parents;engine = class(engine, 'hmm_inf_engine', inf_engine(bnet));

希望有大牛能帮帮我,我真的看的头都大了也找不出问题来。
先谢谢大家了。

动态贝叶斯网络推断函数的调用相关推荐

  1. 动态贝叶斯网络中TBN与DBN的区别

    Temporal Bayesian Network (TBN):  the model structure does not change over time slices,  i.e., the m ...

  2. 贝叶斯分类器与贝叶斯网络

    原文地址:贝叶斯分类器与贝叶斯网络作者:yfx416 贝叶斯分类器是一种基于贝叶斯公式的分类器,是一种基于统计的分类器,它计算在某一特征向量的前提下,各种分类可能出现的概率.把概率最大的那个类当作最终 ...

  3. 机器学习数据挖掘笔记_18(PGM练习二:贝叶斯网络在遗传图谱在的应用)

    前言: 这是coursera课程:Probabilistic Graphical Models 上的第二个实验,主要是用贝叶斯网络对基因遗传问题进行一些计算.具体实验内容可参考实验指导教材:bayes ...

  4. 贝叶斯网络推理算法简单罗列

    题目:贝叶斯网络推理算法简单罗列 上一篇<贝叶斯网络与最大可能解释(MPE)问题>理清了最大可能解释(Most Probable Explanation, MPE)的概念,接下来准备在MA ...

  5. R语言︱贝叶斯网络语言实现及与朴素贝叶斯区别(笔记)

    每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 一.贝叶斯网络与朴素贝叶斯的区别 朴素贝叶斯的 ...

  6. 西瓜书+实战+吴恩达机器学习(二一)概率图模型之贝叶斯网络

    文章目录 0. 前言 1. 贝叶斯网络结构 2. 近似推断 2.1. 吉布斯采样 3. 隐马尔可夫模型HMM 如果这篇文章对你有一点小小的帮助,请给个关注,点个赞喔,我会非常开心的~ 0. 前言 概率 ...

  7. 一起自学SLAM算法:7.4 基于贝叶斯网络的状态估计

    连载文章,长期更新,欢迎关注: 写在前面 第1章-ROS入门必备知识 第2章-C++编程范式 第3章-OpenCV图像处理 第4章-机器人传感器 第5章-机器人主机 第6章-机器人底盘 第7章-SLA ...

  8. 贝叶斯网络(Bayesian Network)

    贝叶斯网络 贝叶斯网络(Bayesian Networks)也被称为信念网络(Belif Networks)或者因果网络(Causal Networks),是描述数据变量之间依赖关系的一种图形模式,是 ...

  9. 在Python中使用贝叶斯网络的实例

    我们在之前的文章中(请见文末给出的参考资料[1])已经介绍了贝叶斯网络的基本原理,以及基于贝叶斯网络进行概率推断(Exact Inference)的消去法.本文将结合一个具体的例子来演示在Python ...

  10. 机器学习-白板推导-系列(九)笔记:概率图模型: 贝叶斯网络/马尔可夫随机场/推断/道德图/因子图

    文章目录 0 笔记说明 1 背景介绍 1.1 概率公式 1.2 概率图简介 1.2.1 表示 1.2.2 推断 1.2.3 学习 1.2.4 决策 1.3 图 2 贝叶斯网络 2.1 条件独立性 2. ...

最新文章

  1. KVM为虚拟机添加设备总结
  2. php csrf攻击 xss区别,用大白话谈谈XSS与CSRF
  3. mysql myisam 去掉表锁a_MyISAM表锁的解决方案
  4. php 中 date转换为字符串,PHP 时间与字符串的相互转化
  5. 这是自己的第一篇博客
  6. Python入门你要懂哪些?这篇文章总算讲清楚了
  7. 快速搭建centos7
  8. 1键将 Python2 代码自动转化为 Python3
  9. 2013总结和2014展望
  10. 检定证书、校准证书与测试证书的区别
  11. 磁珠的原理与应用注意事项
  12. 设计灵感|App登录注册页面设计方式
  13. 五、网络编程实例:聊天室
  14. 电影评论分类:二分类问题(IMDB数据集)
  15. 星际争霸II对抗 PYSC2平台 深度强化学习 学习笔记(一)- 环境搭建
  16. 一句话题解(20170801~20170125)
  17. 255计算机网络,计算机网络复习题1.子网掩码为:255.255.255.一网络的为255.255.255.248,问该网络能够连接多少个...
  18. c语言变量名拼音,C语言的32个关键字(读音、用法、注释)转来的,给刚接触C的...
  19. 计算机表格中如何计算数据透视表,如何在EXCEL数据透视表中进行计算 |
  20. 洛谷 P2327 [SCOI2005] 扫雷

热门文章

  1. win7计算机打开显卡设置在哪里,Win7系统nvidia控制面板在哪里?Win7系统nvidia控制面板设置方法...
  2. Excel在spring cloud项目中乱码
  3. linux ubuntukylin和deepin操作系统的比较及改进方向的建议
  4. MTP管理才能发展专家
  5. cplex java_cplex-Java-样例代码解析
  6. 大数据Hadoop之——Hadoop图形化管理系统Hue(Hue环境部署)
  7. 种子文件转成为磁力链接 下载BT磁力转换小工具
  8. 三菱5uplc伺服电机指令_PLC中伺服控制指令的应用
  9. 纯JavaScript实现鼠标拖尾效果
  10. MySQL数据库入门学习 #CSDN博文精选# #IT技术# #数据库# #MySQL#