<코드>
pymlrev2/4장/4.2 결정 트리.ipynb at main · wikibook/pymlrev2 · GitHub
Graphviz 패키지를 사용해 결정 트리 알고리즘이 어떠한 규칙을 가지고 트리를 생성하는지 시각적으로 확인할 수 있다.
출력된 결과를 보면 각 규칙에 따라 트리의 branch 노드와 말단 leaf 노드가 어떻게 구성되는지 한눈에 알 수 있다.
이를 자세히 살펴보자
다시 시각화 결과를 살펴보자 !
첫 번째 brunch노드인 1번 노드는 petal length <= 2.45라는 분할 규칙을 가지고 있다.
이 분할 규칙으로 인해 만들어진 첫 번째 leaf 노드인 2번 노드는 sample = 41이고 모두 class가 setosa인 데이터로 구성되어 있다.
두 번째 brunch 노드인 3번 노드는 petal width(cm) <= 1.55 라는 분할 규칙을 가지고 있다.
또한, gini = 0.5 로 어느 하나의 class에 치우쳐저 있지 않아 흰 색이다.
petal length(cm) <= 5.25 라는 분할 규칙을 가지고 있다.
총 데이터 건수는 38개 이며, 대부분 class가 versicolor인 데이터로 구성되어 있다.
gini 개수를 확인해보면 0.051로 매우 낮으나 이 결정트리의 경우 리프 노드 규칙을 미리 제어하지 않아 멈추지 않고 자식노드를 생성하게 된다.
petal width(cm) <= 1.75 인 분할 규칙을 가지고 있다.
총 데이터 건수는 41개 이며, 대부분 class가 virginica인 데이터로 구성되어 있다.
gini 개수를 확인해보면 4번 노드와 같이 0.136으로 낮지만 같은 이유로 자식노드를 생성하게 된다.
[ 결론 ]
각 노드의 색은 붓꽃 데이터의 레이블 값을 의미한다.
주황색은 Setosa, 초록생은 Versicolor, 보라색은 Virginica 이다.
색깔이 짙어질수록 지니 계수가 낮고, 해당 레이블 속에 속하는 샘플 데이터가 많다는 의미이다.
4번 노드를 살펴보면 38개중 Viginica가 단 1개이고, 37개가 Versicolor이지만 이를 구분하기 위해 다시 자식 노드를 생성한다. 이렇게 결정 트리는 규칙 생성 로직을 미리 제어하지 않으면 완벽하게 클래스 값을 구별해내기 위해 트리 노드를 계속해서 만들기 되고 이렇게 복잡해진 트리는 쉽게 과적합되는 문제점이 생긴다.
즉. 결정 트리는 설명력이 높다는 장점이 있지만 과적합이 높다는 단점이 있다.
[Kaggle] Spaceship 0416 : 0.77507 (0) | 2024.04.22 |
---|---|
[파이썬 머신러닝 완벽 가이드] 04 분류 (4) 결정 트리 실습 (1) | 2024.04.18 |
[파이썬 머신러닝 완벽 가이드] 04 분류 (3) 결정트리 과적합 (0) | 2024.04.18 |
[공간분석] Lattice Spatial Data 예측 모델 (SAR, CAR) (0) | 2024.04.17 |
[파이썬 머신러닝 완벽 가이드] 04 분류 (1) 결정 트리 (0) | 2024.04.11 |