Decision Tree(결정트리)는 Classification을 하기 위해 트리를 그려 마지막 leaf node에서 class가 구분되도록 하는 모델이다. Classification이 어떤 방식에 의해 결정이 됐는지 확인하기가 직관적이고 시각화하기 편리해서 많이 사용되는 모델이다.
트리를 그리는 방법
Decision Tree는 제일 처음에 데이터의 속성값들 중에서 하나를 선택해 가장 최상단의 루트 노드로 설정을 하고 그다음 차례대로 그 밑에 노드를 어떤 것을 둘지 결정해 나가며 트리를 그린다. 어떤 순서대로 속성을 선택하여 노드를 두는지 알아보기 위해서는 다음 두 가지 개념을 이해해야 한다.
Impurity(불순도)와 Entropy(엔트로피)
Impurity(불순도)란 구분된 데이터가 얼마나 서로 다른 클래스끼리 섞여있는지를 나타내는 지표이다. 예를 들어 두 가지 클래스로 구성된 데이터가 있다고 치고, 노드를 지나 구분된 부분 데이터들이 두 가지 클래스가 정확히 반반 섞여있다고 가정하면 이때 불순도가 최대(1)가 된다. 그러나 구분된 데이터들이 한 가지 클래스로만 이루어져 있다면 이 때는 불순도가 최소(0)가 된다. 보통 Impurity(불순도) 계산을 위해서는 Entropy(Entropy(S) = -Σ(p_i * log2(p_i)))라는 지표를 사용한다.
Information gain (인포메이션 게인)
Information gain이란 상위 노드에서 하위노드로 왔을 때 impurity가 얼마나 낮아졌는지를 측정하는 지표이다. impurity가 낮아졌다는 것은 데이터를 좀 더 분류를 해줬다는 것을 말한다. 계산하는 방식은 Entropy(S) = -Σ(p_i * log2(p_i)) 공식을 이용한다.
따라서 Decision Tree는 information gain을 크게 해주는 것부터 상위 노드에 배치하여 트리를 그려나간다. Step by step으로 이해하는데 도움이 되는 이 유튜브 강의를 참고해도 좋다.
Decision Tree의 장점과 단점
시각화하기 좋고 어떻게 예측을 수행하는지 이해하기가 쉽다는 장점이 있는 반면에 데이터의 패턴이 너무 복잡하고 클래스간 두드러진 차이가 드러나지 않는 데이터에 학습시킬 경우 Overfitting(오버피팅)되기가 쉽다는 단점도 존재한다.
Scikit Learn 코드 예제
import numpy as np
import pandas as pd
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
# iris 데이터 로드
iris = load_iris()
X = iris.data
y = iris.target
# train 과 test 데이터로 나누기
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
# decision tree 학습시키기
clf = DecisionTreeClassifier()
clf.fit(X_train, y_train)
# Evaluation 하기
accuracy = clf.score(X_test, y_test)
print("Accuracy:", accuracy)
결론
Decision Tree는 Supervised learning 방식의 Classification에서 쓰이는 가장 기본적인 모델이다. 트리가 어떻게 데이터를 학습하고 모델을 만드는지는 Entropy와 Information gain을 이해해야 한다. 이 모델은 직관적이어서 시각화하기가 좋고 모델의 구조를 이해하기가 쉽다는 장점이 있는 반면 오버피팅 하기 쉽다는 단점이 있다. Scikit learn 패키지를 활용하면 손쉽게 파이썬으로 코딩을 할 수 있다. 파이썬 독학에 도움 되는 온라인 리소스가 궁금하다면 이 포스트를 참고하자.
'머신러닝' 카테고리의 다른 글
머신러닝 Cross-Validation 이란? (0) | 2023.02.10 |
---|---|
머신러닝 딥러닝 AI의 개념 및 차이점 이해하기 (0) | 2023.02.02 |
Reinforcement Learning (강화학습) 이란? (0) | 2023.01.30 |
Unsupervised Learning (비지도 학습) 이란? (1) | 2023.01.28 |
Supervised Learning (지도 학습) 이란? (0) | 2023.01.28 |
댓글