사이킷런에는 BaggingClassifier 분류기가 이미 구현되어 있습니다. 이 클래스는 ensemble 모듈에서 임포트할 수 있습니다. 여기서는 훈련 데이터셋으로부터 추출한 부트스트랩 샘플에서 가지치기가 없는 500개의 결정 트리를 학습하여 앙상블을 만들겠습니다.15
>>> from sklearn.ensemble import BaggingClassifier
>>> tree = DecisionTreeClassifier(criterion='entropy',
... random_state=1,
... max_depth=None)
>>> bag = BaggingClassifier(base_estimator=tree,
... n_estimators=500,
... max_samples=1.0,
... max_features=1.0,
... bootstrap=True,
... bootstrap_features=False,
... n_jobs=1,
... random_state=1)
그다음 배깅 분류기와 가지치기가 없는 단일 결정 트리에서 훈련 데이터셋과 테스트 데이터셋의 예측 정확도를 계산하여 성능을 비교하겠습니다.
>>> from sklearn.metrics import accuracy_score
>>> tree = tree.fit(X_train, y_train)
>>> y_train_pred = tree.predict(X_train)
>>> y_test_pred = tree.predict(X_test)
>>> tree_train = accuracy_score(y_train, y_train_pred)
>>> tree_test = accuracy_score(y_test, y_test_pred)
>>> print('결정 트리의 훈련 정확도/테스트 정확도 %.3f/%.3f'
... % (tree_train, tree_test))
결정 트리의 훈련 정확도/테스트 정확도 1.000/0.833
15 역주 사이킷런 0.20 버전부터는 전처리 단계가 포함된 파이프라인도 BaggingClassifier와 BaggingRegressor의 base_estimator에 사용할 수 있습니다. 코드에서 BaggingClassifier의 max_samples, max_features, bootstrap, bootstrap_features에 지정한 값은 모두 기본값입니다. n_estimators의 기본값은 10입니다.