2017/02/15 - [CS/ML] - ML 101 : weka practical exercise / 의사결정트리 (1)



 Weka 를 이용해 소스 코드를 생성하고 난 후 해당 코드를 살펴보면, Visualize 를 통해 살펴본 의사 결정 트리의 모양을 그대로 코드로 옮겨 왔음을 확인 하실 수 있습니다. 메소드 명이 임의의 문자로 만들어져 있어 읽기 어려우나, 메소드 내용으로 보았을 때, 최상위 root 부터 leaf 로의 if-else 의 집합임을 확인할 수 있습니다. 그럼 이 코드를 어떻게 활용해 볼 수 있을까요?


우선, 지난 글에서 다운 받으신 .arff 파일의 내용을 아래와 같이 바꾸어 줍니다. 

@data

end_rack,85,85,FALSE,?

end_rack,80,90,TRUE,?

cd_spec,83,86,FALSE,?

std_rack,70,96,FALSE,?

std_rack,68,80,FALSE,?

std_rack,65,70,TRUE,?

cd_spec,64,65,TRUE,?

end_rack,72,95,FALSE,?

end_rack,69,70,FALSE,?

std_rack,75,80,FALSE,?

end_rack,75,70,TRUE,?

cd_spec,72,90,TRUE,?

cd_spec,81,75,FALSE,?

std_rack,71,91,TRUE,?


이 테스트 데이터를 읽어와 분류기가 값에 맞게 분류하는지 알아 보도록 하겠습니다. 테스트 코드는 다음과 같습니다.

테스트 파일을 읽어들이고 인스턴스를 로딩하여 for 루프를 순환하며 classifyInstance() 메서드를 사용하여 값을 얻어 옵니다.



이번 경우에는 classifyInstance() 를 이용하여 실제 매출이 발생했는지 안 했는지를 확인할 수 있는 것 입니다. double 형을 반환된 결과 값은 attribute 의 인덱스를 상징 합니다. 즉, 첫번째 인덱스인 0 은 'yes' 이고 두번째 인덱스인 1 은 'no' 를 가르키게 됩니다.


실행한 결과 값을 확인해 보면,


0.0->yes

0.0->yes

1.0->no

1.0->no

1.0->no

0.0->yes

0.0->yes

0.0->yes

0.0->yes

1.0->no

0.0->yes

1.0->no

0.0->yes

0.0->yes 


와 같이 테스트 데이터를 보고 우리가 학습시킨 모델을 통해 매출 발생 여부를 확인할 수 있게 되었습니다. 이제 테스트 데이터만 형식에 맞게 확보 된다면 매장의 배치 모습만 보고도 매출이 발생할지 안할지를 예측할 수 있게 된 것입니다. :)