wolffd@0: % Sigmoid Belief Hierarchical Mixtures of Experts wolffd@0: wolffd@0: clear all wolffd@0: clc wolffd@0: X = 1; wolffd@0: Q1 = 2; wolffd@0: Q2 = 3; wolffd@0: Y = 4; wolffd@0: dag = zeros(4,4); wolffd@0: dag(X,[Q1 Q2 Y]) = 1; wolffd@0: dag(Q1, [Q2 Y]) = 1; wolffd@0: dag(Q2,Y)=1; wolffd@0: ns = [1 3 4 3]; wolffd@0: dnodes = [2 3 4]; wolffd@0: onodes=[1 2 3 4]; wolffd@0: bnet = mk_bnet(dag,ns, dnodes); wolffd@0: wolffd@0: rand('state',0); randn('state',0); wolffd@0: wolffd@0: bnet.CPD{1} = root_CPD(bnet, 1); wolffd@0: bnet.CPD{2} = softmax_CPD(bnet, 2, 'max_iter', 3); wolffd@0: bnet.CPD{3} = softmax_CPD(bnet, 3, 'discrete', [2], 'max_iter', 3); wolffd@0: bnet.CPD{4} = softmax_CPD(bnet, 4, 'discrete', [2 3], 'max_iter', 3); wolffd@0: wolffd@0: T=5; wolffd@0: cases = cell(4, T); wolffd@0: cases(1,:)=num2cell(rand(1,T)); wolffd@0: %cases(2,:)=num2cell(round(rand(1,T)*2)+1); wolffd@0: %cases(3,:)=num2cell(round(rand(1,T)*3)+1); wolffd@0: cases(4,:)=num2cell(round(rand(1,T)*2)+1); wolffd@0: wolffd@0: engine = jtree_inf_engine(bnet, onodes); wolffd@0: wolffd@0: [engine, loglik] = enter_evidence(engine, cases); wolffd@0: wolffd@0: disp('learning-------------------------------------------') wolffd@0: [bnet2, LL2] = learn_params_em(engine, cases, 4);