확률 설정하기
BayesNetHelper 클래스를 사용하여 확률값을 지정할 수 있다. 조건부 확률로 시작한다. 흡연 여부(smoker) 노드는 환자의 나이(age)에 대해 조건부다. 의사코드는 다음과 같다.
만일 age < 55이면 smoker(흡연) = 0.4, smoker(비흡연) = 0.6
만일 age > 55이면 smoker(흡연) = 0.8, smoker(비흡연) = 0.2
자바 클래스에서 헬퍼 클래스에 값을 추가한다.
BayesNetHelper.setProbabilityValues(smoker, "<55", 0.4, 0.6); BayesNetHelper.setProbabilityValues(smoker, ">55", 0.8, 0.2);
다음에는 외과 수술 결과(surgical outcome) 노드의 확률값을 정한다. 이 노드는 조건부 확률을 두 개 가지므로 가능한 모든 조건을 살펴보고 확률을 정해야 한다.
만일 흡연자 그리고 기간이 <2년이면 외과 수술(성공) = 0.1 아니면 외과 수술(실패) = 0.9
만일 흡연자 그리고 기간이 >2년이면 외과 수술(성공) = 0.01 아니면 외과 수술(실패) = 0.99
만일 비흡연자 그리고 기간이 <2년이면 외과 수술(성공) = 0.8 아니면 외과 수술(실패) = 0.2
만일 비흡연자 그리고 기간이 >2년이면 외과 수술(성공) = 0.58 아니면 외과 수술(실패) = 0.42
코드에서 헬퍼 클래스에 확률을 다시 추가한다. 이번에는 부모와 그 다음 부모 조건을 사용한다.
BayesNetHelper.setProbabilityValues(surgical, "smokes", "<2Y",0.1, 0.9); BayesNetHelper.setProbabilityValues(surgical, "smokes", ">2Y",0.01, 0.99); BayesNetHelper.setProbabilityValues(surgical, "doesnotsmoke", "<2Y",0.8 , 0.2); BayesNetHelper.setProbabilityValues(surgical, "doesnotsmoke", ">2Y", 0.58, 0.42);
마지막 두 노드(duration, age)는 리프(leaf) 노드다. 연결된 부모가 없기 때문이다. 리프 노드에서 할 일은 헬퍼 클래스를 이용하여 참/거짓값을 더하는 것이다. 하나는 투병 기간(duration) 노드, 나머지 하나는 나이(age) 노드에 확률을 설정한다.
BayesNetHelper.setProbabilityValues(duration, 0.9, 0.1); BayesNetHelper.setProbabilityValues(age, 0.8, 0.2);
노드를 만들고, 에지를 정의하고, 확률을 설정했으니 코드로 결과를 얻을 수 있다. 여기까지 작업한 것을 저장하고, 이제 실행해보자.