wolffd@0: seed = 1; wolffd@0: rand('state', seed); wolffd@0: randn('state', seed); wolffd@0: wolffd@0: obs_model = 'unique'; % each cell has a unique label (essentially fully observable) wolffd@0: %obs_model = 'four'; % each cell generates 4 observations, NESW wolffd@0: wolffd@0: % Generate the true network, and a randomization of it wolffd@0: realnet = mk_map_hhmm('p', 0.9, 'obs_model', obs_model); wolffd@0: rndnet = mk_rnd_map_hhmm('obs_model', obs_model); wolffd@0: eclass = realnet.equiv_class; wolffd@0: U = 1; A = 2; C = 3; F = 4; onodes = 5; wolffd@0: wolffd@0: ss = realnet.nnodes_per_slice; wolffd@0: T = 100; wolffd@0: evidence = sample_dbn(realnet, 'length', T); wolffd@0: ev = cell(ss,T); wolffd@0: ev(onodes,:) = evidence(onodes,:); wolffd@0: wolffd@0: infeng = jtree_dbn_inf_engine(rndnet); wolffd@0: wolffd@0: if 0 wolffd@0: % suppose we do not observe the final finish node, but only know wolffd@0: % it is more likely to be on that off wolffd@0: ev2 = ev; wolffd@0: infeng = enter_evidence(infeng, ev2, 'soft_evidence_nodes', [F T], 'soft_evidence', {[0.3 0.7]'}); wolffd@0: end wolffd@0: wolffd@0: wolffd@0: learnednet = learn_params_dbn_em(infeng, {evidence}, 'max_iter', 5); wolffd@0: wolffd@0: disp('real model') wolffd@0: disp_map_hhmm(realnet) wolffd@0: wolffd@0: disp('learned model') wolffd@0: disp_map_hhmm(learnednet) wolffd@0: wolffd@0: disp('rnd model') wolffd@0: disp_map_hhmm(rndnet) wolffd@0: