2

これが取引です。そこで、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は今読んでいるので理解しやすいと思います。

ありがとう。

4

1 に答える 1