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