用于Matlab(BNT)分类的贝叶斯网络

时间:2013-07-29 23:27:21

标签: matlab machine-learning classification bayesian-networks

这是交易。所以我按照BNT手册中的说明创建了一个BN,是洒水器,但是我已经为冬季和夏季添加了一个节点类。像这样:

 
       Cloudy------
     /      \     |
Sprinkler   Rain  |
       \    /   | |   
        Wet     Class

类别仅取决于多云或下雨。使用与http://bnt.googlecode.com/svn/trunk/docs/usage.html#basics

相同的规范

这个类也是二进制的,表是:

C R Class prob
---------------
1  1  1    0
2  1  1    0.4
1  2  1    0.4
2  2  1    0.9
etc.

所以我使用var_elimination_eng的问题因为某些原因jtree无法正常工作,我在输入雨天证据后得到了这个marg.T:

ans =

 0.800000000000000
 0.200000000000000

这是对的吗?我实施了吗?还是我错过了什么?感谢。

相同假设1 =假=冬天,2 =真=夏天

编辑:

所以是的,类节点的CPT是8个条目

C R Class prob
---------------
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 - Oposite。代码是:

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上给我一些错误消失了,但是,我认为变量消除更容易理解,因为我现在正在读它。

感谢。

1 个答案:

答案 0 :(得分:3)

“class”的条件概率表(CPT)在这种情况下应该有8(2 * 2 * 2)个元素。推理引擎的后验输出(marg.T)似乎适用于二元变量。

它读作:“具有0.8概率的'类'节点处于状态1,并且具有0.2概率它处于状态2”。从这一点开始,由用户决定是否将“类”指定为状态1或2。

在分类时,在最简单(并且不太可取)的情况下,您可以定义0.5的后验概率阈值并说:

if P(class=1)> 0.5
class = 1
else
class = 2
end

在评估二进制分类的效果时,您可以考虑predictive accuracy or Area Under the ROC curve (AUC)more intelligent things来考虑“类”状态的先验概率。

P.S。您说结点树引擎在这种情况下不起作用,但它应该。您可能缺少一个点,BNT工具箱.zip文件中应该有一个junction_tree示例(我不完全记住.m文件的名称)。如果使用连接树推理引擎,您将看到与变量消除相同的答案。