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