[ML] 의사결정나무모델 (decision tree)

Minjeong Kim·2025년 11월 17일

인공지능

목록 보기
5/50

의사결정 나무에 대한 개념과 코드에 대해 정리한 페이지입니다.


개념

  • 스무고개 하듯이 예/아니오 질문을 반복하며 학습
  • 특정 기준(질문)에 따라 데이터를 구분하는 모델
  • 분류/회귀 모두 사용 가능

불순도

  • 불순도 줄여나가는 / 순도 높여나가는 방향으로 학습!
  • 지니 불순도
    • 해당 범주 안에 서로 다른 데이터가 얼마나 섞여 있는지를 뜻함
    • 결정 트리 모델의 노드 분할 기준
    • 각 질문들이 얼마나 좋은 질문인지 수치로 파악 할 수 있음
    • 0~0.5 사이값
      • 0 : 잘 분류된 것 (좋은 질문)
      • 0.5 : 데이터가 5:5 비율로 섞여서 분류된 것 (좋지 않은 질문)

용어

  • node 종류
    • root node
    • decision node
    • leaf node
  • depth
    • 몇 번의 의사결정을 하는지 그 깊이를 나타냄
    • depth 가 클수록 (즉, 규칙이 많아지기 때문에) 과적합 됨!

실습

from sklearn.tree import DecisionTreeClassifier

# 모델 객체 생성
tree_model = DecisionTreeClassifier()

# 모델 학습
tree_model.fit(X_train, y_train)

# 모델 평가
tree_model.score(X_test, y_test)

hyper parameter 조절

tree_model = DecisionTreeClassifier(**max_depth=3**)
  • max_depth default 값: None
    • 즉, 다 분리 될 때까지 계속 가지 뻗어나감
    • 과적합 가능성 높아짐
    • 따라서, depth 조절 필요

의사결정나무 시각화

plt.rc('font', family='NanumBarunGothic') # 한글 설정
from sklearn.tree import plot_tree
plot_tree(tree_model, # 모델이름
          feature_names = X.columns,  # 컬럼이름 -> 입력특성
          class_names = ['불쾌','상쾌'],#0 - 불쾌, 1 - 상쾌 / 클래스명 지정
          fontsize =8 ,
          filled = True)
plt.show()


depth가 2여서 max_depth 를 3으로 조정해도 정확도 값이 달라지지 않았던 것임!

0개의 댓글