PL/Python

Decision Tree Classifier: 하이퍼파라미터 정리

PIYA 2022. 12. 15.

Introduction

결정트리 Decision Tree Classifier의 하이퍼파라미터들을 가볍게 정리해보자.

Graphviz를 이용한 결정나무 시각화

 

 

하이퍼파라미터

결정트리의 최대 단점인 과적합을 피하기 위해

하이퍼파라미터들은 결정트리의 분화를 방지하는 역할인 것들이 많다.

 

max_depth

트리의 최대 깊이. default값은 None.

None값일 경우, 완벽하게 클래스 결정값이 정해질 때까지 결정나무가 자랄 수 있다.

물론 max_depth가 None이어도 min_samples_split 설정값에 걸려 무한히 분할하기는 어렵다.

 

min_samples_split

노드를 분할하기 위한 최소 샘플 데이터 수. deault값 2.

즉 리프노드의 샘플 수가 최소 2는 되어야지 분할 가능하다는 뜻.

 

예를 들어, min_samples_split이 8로 설정되어 있을 때,

노드의 샘플 수가 7이면 분할하지 않는다.

 

의미가 헷갈릴 수도 있으니 명확하게 영어 정의를 적자면,

The minimum number of samples required to split an internal node.

 

아래 그림에서 빨간 점선 사각형의 리프들도 서로 다른 클래스값을 포함하고 있지만,

해당 리프의 샘플값이 min_samples_split 최소값을 충족시키지 못하기 때문에

분화하지 않는다.

min_samples_split의 이해

 

 

max_features

사용할 최대 피쳐 개수.

디폴트는 None으로 모든 피쳐를 사용해 분할을 수행한다.

auto일 경우 전체 피쳐개수에 제곱근(sqrt)을 씌운 갯수만큼 사용한다.

 

 

min_samples_leaf

분할될 때 왼쪽 오른쪽 리프노드(자식노드들)에서 가져야 할 최소 샘플 데이터 수.

 

명확하게 하기 위해 다시 영어로 표기하면:

The minimum number of samples required to be at a leaf node.

 

역시 값이 커질수록 분할이 어려워진다.

 

아래 그림처럼 min_samples_leaf값이 4일 경우,

리프노드의 샘플 수가 4일 때 분화하지 않는다.

어떻게 분화하더라도 자식노드 둘중 하나는 min_samples_leaf 최소값을 만족시키지 못하기 때문.

min_samples_leaf: 노드 분할시 자식 노드들의 샘플수가 설정값 이상이 만족되는지를 확인한 후에 분할 수행.

 

 

 

get_params() 메소드

결정트리 객체의 get_params() 메소드를 호출하면

해당 객체의 세팅된 하이퍼파라미터들을 확인할 수 있다.

from sklearn.tree import DecisionTreeClassifier

dt = DecisionTreeClassifier(min_samples_split=7)
dt.get_params()

 

 

Conclusion

min_samples_split, min_samples_leaf 등 아리까리한 하이퍼파라미터들을 정리해보았다.

 

reference

파이썬 머신러닝 완벽 가이드 강의의 PPT를 사용했다.

 

 

댓글