这是交易。因此,我按照 BNT 手册中的说明创建了一个 BN,是洒水器,但我为冬季和夏季添加了一个节点类。像这样:
多云的 - - - / \ | 洒水雨 | \ / | | 湿课
上课只取决于是阴天还是下雨。具有与http://bnt.googlecode.com/svn/trunk/docs/usage.html#basics相同的规范
并且类也是二进制的,表是:
CR 等级概率 --------------- 1 1 1 0 2 1 1 0.4 1 2 1 0.4 2 2 1 0.9 等等
所以我使用 var_elimination_eng 的问题是因为由于某种原因 jtree 不起作用,我在输入下雨的证据后得到了 marg.T:
ans =
0.800000000000000
0.200000000000000
这个对吗?我实施得好吗?还是我错过了什么?谢谢。
相同的假设 1=false=冬天,2=true=夏天
编辑:
所以是的,类节点的 CPT 是 8 个条目
CR 等级概率 --------------- 1 1 1 0 2 1 1 0.4 1 2 1 0.4 2 2 1 0.9 1 1 2 1 2 1 2 0.6 1 2 2 0.6 2 2 2 0.6 2 2 2 0.1
这些是 1 - 相反。代码是:
N = 5
dag = zeros(N,N)
C = 1; S = 2; R = 3; W = 4; Class = 5
dag(C, [S R]) = 1
dag( R, W) = 1
dag(S, W) = 1
dag(C, Class) = 1
dag(R, Class) = 1
discrete_nodes = 1:N
nodes_size = 2*ones(1,N)
bnet = mk_bnet(dag, nodes_size, names, {'Clody', 'S', 'R', 'W', 'Class'}, 'discrete', discrete_nodes)
bnet.CPD{C} = tabular_CPD(bnet, C, [0.5 0.5])
bnet.CPD{R} = tabular_CPD(bnet, R, [0.8 0.2 0.2 0.8])
bnet.CPD{S} = tabular_CPD(bnet, S, [0.5 0.9 0.5 0.1])
bnet.CPD{W} = tabular_CPD(bnet, W, [1 0.1 0.1 0.01 0 0.9 0.9 0.99])
bnet.CPD{Class} = tabular_CPD(bnet, Class, [0 0.4 0.4 0.9 1 0.6 0.6 0.1])
evidence = cell(1, N)
evidence{R} = 2
engine = var_elim_inf_engine(bnet)
[engine loglik] = enter_evidence(engine, evidence)
marg = marginal_nodes(engine, R)
marg = marginal_nodes(engine, Class)
marg.T
这是我使用的代码,至于 jtree,它在 matlab 上给了我一些错误,它已经消失了,但是,我认为变量 elimin 更容易理解,因为我现在正在阅读它。
谢谢。