본문 바로가기
PYTHON/머신러닝

[PYTHON] 의사 결정 트리(Decision Tree)

by G허니 2024. 4. 28.

의사 결정 트리(Decision Tree)는 지도 학습 알고리즘 중 하나로, 분류와 회귀 문제에 모두 사용될 수 있습니다. 이 알고리즘은 트리 구조를 사용하여 데이터를 분할하고 판단 기준을 결정하여 예측을 수행합니다.

 

 

알고리즘 동작 방식:

  1. 특성 선택: 먼저 가장 중요한 특성을 기준으로 데이터를 분할하는 특성을 선택합니다. 이는 정보 이득(information gain), 지니 불순도(Gini impurity) 등의 지표를 사용하여 결정됩니다.
  2. 트리 분할: 선택된 특성을 기준으로 데이터를 분할합니다. 각 분할은 데이터를 가장 잘 분류하는 방향으로 이루어집니다.
  3. 재귀적 분할: 분할된 하위 집합에 대해 재귀적으로 위 과정을 반복합니다. 이 과정은 분류가 완료될 때까지 계속됩니다.
  4. 리프 노드 할당: 분할이 더 이상 불가능하거나 특정 조건을 충족할 때마다 리프 노드(leaf node)에 클래스 레이블 또는 값이 할당됩니다.

주요 특징:

  • 해석이 용이: 의사 결정 트리는 직관적이며 해석하기 쉬운 모델입니다. 이해하기 쉬운 규칙을 생성하므로 비전문가도 이해하기 쉽습니다.
  • 비모수적(non-parametric): 의사 결정 트리는 모델을 학습하는 데에 별도의 파라미터가 필요하지 않습니다. 데이터를 분할하여 규칙을 생성합니다.
  • 과적합 가능성: 의사 결정 트리는 과적합(overfitting)되기 쉽습니다. 따라서 적절한 가지치기(pruning) 또는 하이퍼파라미터 튜닝이 필요합니다.
  • 이산적 결과: 의사 결정 트리는 특정 특성에 대한 이산적인 결과를 제공합니다. 각 리프 노드에서는 하나의 클래스 레이블 또는 값이 예측됩니다.

적용 분야:

  • 분류 문제: 의사 결정 트리는 분류 문제에 널리 사용됩니다. 예를 들어, 고객 세분화, 질병 진단, 이상 감지 등에 사용될 수 있습니다.
  • 회귀 문제: 의사 결정 트리는 회귀 문제에도 적용될 수 있습니다. 예를 들어, 주택 가격 예측, 수익 예측 등에 사용될 수 있습니다.
모델링
# 1단계: 불러오기
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import confusion_matrix, classification_report

# 2단계: 선언하기
model = DecisionTreeClassifier(random_state=1, max_depth=5)

# 3단계: 학습하기
model.fit(x_train, y_train)

# 4단계: 예측하기
y_pred = model.predict(x_test)

# 5단계 평가하기
print(confusion_matrix(y_test, y_pred))
print(classification_report(y_test, y_pred))

 

트리시각화
# 시각화 모듈 불러오기
from sklearn.tree import export_graphviz
from IPython.display import Image

# 이미지 파일 만들기
export_graphviz(model,                                 # 모델 이름
                out_file='tree.dot',                   # 파일 이름
                feature_names=list(x),               # Feature 이름
                class_names=['die', 'survived'],       # Target Class 이름 (분류인 경우만 지정)
                rounded=True,                          # 둥근 테두리
                precision=2,                           # 불순도 소숫점 자리수
                filled=True)                           # 박스 내부 채우기

# 파일 변환
!dot tree.dot -Tpng -otree.png -Gdpi=300

# 이미지 파일 표시
Image(filename='tree.png')

 

 

의사 결정 트리는 강력하고 해석하기 쉬운 모델로, 분류와 회귀 문제에 널리 사용됩니다. 그러나 과적합 가능성이 있으므로 적절한 가지치기나 하이퍼파라미터 튜닝이 필요합니다.