자료를 공개한 저자 오렐리앙 제롱과 강의자료를 지원한 한빛아카데미에게 진심어린 감사를 전합니다.
사이킷런의 DecisionTreeClassifier
모델 활용
max_depth=2
: 결정트리의 최대 깊이 지정.
여기서는 최대 2번의 데이터셋 분할 허용. 기본값은 None
이며 무제한 데이터셋 분할 허용.
tree_clf = DecisionTreeClassifier(max_depth=2, random_state=42)
tree_clf.fit(X, y)
export_graphviz()
함수 활용gini
: 해당 노드의 지니 불순도 측정값gini=0
.samples
: 해당 노드에 포함된 샘플 수value
: 해당 노드에 포함된 샘플들의 실제 클래스별 개수. 타깃 정보 활용됨.class
: 각 클래스별 비율을 계산하여 가장 높은 비율에 해당하는 클래스 선정꽃잎 길이와 너비: 각각 5cm, 1.5cm
데이터가 주어지면 루트에서 시작
분할 1단계: 꽃잎 길이가 2.45cm 이하가 아니기에 오른편으로 이동.
분할 2단계: 꽃잎 너비가 1.75cm 이하이기에 왼편으로 이동. 버시컬러로 판정.
아래 그림은 max_depth=3
으로 지정해서 학습한 결정트리의 결졍경계를 보여준다.
불순도
$$G_i = 1 - \sum_{k=1}^{K} {p_{i,k}}^2$$
여기서 $p_{i,k}$는 $i$ 번째 노드에 있는 훈련 샘플 중 클래스 $k$에 속한 샘플의 비율임. $K$는 클래스의 수.
max_depth
등 규제의 한계에 다다르거나 더 이상 불순도를 줄이는 분할이 불가능할 때까지 진행.DecisionTreeClassifier
의 presort=True
옵션 설정: 훈련 세트를 먼저 정렬시킨 후 훈련 시작DecisionTreeClassifier
의 criterion="entropy"
옵션 설정: DecisionTreeClassifier
규제하기¶max_depth
: 결정트리의 최대 높이 제한min_samples_split
: 노드를 분할하기 위해 필요한 최소 샘플 수min_samples_leaf
:리프 노드에 포함되어야 하는 최소 샘플 수min_weight_fraction_leaf
: min_samples_leaf
와 동일한 역할 수행max_leaf_nodes
: 허용된 리프 노드의 최대 개수max_features
: 각 노드에서 분할 평가에 사용될 수 있는 최대 특성 수min_
접두사 사용 규제: 값을 키울 것max_
접두사 사용 규제: 값을 감소시킬 것DecisionTreeClassifier
규제 사용¶moons
데이터셋에 대한 결정트리 모델 학습min_samples_leaf=4
. 일반화 성능이 보다 좋음.DecisionTreeRegressor
예측기 활용¶결정트리 알고리즘 아이디어를 거의 그대로 이용하여 회귀 문제에 적용 가능
tree_reg = DecisionTreeRegressor(max_depth=2, random_state=42)
tree_reg.fit(X, y)
max_depth=2
max_depth=3
samples
: 해당 노드에 속한 훈련 샘플 수value
: 해당 노드에 속한 훈련 샘플의 평균 타깃값mse
: 해당 노드에 속한 훈련 샘플의 평균제곱오차(MSE)value
사용.분류의 경우처럼 규제가 없으면 과대적합 발생할 수 있음.
왼편: 규제가 없는 경우. 과대적합 발생
오른편: min_samples_leaf=10