상세 컨텐츠

본문 제목

[파이썬 머신러닝 완벽 가이드] 04 분류 (2) 결정 트리 시각화

학습기록

by green010809 2024. 4. 18. 11:29

본문

<코드>

pymlrev2/4장/4.2 결정 트리.ipynb at main · wikibook/pymlrev2 · GitHub

 

pymlrev2/4장/4.2 결정 트리.ipynb at main · wikibook/pymlrev2

《파이썬 머신러닝 완벽 가이드(개정2판)》 예제 코드. Contribute to wikibook/pymlrev2 development by creating an account on GitHub.

github.com

 

Graphviz 패키지를 사용해 결정 트리 알고리즘이 어떠한 규칙을 가지고 트리를 생성하는지 시각적으로 확인할 수 있다.

 

 

출력된 결과를 보면 각 규칙에 따라 트리의 branch 노드와 말단 leaf 노드가 어떻게 구성되는지 한눈에 알 수 있다.

 

이를 자세히 살펴보자

 

  1. 리프 노드 : 더 이상 자식 노드가 없는 노드. 최종 클래스(레이블) 값이 결정되는 노드이다.
    • 리프 노드가 되는 방법
      1. 오직 하나의 클래스 값으로 구성
      2. 리프노드가 될 수 있는 하이퍼 파라미터 조건을 충족
  2. 브랜치 노드 : 자식 노드가 있는 노드
    • 분할 규칙 조건 : 자식 노드를 만들기 위한 조건
      • 지표 의미
        1. petal length(cm) <= 2.45 : 조건
        2. gini = [] : 해당 데이터 분포에서의 지니 계수
        3. samples : 현 규칙에 해당하는 데이터 건수
        4. value = [] 클래스 값 기반의 데이터 건수
          • 붓꽃 데이터 세트는 클래스 값으로 0,1,2를 가지고 있으며 
            0 : Setosa, 1 : Versicolor, 2 : Virginica 이다.
            Value = [ 41, 40, 39 ]라면 클래스 값의 순서로,
            Setosa 41개, Versicolor 40개, Virginica 39개로 구성되어 있다는 의미 이다.

 

다시 시각화 결과를 살펴보자 !

 

  • 1번 노드

첫 번째 brunch노드인 1번 노드는 petal length <= 2.45라는 분할 규칙을 가지고 있다.

  • 2번 노드

이 분할 규칙으로 인해 만들어진 첫 번째 leaf 노드인 2번 노드는 sample = 41이고 모두 class가 setosa인 데이터로 구성되어 있다. 

  • 3번 노드

두 번째 brunch 노드인 3번 노드는 petal width(cm) <= 1.55 라는 분할 규칙을 가지고 있다.

또한, gini = 0.5 로 어느 하나의 class에 치우쳐저 있지 않아 흰 색이다.

  • 4번 노드

petal length(cm) <= 5.25 라는 분할 규칙을 가지고 있다.

총 데이터 건수는 38개 이며, 대부분 class가 versicolor인 데이터로 구성되어 있다.

gini 개수를 확인해보면 0.051로 매우 낮으나 이 결정트리의 경우 리프 노드 규칙을 미리 제어하지 않아 멈추지 않고 자식노드를 생성하게 된다.

  • 5번 노드

petal width(cm) <= 1.75 인 분할 규칙을 가지고 있다.

총 데이터 건수는 41개 이며, 대부분 class가 virginica인 데이터로 구성되어 있다.

gini 개수를 확인해보면 4번 노드와 같이 0.136으로 낮지만 같은 이유로 자식노드를 생성하게 된다.

 

[ 결론 ]

각 노드의 색은 붓꽃 데이터의 레이블 값을 의미한다.

주황색은 Setosa, 초록생은 Versicolor, 보라색은 Virginica 이다.

 

색깔이 짙어질수록 지니 계수가 낮고, 해당 레이블 속에 속하는 샘플 데이터가 많다는 의미이다.

 

4번 노드를 살펴보면 38개중 Viginica가 단 1개이고, 37개가 Versicolor이지만 이를 구분하기 위해 다시 자식 노드를 생성한다. 이렇게 결정 트리는 규칙 생성 로직을 미리 제어하지 않으면 완벽하게 클래스 값을 구별해내기 위해 트리 노드를 계속해서 만들기 되고 이렇게 복잡해진 트리는 쉽게 과적합되는 문제점이 생긴다.

 

즉. 결정 트리는 설명력이 높다는 장점이 있지만 과적합이 높다는 단점이 있다.

관련글 더보기