더북(TheBook)

3.6.2 결정 트리 만들기

결정 트리는 특성 공간을 사각 격자로 나누기 때문에 복잡한 결정 경계를 만들 수 있습니다. 결정 트리가 깊어질수록 결정 경계가 복잡해지고 과대적합되기 쉽기 때문에 주의해야 합니다. 사이킷런을 사용하여 지니 불순도 조건으로 최대 깊이가 4인 결정 트리를 훈련해 보겠습니다. 결정 트리 알고리즘은 특성의 스케일을 조정할 필요가 없지만 그래프 표현을 위해 조정할 수도 있습니다. 코드는 다음과 같습니다.

Note ≡


역주 DecisionTreeClassifiercriterion 매개변수 기본값은 지니 불순도를 의미하는 'gini'입니다. 그 외 엔트로피 불순도를 나타내는 'entropy'를 지정할 수 있습니다.

max_depth의 기본값은 None으로 모든 리프 노드가 순수해질 때까지 트리가 성장합니다. 노드 분할을 위해 고려할 특성의 개수를 지정하는 max_features 기본값은 None으로 전체 특성을 사용합니다. 이 매개변수에 특성의 개수나 특성의 비율을 지정할 수 있으며 'auto''sqrt'로 지정하면 특성 개수의 제곱근을 사용하고 'log2'로 지정하면 특성 개수의 이진 로그 값을 사용합니다.

사이킷런 0.21 버전에서 히스토그램 기반 그레이디언트 부스팅이 추가되었고 presort 매개변수를 사용해서 얻을 수 있는 속도 증가가 크지 않기 때문에 결정 트리와 그레이디언트 부스팅 클래스의 presort 매개변수가 사이킷런 0.24 버전에서 삭제됩니다. 같은 이유로 정렬된 훈련 샘플의 인덱스를 전달하는 fit 메서드의 X_idx_sorted 매개변수도 사이킷런 0.24 버전부터 Deprecated 경고를 발생시키고 아무런 효과를 내지 않습니다. 이 매개변수는 사이킷런 0.26 버전에서 삭제됩니다.

>>> from sklearn.tree import DecisionTreeClassifier
>>> tree = DecisionTreeClassifier(criterion='gini',
...                               max_depth=4,
...                               random_state=1)
>>> tree.fit(X_train, y_train)
>>> X_combined = np.vstack((X_train, X_test))
>>> y_combined = np.hstack((y_train, y_test))
>>> plot_decision_regions(X_combined,
...                       y_combined,
...                       classifier=tree,
...                       test_idx=range(105, 150))
>>> plt.xlabel('petal length [cm]')
>>> plt.ylabel('petal width [cm]')
>>> plt.legend(loc='upper left')
>>> plt.tight_layout()
>>> plt.show()
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.