文档介绍:Matlab贝叶斯网络建模
1 FulIBNT 简介
基于Matlab的贝叶斯网络工具箱BNT是kevin matlab语言开发的关于贝叶斯网络学习的开源软件包,提供了许多贝 叶斯网络学习的底层基础函数库,支持多种 q = |B|.这可以按如上面方式创建:
tabular_CPD(bnetz i, 'prior_typp, 'dirichlef,'dirichlet_type‘,…
'BDeu', 'dirichlet_weight'z 10);
这里1是等效样本大小,也是先验概率的强度。你可以使用上 面面方式更改它,
3结构学习
问题:以下两模型结构评分是否相等?
表3-1算法概要
贝叶斯模型选择算法
L建立模型A->B,生成样本数据
2建立所有可能的结构:(1)AB,(2)B<-A,(3)A->B并计算先验概率
2 和模型 3 为 Maikov equivalent
4 B 节点使用 noisy Not gate
5•正确的模型在12次后收敛
代码示例
%贝叶斯选择模型示例.
%建立模型A->B ,生成样本数据
%建立所有可能的结构:(1)A B, (2)B<-A, (3) A->B并计算先验瞻
%模型2和模型3为Markov equivalent
% B节点使用noisy Not gate
%正确的模型在12次后收敛
% ground truth
N = 2;
dag = zeros(N);
A = 1; B = 2;
dag(AB) = 1;
ntrials = 25;
ns = 2*ones(lzN);
true_bnet = mk_bnet(dagz ns);
{l} = tabular_CPD(true_bnetz lz [ ]);
pfail = ;
psucc = 1-pfail;
{2} = tabular_CPD(true_bnetz 2Z [pfail psucc; psucc pfail]);
% NOT gate
G = mk_all_dags(N);
nhyp = length (G);
hyp_bnet = cell(lz nhyp);
for h=l:nhyp
hyp_bnet{h} = mk_bnet(G{h}, ns);
for i=l:N
fam = family(G{h}, i);
hyp_bnet(h).CPD(i) = tabular_CPD(hyp_bnet{h}, i, prior_type', 'dirichlet',… 'CPT/unif);
end
end
%结构先验,假设为均匀分布
prior = normalise(ones(lz nhyp));
%保胰果并初始化训练结构
init_hyp_bnet = hyp_bnet;
init_prior = prior;
rand( state\ 0);
hyp_w = zeros(ntrials+l, nhyp);
hyp_w(l/) = prior(:)';
data = zeros(N, ntrials);
%逐步计算后验瞻
LL = zeros(l, nhyp);
II = zeros(lz nhyp);
for t=l:ntrials
ev = cell2num(sample_bnet(true_bnet));
data (:,t) = ev;
for i=l:nhyp
ll(i) = log_marg_lik_comp lete(hyp_bnet{i}z ev);
hyp_bnet{i} = bayes_update_params(hyp_bnet{i}, ev);
end
prior = normalise(prior * exp(ll));
LL = LL + II;
hyp_w(t+l,:) = prior;
end
% Plot,模型后验概率
% Red = model 1 (no arcs), blue/green = models 2/3 (1 arc)
% Blue = model 2 (2- >1)
% Green = model 3 (1->2Z "ground truth,f)
ifl
figure;
m = size(hyp_w, 1);
h=plot(l:mz hyp_w(:,l), 'r-', l:m, hyp_w(:,2), l:m, hyp_w(:,3), 'g:');
axis([0 m 01])
titleC*model