MLOps 부트캠프 by 한경+토스뱅크/Machine Learning

분류 알고리즘 - 결정 트리

나니니 2024. 7. 24. 11:49

알고리즘을 배운다는 것은?

결정 트리 알고리즘

스무고개를 하듯이 계속적인 질문을 통해 패턴을 찾아간다. 

목적: 가장 효율적인 분류가 되기 위한 규칙을 찾음(모든 리프를 균일하게 만드는 것)

정보 균일도 측정 방법

정보 이득 vs 지니 계수

 

- 정보 이득: 엔트로피(복잡도) 개념 기반

상이한 값들이 섞여 있으면 엔트로피 높음, 동일한 값들이 섞여 있으면 엔트로피 낮음

  • 정보 이득 지수 = 1 - 엔트로피 지수

결정 트리는 이 정보 이득 지수로 분할 기준을 정한다. 즉, 정보 이득이 높은 속성을 기준으로 분할한다. 

 

- 지니 계수: 경제학에서 불평등 지수를 나타낼 때 사용하는 지수

  • 0(평등/균일) ~ 1(불평등/불균일): 낮으면 낮을 수록 좋음!

즉, 결정 트리에선 지니 계수를 0으로 만드는 것이 목적임

 

 

규칙 노드 생성 프로세스

1. 데이터 집합의 모든 아이템이 동일한 분류인지 확인

2-1. 데이터의 집합의 모든 아이템이 동일한 종류라면 리프 노드로 만들어서 분류 결정

2-2. 데이터의 집합의 아이템이 여러 종류라면 데이터를 분할하는데 가장 좋은 속성과 분할 기준을 찾음( 정보 이득 or 지니 계수 )

3. 해당 속성과 분할 기준으로 데이터를 분할하여 규칙 노드 생성

 

*모든 데이터 집합의 분류가 결정 될 때 까지 1 – 2.2 – 3 단계가 반복된다.

장단점

  • 장점
    • 쉽고 직관적이다 -> 시각화
    • feature의 스케일링이나 정규화 필요 없음 -> 질문지만 잘 만들면 됨
  • 단점
    • 과대적합(Overfitting)으로 알고리즘 성능이 떨어질 수 있음
*과대 적합이란? 머신러닝과 통계학에서 모델이 학습 데이터에 너무 잘 맞춰져서 일반화 성능이 떨어지는 현상이다.
즉, 모델이 학습 데이터의 노이즈나 불필요한 세부사항까지 학습해 버려서 새로운 데이터나 테스트 데이터에 대해 제대로 예측하지 못하는 상태
    • 하이퍼 파리미터 튜닝 필수(트리의 크기를 사전에 제한)

max_depth ⭐️ 

: 트리의 최대 깊이를 규정함. max_depth가 커질 수록 모델의 복잡도는 내려간다. 

max_features

: featuure의 개수를 고려하여 최적의 분할을 결정한다. 

min_samples_split

: 노드를 분할하기 위한 최소한의 샘플 데이터 개수

min_samples_leaf

: 분할된 양쪽(좌우) 노드를 만들기 위한 최소한의 샘플 데이터 개수

max_leaf_nodes

: 말단 노드의 최대 개수

 


Graphviz 시각화

iris 데이터로 결정 트리 생성해보기

graphviz Homebrew로 설치하기
https://graphviz.org/download/#:~:text=brew%20install%20graphviz
from sklearn.tree import export_graphviz

export_graphviz(
    dt_clf, # 시각화 할 모델
    out_file = "tree.dot", # 시각화 결과물 파일 경로
    class_names = iris_data.target_names, # 각 클래스의 문자열로 된 이름
    feature_names = iris_data.feature_names, # 각 특성(Featurue)의 문자열로 된 이름
    impurity = True, # 순수도(지니 계수 표현)
    filled = True
)

import graphviz

with open("tree.dot") as f:
  dot_graph = f.read()
graphviz.Source(dot_graph)