wolffd@0: % Sigmoid Belief IOHMM wolffd@0: % Here is the model wolffd@0: % wolffd@0: % X \ X \ wolffd@0: % | | | | wolffd@0: % Q-|->Q-|-> ... wolffd@0: % | / | / wolffd@0: % Y Y wolffd@0: % wolffd@0: clear all; wolffd@0: clc; wolffd@0: rand('state',0); randn('state',0); wolffd@0: X = 1; Q = 2; Y = 3; wolffd@0: % intra time-slice graph wolffd@0: intra=zeros(3); wolffd@0: intra(X,[Q Y])=1; wolffd@0: intra(Q,Y)=1; wolffd@0: % inter time-slice graph wolffd@0: inter=zeros(3); wolffd@0: inter(Q,Q)=1; wolffd@0: wolffd@0: ns = [1 3 1]; wolffd@0: dnodes = [2]; wolffd@0: eclass1 = [1 2 3]; wolffd@0: eclass2 = [1 4 3]; wolffd@0: bnet = mk_dbn(intra, inter, ns, dnodes, eclass1, eclass2); wolffd@0: bnet.CPD{1} = root_CPD(bnet, 1); wolffd@0: % ========================================================== wolffd@0: bnet.CPD{2} = softmax_CPD(bnet, 2); wolffd@0: bnet.CPD{4} = softmax_CPD(bnet, 5, 'discrete', [2]); wolffd@0: % ========================================================== wolffd@0: bnet.CPD{3} = gaussian_CPD(bnet, 3); wolffd@0: wolffd@0: % make some data wolffd@0: T=20; wolffd@0: cases = cell(3, 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(rand(1,T)); wolffd@0: wolffd@0: engine = bk_inf_engine(bnet, 'exact', [1 2 3]); 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, 3);