2011-11-16 170 views
2

我是新來學習Bayes Net Toolbox for MATLAB,我已經試過這樣:貝葉斯網絡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; 

discrete_nodes = 1:N; 
node_sizes = [ 4 2 3 5]; 

onodes = []; 
bNet = mk_bnet(dag, node_sizes, 'discrete', discrete_nodes, 'observed', onodes ); 

bNet.CPD{C} = tabular_CPD(bNet, C, 'CPT', [0.5 0.5]); 
bNet.CPD{R} = tabular_CPD(bNet, R, 'CPT', [0.8 0.2 0.2 0.8 ]); 
bNet.CPD{S} = tabular_CPD(bNet, S, 'CPT', [0.5 0.9 0.5 0.1]); 
bNet.CPD{W} = tabular_CPD(bNet, W, 'CPT', [1 0.1 0.1 0.01 0 0.9 0.9 0.99 ]); 

engine = jtree_inf_engine(bNet); 

evidence = cell(1,N); 
evidence{W} = 2; 

[engine, loglik] = enter_evidence(engine, evidence); 

marg = marginal_nodes(engine, S); 
marg.T 
p = marg.T(2) 

但它不工作,它打印:

??? Error using ==> reshape 

要重塑,元素的數量不能改變。

Error in ==> myreshape at 10 
    T = reshape(T, sizes(:)'); 

Error in ==> tabular_CPD.tabular_CPD at 90 
     CPD.CPT = myreshape(T, fam_sz); 

Error in ==> bnet at 19 
bNet.CPD{R} = tabular_CPD(bNet, R, 'CPT', [0.8 0.2 0.2 0.8 ]); 

回答

1

我在一個錯誤:

node_sizes = [ 4 2 3 5]; 

它應該是:

node_sizes = 2*ones(1,N);