결정트리 - Decision Tree

 스무고개 많이들 해보셨을 텐데요. 결정 트리는 이와 비슷하게 의사를 결정하는 알고리즘 구조입니다.

 지도학습(Supervisior Learning)* 분류에 속하는 이 알고리즘은 매우 직관적으로 데이터들을 어떤 식으로 분류하는 확인할 수 있습니다. 간단한 예시를 들어보겠습니다.

 

Q) 젊은 친구 John은 이런 날 나가서 놀까요?

 위의 질문에 나올 수 있는 답은 O, X 둘 중 하나라고 해보겠습니다. 

 그리고 이 답을 유추하기 위한 속성 값(Attribute)들이 주어집니다. 예를 들어, 

1) 비가 온다 / 오지 않는다 (Boolean Attribute)

2) 온도가 X 이다. (실수 Attribute)

3) 같이 놀 친구가 X명 있다. (정수 Attribute)

 위와 같은 속성값들은 예시이며, 그 외에도 다양하게 존재할 수 있습니다. 

간단한 결정트리 예시

 결정트리결정 트리 모델은 위 그림처럼 특징들을 이용해 분류를 하는 모델입니다. 분기를 어떤 기준으로 설정할 것이고, 어떤 기준을 가장 위에 놓을 것이냐가 결정 트리에서는 중요한 문제가 됩니다. 이를 선택하기 위한 기준으로 엔트로피라는 개념을 사용하는데, 쉽게 설명드리자면 상황마다 가장 깔끔하게 나눌 수 있는 기준을 찾아서 설정한다고 보시면 됩니다.

 결정트리에 대한 간략한 설명은 여기서 마치겠습니다.

 


* 지도학습(Supervisior Learning) - 머신러닝의 한 분야로써, 훈련데이터를 이용해 머신러닝 모델이 Input X가 주어질 때 Output Y를 출력하게끔 합니다. 분류(Classification), 회귀(Regression) 등의 세부 분야로 나뉩니다.

 

UCI Repository 살펴보기

https://archive.ics.uci.edu/ml/index.php

 UCI repository는 머신러닝과 지능시스템을 위한 여러 데이터들을 저장하고 있는 저장소입니다. 

UCI repository 홈 화면

 여러 데이터셋을 무료로 사용이 가능하며, 그중 monk's problem dataset을 살펴보겠습니다.

데이터셋에 대한 설명이 나옵니다.

 데이터셋에 대한 설명은 Attribute Information 부분에 되어있습니다. 분류(Classification) 문제에 사용하기 위한 클래스와 속성(Attributes)에 대해 간략하게 나타나 있습니다.

monks-problems 다운로드 페이지

 monks-1에 해당하는 test와 train을 다운로드합니다. 여기서 test는 결정 트리 모델이 잘 만들어졌는지 시험하기 위한 데이터셋이고, train은 결정트리 모델을 만들기 위해 필요한 데이터셋을 의미합니다. 데이터셋에 따라 위와 다르게 하나의 파일만 있는 경우도 있습니다. 

train 파일의 내용

 파일은 이전의 Attribute Information에서 설명한 내용들이 순서대로 띄어쓰기로 구분되어 작성되어 있습니다. 이를 파이썬에서 읽어 들여서 결정 트리를 만들어보겠습니다. 파일에 따라 쉼표나 다른 무언가로 구분되어 있는 경우도 있습니다.

 


Python with skLearn

1. 데이터 파일 읽기

 먼저 데이터 파일을 읽는 작업이 첫 번째로 이루어져야 할 작업입니다. 학습을 위한 train 데이터와 테스트를 위한 test 데이터로 구분하여 파일을 읽었습니다. 파일을 읽는 작업은 pandas의 read_csv 함수를 이용하였습니다.

 * 모듈들의 다운로드는 Anaconda 환경이라고 하면, conda instasll numpy 이런 식으로 가능합니다.

 

 

2. 데이터를 속성과 클래스로 구분하기

  머신러닝 모델은 함수에 비교되곤 하는데 함수처럼 속성 등 모델에 Input으로 들어가게 되는 값을 x, Input을 이용하여  모델이 출력해야 할 클래스 값을 y로 구분하였습니다. 위 과정을 통해 클래스와 속성이 섞여있는 데이터가 깔끔하게 분리되는 것을 확인할 수 있습니다.

 

 

3. 결정 트리 만들기 및 학습시키기

 결정 트리는 이미 사이킷런 라이브러리에 존재하고 있어서 쉽게 만들 수 있습니다. 미리 준비해둔 train 데이터를 통해 fit 함수를 통하여 결정 트리를 학습시킬 수 있습니다. 학습이 끝난 뒤 score 함수를 통해 x가 주어질 때 y를 얼마나 잘 출력해 내는지 확인할 수 있습니다.

 

score 결과

 위 값만 보고서는 결정 트리가 잘 만들어진 것인지에 대해 의문을 품을 수 있습니다. 이를 위해 시각적으로 결정 트리를 확인할 수 있는데, 이를 도와줄 프로그램이 추가적으로 설치가 필요합니다. 바로 GraphViz입니다.

msi 파일을 클릭하여 다운로드합니다

 msi 파일을 클릭하여 다운로드를 하시면 됩니다. 이 프로그램은 그래프 시각화에 필요한 소프트웨어입니다.

 

 

4. 트리 시각화하기

 설치한 GraphViz 프로그램을 환경변수 PATH에 넣어줍니다. 보통 설치하실 때 추가적으로 설정하신 부분이 없다면 저 위치에 존재하고 있습니다. 위 코드를 실행하고 나면 dt.png 파일이 경로에 생성되게 됩니다. 

 * 만약 위처럼 코드를 실행하였을 때, dot 파일을 찾을 수 없다고 뜨는 경우에는 graphviz 모듈을 다운로드해보시길 바랍니다. Anaconda 환경 기준으로 conda install graphviz 로 다운로드 할 수 있습니다.  

 

dt.png

 

 이상으로 간략하게 데이터셋을 이용한 머신러닝, 그중에서도 결정 트리를 생성했습니다. 이와 비슷하게 다른 데이터셋에 대해서도 적용하실 수 있을 것입니다. 다만 UCI에는 정말 다양한 데이터가 존재하기에 이처럼 결정 트리를 생성하기에는 조금 부적절한 데이터도 있을 수 있습니다.

 

 


 * 공부하며 작성하는 글이기에, 틀린 점이나 지적할 점이 있으시다면 댓글로 알려주시면 감사하겠습니다.

'AI > 머신러닝' 카테고리의 다른 글

[파이썬][ply.lex] 토큰 분석을 위한 Lexer 튜토리얼  (0) 2019.10.11

+ Recent posts