Skip to main content

의사결정 나무

의사결정나무 Decision Tree

  • 한 번에 한 가지 변수에 대해 Yes/No로 분기
  • 분기를 반복하여 최종 의사결정까지 과정에 도달
  • 나무에서 각각의 마디(node)는 데이터의 부분 집합
  • 용어:
    • 뿌리(root): 의사결정나무의 출발점. 모든 사례를 포함.
    • 자식(child): 하나의 마디에서 분기된 마디
    • 끝(terminal)/ 잎사귀(leaf): 자식이 없는 마디
    • 가지(branch): 뿌리에서 잎사귀 사이의 마디들

의사결정 나무의 장점

  • 결과를 이해하기 쉽다
  • 전처리가 단순
  • 빠르다
  • 다양한 종류의 변수를 다룰 수 있음
  • 불필요한 변수에 영향을 적게 받음
  • 시각화가 쉬움
  • 통계적 가정이 적음

의사결정 나무의 단점

  • 과대 적합(overfitting)되기 쉬움
  • 결과의 불안정
  • 최적화가 어려움
  • 학습시키기 어려운 문제들이 있음(예: XOR)
  • 변수의 중요성 판단하기가 쉽지 않음
  • 불균형 데이터(imbalanced data)에 취약

범주형 변수의 분리 규칙

  • 불순도(impurity)를 크게 감소시키는 방식으로 분할
  • 카이제곱 통계량: 실제와 기대의 차이 (OiO_{i}: 관찰 빈도, EiE_{i}: 기대 빈도)
    • χ2=i(OiEi)2Ei\chi^{2}=\sum_{i}\frac{(O_{i}-E_{i})^{2}}{E_{i}}
  • 지니 지수: 모든 경우의 확률이 고를 경우 가장 높아짐(가장 많이 사용)
    • 1ipi21-\sum_{i}p_{i}^{2}
  • 엔트로피: 열역학에서 유래한 무질서도
    • 지니 지수와 비슷하나 로그가 포함되어 약간 더 계산이 많음
    • ipilog pi-\sum_{i}p_{i}log~p_{i}

의사결정 나무 실습

  • 과대 적합
from sklearn.tree import DecisionTreeClassifier
model = DecisionTreeClassifier(random_state = 42)
model.fit(X_train, y_train)
model.score(X_train, y_train)
model.score(X_test, y_test)
  • 깊이를 제한해서 과대 적합을 억제
model = DecisionTreeClassifier(max_depth = 5, random_state=42)

시각화

from sklearn.tree import plot_tree
import matplotlib.pyplot as plt
plt.figure(figsize=(20,10)) # 그림 크기 가로 20, 세로 10
plot_tree(model, fontsize=10, filled=True) # 글꼴 크기 10, 색칠
plt.savefig("tree.png") # 그림 저장

퀴즈

사용자 정보 입력
퀴즈를 시작하기 전에 이름과 소속을 입력해주세요.

Q&A