더북(TheBook)

Note ≡


역주 사이킷런 0.22 버전에서 StackingClassifierStackingRegressor가 추가되었습니다. 앞서 만든 분류기를 사용해서 StackingClassifier에 그리드 서치를 적용해 보겠습니다. StackingClassifierVotingClassifier와 비슷하게 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
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.