더북(TheBook)

결정 트리 이미지를 보면 결정 트리가 훈련 데이터셋에서 선택한 분할을 손쉽게 분석할 수 있습니다. 루트 노드에서 105개의 샘플로 시작합니다. 그다음 꽃잎 너비 기준 ≤ 0.75센티미터를 사용해서 35개와 70개의 샘플을 가진 두 개의 자식 노드로 분할합니다. 첫 번째 분할로 왼쪽 자식 노드는 이미 Iris-setosa 클래스의 샘플만 가진 순수 노드가 되었습니다(지니 불순도 = 0). 오른쪽에서 분할이 더 일어나 Iris-versicolorIris-virginica 클래스의 샘플을 구분합니다.

이 트리와 트리의 결정 영역 그래프를 보면 이 결정 트리가 붓꽃 클래스를 구분하는 일을 잘 수행한다는 것을 알 수 있습니다. 아쉽지만 사이킷런은 현재 결정 트리를 수동으로 사후 가지치기할 수 있는 기능을 제공하지 않습니다. 이전 코드 예제에서 결정 트리의 max_depth3으로 바꾸고 현재 모델과 비교해 보세요. 관심 있는 독자를 위해 예제로 남겨 놓겠습니다.

Note ≡


역주 max_depth 외에 사이킷런의 결정 트리에서 지원하는 대표적인 사전 가지치기 설정은 다음과 같습니다.

max_leaf_nodes: 리프 노드의 최대 개수를 지정합니다. 기본값은 None으로 제한이 없습니다.

min_samples_leaf: 리프 노드가 되기 위한 최소 샘플 개수나 샘플의 비율을 지정합니다. 기본값은 1입니다.

min_samples_split: 노드 분할을 위한 최소 샘플 개수나 샘플의 비율을 지정합니다. 기본값은 2입니다.

min_impurity_decrease: 노드 분할이 감소시킬 최소 불순도를 지정합니다. 기본값은 0입니다.

min_impurity_split: 트리 성장을 멈출 불순도 임계 값입니다. 기본값은 0입니다. 이 매개변수는 사이킷런 0.25 버전에서 삭제됩니다. 대신 min_impurity_decrease를 사용하세요.

감소되는 불순도 크기는 (현재 노드의 불순도) * (현재 노드의 샘플 개수) - (오른쪽 자식 노드의 불순도) * (오른쪽 자식 노드의 샘플 개수) - (왼쪽 자식 노드의 불순도) * (왼쪽 자식 노드의 샘플 개수)를 계산한 후 전체 샘플 개수로 나누어 구합니다.

사이킷런 0.22 버전에서 사후 가지치기 중 하나인 비용 복잡도 가지치기(cost complexity pruning) 기능이 추가되었습니다. 이 방식은 현재 노드의 복잡도와 하위 트리의 복잡도 차이가 가장 작은 가지를 제거합니다. 사이킷런은 불순도를 기준으로 가지치기를 진행하며 ccp_alpha 매개변수의 값이 클수록 가지치기 정도가 늘어납니다. 기본값은 0으로 가지치기를 수행하지 않습니다. 이 매개변수는 결정 트리뿐만 아니라 결정 트리를 기반으로 하는 엑스트라 트리(ExtraTree), 엑스트라 트리즈(ExtraTrees), 랜덤 포레스트(RandomForest), 그레이디언트 부스팅(GradientBoosting)에도 추가되었습니다. 비용 복잡도 가지치기에 관한 더 자세한 내용은 http://bit.ly/sklearn-ccp를 참고하세요.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.