2

이것은 거래입니다. 그래서 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 

, 내가 사용되는 코드이지만, 다음 코드는 지금.

감사합니다.

답변

3

'class'에 대한 조건부 확률 테이블 (CPT)은이 경우 8 (2 * 2 * 2) 개의 요소를 가져야합니다. 추론 엔진의 사후 출력 (marg.T)은 바이너리 변수에 적합합니다.

"클래스 노드가 상태 1에 있고, 확률이 0.2이고 상태 2에 있음"이 0.8으로 표시됩니다. 이 시점부터 '클래스'를 상태 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.이 경우 접합점 트리 엔진이 작동하지 않지만 반드시 작동해야합니다. 포인트가 누락되었을 수 있습니다. BNT 도구 상자 .zip 파일에서 junction_tree 예제 (.m 파일의 이름이 무엇인지 정확하게 기억하지 못합니다)가 있어야합니다. 접합 트리 유추 엔진을 사용하면 변수 제거에서와 같은 대답을 얻을 수 있습니다.

+0

나는 편집했다. 감사. –

+0

예, 코드가 올바르게 구현 된 것 같습니다. 이제 데이터가 누락 된 경우 특히 CPT를 수동으로 지정하는 대신 CPT를 배워야 할 때 상황이 다소 번거로워지기 시작합니다.그러나 당분간 당신의 관심사가 아닙니다 :) – Rhubarb

+0

아니, 지금은 아니지만 정확히 조금 더 까다 롭다는 것을 의미합니까? 어떻게 그렇게? 나는 당신이 데이터를 가지고 있기 때문에 더 쉬워 져야하지만, 잃어버린 것들을 설명하기 위해 그것을 부드럽게 할 수는 있습니다. –