더북(TheBook)

확률 설정하기

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);

 

노드를 만들고, 에지를 정의하고, 확률을 설정했으니 코드로 결과를 얻을 수 있다. 여기까지 작업한 것을 저장하고, 이제 실행해보자.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.