⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cmp_learning_dbn.m

📁 贝叶斯算法(matlab编写) 安装,添加目录 /home/ai2/murphyk/matlab/FullBNT
💻 M
字号:
function [time, CPD, LL, cases] = cmp_learning_dbn(bnet, engine, T, varargin)% CMP_LEARNING_DBN Compare a bunch of inference engines by learning a DBN% function [time, CPD, LL, cases] = cmp_learning_dbn(bnet, engine, exact, T, ncases, max_iter)%% engine{i} is the i'th inference engine.% time(e) = elapsed time for doing inference with engine e% CPD{e,c} is the learned CPD for eclass c in engine e% LL{e} is the learning curve for engine e% cases{i} is the i'th training case%% The list below gives optional arguments [default value in brackets].%% exact - specifies which engines do exact inference [ 1:length(engine) ]% check_ll - 1 means we check that the log-likelihoods are correct [1]% ncases - num. random training cases [2]% max_iter - max. num EM iterations [2]% set default paramsexact = 1:length(engine);check_ll = 1;ncases = 2;max_iter = 2;args = varargin;nargs = length(args);for i=1:2:nargs  switch args{i},   case 'exact', exact = args{i+1};   case 'check_ll', check_ll = args{i+1};   case 'ncases', ncases = args{i+1};   case 'max_iter', max_iter = args{i+1};   otherwise,    error(['unrecognized argument ' args{i}])  endendE = length(engine);ss = length(bnet.intra);onodes = bnet.observed;cases = cell(1, ncases);for i=1:ncases  ev = sample_dbn(bnet, 'length', T);  cases{i} = cell(ss,T);  cases{i}(onodes,:) = ev(onodes, :);endLL = cell(1,E);time = zeros(1,E);for i=1:E  tic  [bnet2{i}, LL{i}] = learn_params_dbn_em(engine{i}, cases, 'max_iter', max_iter);  time(i) = toc;  fprintf('engine %d took %6.4f seconds\n', i, time(i));endref = exact(1); % referencecmp = mysetdiff(exact, ref);if check_ll  for i=cmp(:)'    if ~approxeq(LL{ref}, LL{i})      error(['engine ' num2str(i) ' has wrong ll'])    end  endendnCPDs = length(bnet.CPD);CPD = cell(E, nCPDs);tabular = zeros(1, nCPDs);for i=1:E  temp = bnet2{i};  for c=1:nCPDs    tabular(c) = isa(temp.CPD{c}, 'tabular_CPD');    CPD{i,c} = struct(temp.CPD{c});  endendfor i=cmp(:)'  for c=1:nCPDs    if tabular(c)      assert(approxeq(CPD{i,c}.CPT, CPD{ref,c}.CPT));    else      assert(approxeq(CPD{i,c}.mean, CPD{ref,c}.mean));      assert(approxeq(CPD{i,c}.cov, CPD{ref,c}.cov));      assert(approxeq(CPD{i,c}.weights, CPD{ref,c}.weights));    end  endend

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -