wolffd@0: % Sigmoid Belief Hidden Markov Decision Tree (Jordan/Gharhamani 1996) wolffd@0: % wolffd@0: clear all; wolffd@0: %clc; wolffd@0: rand('state',0); randn('state',0); wolffd@0: X = 1; Q1 = 2; Q2 = 3; Y = 4; wolffd@0: % intra time-slice graph wolffd@0: intra=zeros(4); wolffd@0: intra(X,[Q1 Q2 Y])=1; wolffd@0: intra(Q1,[Q2 Y])=1; wolffd@0: intra(Q2, Y)=1; wolffd@0: % inter time-slice graph wolffd@0: inter=zeros(4); wolffd@0: inter(Q1,Q1)=1; wolffd@0: inter(Q2,Q2)=1; wolffd@0: wolffd@0: ns = [1 2 3 1]; wolffd@0: dnodes = [2 3]; wolffd@0: eclass1 = [1 2 3 4]; wolffd@0: eclass2 = [1 5 6 4]; wolffd@0: bnet = mk_dbn(intra, inter, ns, dnodes, eclass1, eclass2); wolffd@0: wolffd@0: bnet.CPD{1} = root_CPD(bnet, 1); wolffd@0: % ========================================= wolffd@0: bnet.CPD{2} = softmax_CPD(bnet, 2); wolffd@0: bnet.CPD{3} = softmax_CPD(bnet, 3, 'discrete', [2]); wolffd@0: bnet.CPD{5} = softmax_CPD(bnet, 6); wolffd@0: bnet.CPD{6} = softmax_CPD(bnet, 7, 'discrete', [3 6]); wolffd@0: % ========================================= wolffd@0: bnet.CPD{4} = gaussian_CPD(bnet, 4); wolffd@0: wolffd@0: % make some data wolffd@0: T=20; wolffd@0: cases = cell(4, T); wolffd@0: cases(1,:)=num2cell(round(rand(1,T)*2)+1); wolffd@0: %cases(2,:)=num2cell(round(rand(1,T))+1); wolffd@0: %cases(3,:)=num2cell(round(rand(1,T)*2)+1); wolffd@0: cases(4,:)=num2cell(rand(1,T)); wolffd@0: wolffd@0: engine = bk_inf_engine(bnet, 'exact', [1 2 3 4]); wolffd@0: wolffd@0: % log lik before learning wolffd@0: [engine, loglik] = enter_evidence(engine, cases); wolffd@0: wolffd@0: % do learning wolffd@0: ev=cell(1,1); wolffd@0: ev{1}=cases; wolffd@0: [bnet2, LL2] = learn_params_dbn_em(engine, ev, 10);