Note ≡
역주 사이킷런 0.22 버전에서 StackingClassifier와 StackingRegressor가 추가되었습니다. 앞서 만든 분류기를 사용해서 StackingClassifier에 그리드 서치를 적용해 보겠습니다. StackingClassifier는 VotingClassifier와 비슷하게 estimators 매개변수로 분류기 이름과 객체로 구성된 튜플의 리스트를 입력받습니다. final_estimator 매개변수로는 최종 결정을 위한 분류기를 지정합니다. 매개변수 그리드를 지정할 때는 튜플에 사용한 분류기 이름을 접두사로 사용합니다.
>>> from sklearn.ensemble import StackingClassifier
>>> stack = StackingClassifier(estimators=[
... ('lr', pipe1), ('dt', clf2), ('knn', pipe3)],
... final_estimator=LogisticRegression())
>>> params = {'dt_ _max_depth': [1, 2],
... 'lr_ _clf_ _C': [0.001, 0.1, 100.0]}
>>> grid = GridSearchCV(estimator=stack,
... param_grid=params,
... cv=10,
... scoring='roc_auc')
>>> grid.fit(X_train, y_train)
>>> for r, _ in enumerate(grid.cv_results_['mean_test_score']):
... print("%0.3f +/- %0.2f %r"
... % (grid.cv_results_['mean_test_score'][r],
... grid.cv_results_['std_test_score'][r] / 2.0,
... grid.cv_results_['params'][r]))
0.950 +/- 0.07 {'dt__max_depth': 1, 'lr__clf__C': 0.001}
0.983 +/- 0.02 {'dt__max_depth': 1, 'lr__clf__C': 0.1}
0.967 +/- 0.05 {'dt__max_depth': 1, 'lr__clf__C': 100.0}
0.950 +/- 0.07 {'dt__max_depth': 2, 'lr__clf__C': 0.001}
0.983 +/- 0.02 {'dt__max_depth': 2, 'lr__clf__C': 0.1}
0.967 +/- 0.05 {'dt__max_depth': 2, 'lr__clf__C': 100.0}
그리드 서치가 찾은 최적의 매개변수와 정확도는 다음과 같습니다.
>>> print('최적의 매개변수: %s' % grid.best_params_)
>>> print('정확도: %.2f' % grid.best_score_)
최적의 매개변수: {'dt__max_depth': 1, 'lr__clf__C': 0.1}
정확도: 0.98