0
我正尝试在Matlab中使用贝叶斯网络工具箱(BNT)创建动态贝叶斯网络。我一直在密切关注本教程,并用下面的代码结束:使用BNT学习动态贝叶斯网络的参数
T=2;
names = {'X1', 'X2', 'X3', 'X4', 'X5', 'X6', 'X7', 'X8', 'X9', 'X10', 'X11', 'X12'};
ss = length(names);
onodes=[1 2 3 4 5 6 7 8 9 10 11 12];
intrac = {
'X1', 'X2';
'X3', 'X4';
'X6', 'X7';
'X7', 'X8';
'X10', 'X11';
'X10', 'X12';
'X11', 'X12';
};
[intra, names] = mk_adj_mat(intrac, names, 1);
interc = {
'X1', 'X1';
'X2', 'X2';
'X3', 'X3';
'X4', 'X4';
'X5', 'X5';
'X6', 'X6';
'X7', 'X7';
'X8', 'X8';
'X9', 'X9';
'X10', 'X10';
'X11', 'X11';
'X12', 'X12';
};
inter = mk_adj_mat(interc, names, 0);
dnodes = 1:ss;
ns = [3 3 3 2 4 5 2 2 4 5 4 5];
ns(stringmatch('X1',names))=3;
ns(stringmatch('X2',names))=3;
ns(stringmatch('X3',names))=3;
ns(stringmatch('X4',names))=2;
ns(stringmatch('X5',names))=4;
ns(stringmatch('X6',names))=5;
ns(stringmatch('X7',names))=2;
ns(stringmatch('X8',names))=2;
ns(stringmatch('X9',names))=4;
ns(stringmatch('X10',names))=5;
ns(stringmatch('X11',names))=4;
ns(stringmatch('X12',names))=5;
bnet = mk_dbn(intra, inter, ns, 'discrete', dnodes);
for i=1:2*ss
bnet.CPD{i} = tabular_CPD(bnet, i);
end
allcases=importdata('Myfile.txt',',');
ncases = size(allcases.data,1);
cases = cell(1, ncases);
for i=1:ncases
cases{i} = cell(ss,T);
dataentry=allcases.data(i,:);
ev=uint8([dataentry(1:12)' dataentry(13:24)']);
cases{i} = num2cell(ev);
end
engine2 = smoother_engine(jtree_2TBN_inf_engine(bnet));
%engine2 = jtree_2TBN_inf_engine(bnet);
[bnt, LL, engine2] = learn_params_dbn_em(engine2, cases, 'max_iter', 20);
当我尝试运行它,以下错误显示出来:
Subscript indices must either be real positive integers or logicals.
Error in discrete_CPD/convert_to_table (line 14)
T = CPT(index{:});
Error in discrete_CPD/convert_to_pot (line 20)
T = convert_to_table(CPD, domain, evidence);
Error in jtree_2TBN_inf_engine/fwd1 (line 11)
CPDpot{n} = convert_to_pot(bnet.CPD{e}, engine.pot_type, fam(:), ev);
Error in smoother_engine/enter_evidence (line 12)
[f{1}, ll(1)] = fwd1(engine.tbn_engine, ev(:,1), 1);
Error in learn_params_dbn_em>EM_step (line 131)
[engine, ll] = enter_evidence(engine, evidence);
Error in learn_params_dbn_em (line 82)
[engine, loglik, logpost] = EM_step(engine, evidence, temperature);
有人可以帮我这个错误?我认为这与我创建表格CPD的方式有关,因为当我查看bnet中的CPD时,他们都是1 * 1表格。我的CPD的创建方式与教程相同。 提前谢谢!
更新:我刚才发现这个错误与表格CPD无关。 – 2015-04-02 19:48:25
更新#2:我对整个网络进行了采样,它使用采样数据很好地学习了参数。所以我认为我的问题在我的数据集中。现在看看它 – 2015-04-02 21:17:10