MATLAB 索引超出矩阵维度
clear all;
clc;
N = 14;
A=1;B2=2;B3=3;B4=4;B5=5;B6=6;B7=7;B8=8;B9=9;B10=10;B11=11;B12=12;B13=13;B14=14;
ns = [3 4 4 4 4 4 4 4 4 4 4 4 4 4];
order=[5 2 3 4 1 6 7 8 9 10 11 12 13 14 ];
max_fan_in=2;
result_matrix = zeros(ns(A),ns(A));
date=xlsread('wine2.xls');
[m,n]=size(date);
Traina=[];
Testa=date;
tol=0;
for i=1:100
first=floor(m*unifrnd(0,1))+1;
Traina=[Traina;Testa(first,:)];
Testa(first,:)=[];
m=m-1;
end
Train=Traina';
Test=Testa';
Test_sample=Test(2:14,1:end);
Test_label=Test(1,:);
evidence=Train;
% [u v]=size(Train);
% Train1=zeros(u,v);
dag = zeros(N,N);
%对生成的结构进行参数学习
dag = learn_struct_K2(Train, ns,order,'max_fan_in',max_fan_in);
bnet = mk_bnet(dag, ns);
%draw_graph(bnet.dag);
% priors=1;
% seed = 0;
% rand('state', seed);
%初始化条件概率分布
for i=1:N
%bnet.CPD{i} = tabular_CPD(bnet, i,'CPT','unif','prior_type','dirichlet','dirichlet_type','BDeu','dirichlet_weight',priors);
bnet.CPD{i} = tabular_CPD(bnet, i);
end
bnet2 = learn_params(bnet, evidence); %查找最大似然估计的参数
%bnet2=bayes_update_params(bnet,evidence); %贝叶斯方法
engine = jtree_inf_engine(bnet2);
%engine = global_joint_inf_engine(bnet2);
ev = cell(1,N);
m=length(Test_label);
Test_eg=cell(1,m);
j =0;
p=[];
mA.T=[];
Err_ind=[];
for i=1:m
Test_eg{1,i}=Test_sample(:,i);
ev{B2} = Test_eg{1,i}(1,1);
ev{B3} = Test_eg{1,i}(2,1);
ev{B4} = Test_eg{1,i}(3,1);
ev{B5} = Test_eg{1,i}(4,1);
ev{B6} = Test_eg{1,i}(5,1);
ev{B7} = Test_eg{1,i}(6,1);
ev{B8} = Test_eg{1,i}(7,1);
ev{B9} = Test_eg{1,i}(8,1);
ev{B10} = Test_eg{1,i}(9,1);
ev{B11} = Test_eg{1,i}(10,1);
ev{B12} = Test_eg{1,i}(11,1);
ev{B13} = Test_eg{1,i}(12,1);
ev{B14} = Test_eg{1,i}(13,1);
engine2 = enter_evidence(engine, ev); %输入推理证据
mA= marginal_nodes(engine2, A); %求解后验概率
if mA.T(1)==max(mA.T)
predict=1;
elseif mA.T(2)==max(mA.T)
predict=2;
else
predict=3;
end
p(i,:)=mA.T'
if predict-Test_label(1,i)==0
j=j+1;
end
end
accuracy(q)=j/m
索引超出矩阵维度。
出错 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);
出错 Untitled9 (line 215)
engine2 = enter_evidence(engine, ev); %输入推理证据