[AIVLE SCHOOL] 머신러닝(5) - Decision Tree

춤추는 머쉬룸·2024년 10월 16일

AIVLE SCHOOL 6기

목록 보기
49/80
post-thumbnail

10/16 5, 6, 7세션

A. 결정트리

  • 특정 변수에 대한 의사결정 규칙을 나무 가지가 뻗는 형태로 분류함
  • 분류와 회귀에 모두 사용
  • 전처리 영향도가 크지 않음
  • 화이트박스 모델 : 분석 과정을 실제로 눈으로 확인 가능
  • 과적합 발생 가능성 있음. 트리 깊이 제한 필요
  • 어떻게 하면 불순도를 낮출 수 있을까?

A-1. 용어 정리

  • Root Node (뿌리 마디) : 전체 자료를 갖는, 시작하는 마디
  • Terminal Node (끝 마디) : 자식 마디가 없는 마디 (= Leaf Node)
  • Depth (깊이) : 뿌리 마디로부터 끝 마디까지 연결된 마디 개수

A-2. 불순도 (Impurity)

  • 순도가 높을 수록 분류가 잘 된 것

지니 불순도

엔트로피

A-3. 정보 이득 (Information Gain)

  • 어떤 속성을 기준으로 데이터를 분할할 때, 그 분할로 인해 엔트로피가 얼마나 줄어드는지를 측정하는 정도
  • 정보 이득 = 부모 노드 엔트로피 - 자식 노드 엔트로피

B. 결정트리 함수

  • min_sample_leaf= : leaf 가 되기 위한 최소한의 샘플 데이터 수 (값이 클수록 모델이 단순)
  • min_sample_split : 노드를 분할하기 위한 최소한의 샘플 데이터 수 (값이 클수록 모델이 단순)
  • sklearn.tree import DecisionTreeClassifier 사용
# 1단계: 불러오기
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import confusion_matrix, classification_report

# 2단계: 선언하기
model = DecisionTreeClassifier()

# 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')

변수 중요도 시각화

# 변수 중요도
plt.figure(figsize=(5, 5))
plt.barh(y=list(x), width=model.feature_importances_)
plt.show()

  • 성별, 객실이 불순도를 낮추는데 가장 많이 기여했다.
  • 즉, 생존 여부를 결정짓는 데 가장 큰 역할을 했다.

0개의 댓글