《量化投资:以MATLAB为工具》

MATLAB技术论坛

 找回密码
 注册账号
查看: 602|回复: 1
收起左侧

[提问] matlab贝叶斯网络工具箱使用问题

[复制链接]
发表于 2017-7-15 20:32:57 | 显示全部楼层 |阅读模式
load car.mat % six features(buying 4,maint 4,doors 4,persons 3,lug_boot 3,safety 3); four class;
data=[car.buying;car.maint;car.doors;car.persons;car.lug_boot;car.safety;car.class];
data_train=data;
data_test=data;
N=7;
b=1;m=2;d=3;p=4;l=5;s=6;c=7;
nodes_size=[4 4 4 3 3 3 4];
order=[1,2,3,4,5,6,7];
%learning struct
dag_learn=learn_struct_K2(data_train,nodes_size,order);
bnet2=mk_bnet(dag_learn,nodes_size);
%learning parameters
priors=1;
for i=1:N
bnet2.CPD{i}=tabular_CPD(bnet2, i, 'CPT', 'unif', 'prior_type','dirichlet','dirichlet_type', 'BDeu','dirichlet_weight', priors);
end
bnet4=bayes_update_params(bnet2, data_train);
engine=jtree_inf_engine(bnet4);
pag_index=zeros(size(data_test,2),1);
%%
% validatioin
for i=1:size(data_test,2)
    engine=jtree_inf_engine(bnet4);
    evidence=cell(1:N);
   disp((data_test((1:6),i))')
    evidence(1:6)=num2cell(data_test(1:6,i));
    engine=enter_evidence(engine,evidence);
    marg=marginal_nodes(engine,c);
    Index=find(max(marg.T));
    pag_index(i)=Index;
end

问题是运行出错,提示如下:
索引超出矩阵维度。

出错 discrete_CPD/convert_to_table (line 14)
T = CPT(index{:});

出错 discrete_CPD/convert_to_pot (line 20)
   T = convert_to_table(CPD, domain, evidence);

出错 jtree_inf_engine/enter_evidence (line 57)
      pot{n} = convert_to_pot(bnet.CPD{e}, pot_type, fam(:), evidence);

出错 fisrtbayesiannet_kdn (line 94)
    engine=enter_evidence(engine,evidence);

然后disp((data_test((1:6),i))'),显示出来的最后一行为 4 4 2 4 1 1,单独拿这个实例运行,同样的错误,也就是说这个实例有问题?数据已上传,求解答!

car.zip

757 Bytes, 下载次数: 4, 下载积分: 贝壳 -1

发表于 2017-7-16 12:02:28 | 显示全部楼层
您这是做预测?必须要用贝叶斯?其他代码行不,我是卖代码的,qq 291544305
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

QQ|网站地图|MATLAB技术论坛|Simulink仿真论坛 ( 蜀ICP备19014457号 

GMT+8, 2020-4-2 23:14 , Processed in 0.068732 second(s), 14 queries , Gzip On, MemCached On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表