이것은 거래입니다. 그래서 BNT 매뉴얼의 지침에 따라 BN을 만들었습니다. 스프링클러 설명서가 있지만 겨울과 여름을위한 노드 클래스를 추가했습니다. 이와 같이 :Matlab (BNT) 분류를위한 베이 즈 네트워크
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 = TRUE = 여름
편집 :
그래서 네 클래스 노드의 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 . 나는 변수 elimin 내가 읽고 있어요으로 이해하기 쉽게 생각 JTree를위한, 그것은 나에게 사라졌다 MATLAB에 대한 몇 가지 오류를주고 있었다
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
이
, 내가 사용되는 코드이지만, 다음 코드는 지금.감사합니다.
나는 편집했다. 감사. –
예, 코드가 올바르게 구현 된 것 같습니다. 이제 데이터가 누락 된 경우 특히 CPT를 수동으로 지정하는 대신 CPT를 배워야 할 때 상황이 다소 번거로워지기 시작합니다.그러나 당분간 당신의 관심사가 아닙니다 :) – Rhubarb
아니, 지금은 아니지만 정확히 조금 더 까다 롭다는 것을 의미합니까? 어떻게 그렇게? 나는 당신이 데이터를 가지고 있기 때문에 더 쉬워 져야하지만, 잃어버린 것들을 설명하기 위해 그것을 부드럽게 할 수는 있습니다. –