머신러닝 & 딥러닝

[머신러닝 & 딥러닝] 결정 트리 (Decision Tree)

beginner-in-coding 2025. 4. 22. 10:57

01. 결정 트리(Decision Tree)

  • 설명이 필요할 때 유용한 모델
  • 일련의 질문에 대한 결정을 통해 데이터를 분해
  • 결정 알고리즘
    • 트리의 루트(root, 즉 제일 상위에 있는 노드)에서 시작해서 정보 이득(Information Gain, IG)가 최대가 되는 특성으로 데이터를 나눔
    • 반복 과정을 통해 리프 노드(leaf node, 즉 마지막 노드)가 순수해질떄까지 모든 자식 노드에서 이 분할 작업을 반복
    • 즉, 각 노드의 모든 훈련 샘플은 동일한 클래스에 속함
    • 노드가 많은 깊은 트리의 문제점: 과대 적합의 문제 발생 → 일반적으로 트리의 최대 깊이를 제한하여 트리를 가지치기(pruning)함 

02. 정보 이득 최대화: 자원을 최대로 활용

  • 트리 알고리즘으로 목적 함수를 사용하는 이유: 가장 정보가 풍부한 특성으로 노드를 나누기 위해
    • 목적 함수의 역할: 각 분할에서 정보의 이득을 최대화함
    • 정보 이득: 부모 노드의 불순도와 자식 노드의 불순도의 합의 차이를 이용해서 계산
      • 자식 노드의 불순도가 낮을수록 정보 이득이 커짐
  • 구현을 간단, 탐색 공간을 줄이기 위해 대부분의 라이브러리는 이진 결정 트리를 사용
  • 보통 불순도 조건을 바꾸어 튜닝하기보다 가지치기 수준을 바꾸면서 튜닝하는 것이 좋음
  • 이진 결정 트리에서 사용되는 세 개의 불순도 지표(분할 조건)
    1. 지니 불순도(Gini impurity): 잘못 분류될 확률을 최소화하기 위한 기준
      • 클래스가 완벽하게 섞여있을 경우: 지니 불순도 최대
      • 지니 불순도와 앤트로피 모두 비슷한 결과 출력
    2. 앤트로피(entropy): 트리의 상호 의존 정보를 최대화하는 것
      • 한 노드의 모든 샘플이 같은 클래스인 경우: 앤트로피 0
      • 클래스 분포 균등 : 앤트로피 최대
    3. 분류 오차(classfication error): 가지치기에는 좋은 조건, 결정 트리를 구성하는데 권장되지는 않음
      • 이유: 노드의 클래스 확률 변화에 덜 민감함

03. GraphViz

  • 사이킷런의 결정 트리를 그리기 위해 사용하는 프로그램
  • 사이킷런이 훈련 후 결정트리를 .dot파일로 추출하는 기능을 GraphViz를 통해서 이 파일을 시각화 할 수 있음
  • 리눅스, 윈도, macOS 모두 지원
  • 비슷한 기능을 가진 파이썬 라이브러리: PyDotPlus