ML 101 : try weka CS/ML 2017.01.29 02:55

2017/01/16 - [CS/ML] - ML 101 : 머신러닝의 종류

2017/01/19 - [CS/ML] - ML 101 : weka install & arff



 이전 글에서는 머신러닝의 종류, weka 툴 그리고 weka 에 쓰이는 데이터 형식에 대해서 알아보았습니다. 이번 글에서는 weka 를 사용하여 머신러닝의 큰 줄기 중 하나인 [지도학습] 이 어떻게 이뤄지는지 학습해 보도록 하겠습니다. 

이론을 설명하기에 앞서 바로 툴을 돌려보면서 실습에 임해보도록 하겠습니다.

 


 먼저 weka 를 시작하여 [Explorer] 버튼을 눌러 학습시킬 데이터를 불러오도록 하겠습니다. weka 를 설치한 경로 내에 /data/nominal 아래에 tic-tac-toe.arff 파일을 불러들이면 아래와 같은 화면을 보실 수 있습니다. 아래의 화면은 해당 데이터를 분석한 화면으로 각 attribute 별 데이터의 분포와 값들을 확인할 수 있습니다. 각 화면에 대해 감이 아직 안오더라도 일단은 '데이터 전처리 과정을 거친 화면이구나' 라고 이해하고 넘어가셔도 무방합니다. 데이터를 잘 불러들이셨다면 [classify] 탭을 눌러 데이터 분석을 진행해보도록 하겠습니다.



 

  [Classify] 탭을 선택하고 나면 아래와 같은 화면을 보실 수 있습니다. [Choose] 버튼을 눌러 [trees] 폴더 내에 J48 을 선택해 봅시다. J48은 c4.5 분류 알고리즘으로 소위 말하는 [의사결정 트리] 알고리즘 중 한 종류 입니다. 정보획득량을 기반으로 분류 작업에도 적용할 수 있는 알고리즘으로 많이 쓰이는 알고리즘 중 한 종류 입니다.  

 

 다음 단계로 넘어가기 전에 간단히 [의사 결정 트리] 란 무엇인지 알고 넘어가 보도록 하겠습니다. [의사 결정 트리]는 아래의 그림과 같이 각 속성 값을 기반으로 트리 구조로 데이터를 분석하여 결과를 분류하는 기법이라고 할 수 있습니다. 쉽게 생각해서 스무고개를 떠올리시면 됩니다. 아래 그림은 타이타닉 호의 생존자를 의사결정트리를 이용해 분류한 결과 입니다.


[출처 : Wiki_결정트리]


 어떤 노드를 기준으로 두느냐, 즉 어떤 속성을 root 값으로 두고, child 노드는 어떤 속성으로 만드느냐에 따라 같은 데이터에서 다양한 모양의 트리가 나올 수 있습니다. 데이터 세트를 분류하는 방식에 따라 다양한 의사결정 트리 알고리즘이 나왔으며, 대개 속성이 나뉘기 전후의 엔트로피 차이를 측정하는 정보획득량에 기반한 알고리즘이 많습니다. 저희가 오늘 사용할 J48(C4.5) 알고리즘도 이에 기반한 알고리즘입니다.


 내용에 비해 설명이 너무 간소하나 일단 [의사결정트리]에 대한 설명은 여기까지 하고 다음 단계로 넘어가도록 하겠습니다. J48 알고리즘을 선택하고 난 후 [Test options] 의 [Percentage split] 을 90%로 맞춰주겠습니다. 이 말은 .arff 에 있는 데이터 중 90%는 컴퓨터의 학습을 위해 사용하고 나머지 10%는 테스트를 위해 사용하겠다는 의미 입니다. 


 데이터를 학습시키다보면 분명 한번쯤은 오버피팅 문제에 직면하게 됩니다. 오버피팅을 피하기 위해서는 트레인 데이터와 테스트 데이터를 잘 조합하여 검증해야 합니다. 오버피팅에 대해서는 다른 글에서 다뤄보도록 하겠습니다.


 자 그럼, [Start] 버튼을 눌러보도록 하겠습니다.


  버튼을 누르고 나면 위와 같은 화면을 보실 수 있습니다. J48 알고리즘을 이용하여 90%의 데이터를 학습시키고 10%의 데이터를 사용해 검증했을 때, 약 85% 확률로 우리의 컴퓨터는 tic-tac-toe 게임의 승리 / 패배 여부를 예측할 수 있게 되었습니다. (짝짝짝)