GridSearchCV란? 뭘까? 사용 방법(예시)

야 나두?!·2022년 4월 6일
4

꼬북이의 놀이터

목록 보기
4/5
post-thumbnail

GridSearchCV

안녕하세요. 이번에 GridSearchCV 모듈에 대한 설명과 사용 방법에 대해 예시로 보여주고자 합니다.
GridSearchCV란 머신러닝에서 모델의 성능향상을 위해 쓰이는 기법중 하나입니다.
사용자가 직접 모델의 하이퍼 파라미터의 값을 리스트로 입력하면 값에 대한 경우의 수마다 예측 성능을 측정 평가하여 비교하면서 최적의 하이퍼 파라미터 값을 찾는 과정을 진행합니다.

시간이 오래걸린다는 단점이 있으니 알아두세요!

어떻게 사용하는지 바로 보여드리도록 하겠습니다.

예시는 제가 직접 썼던 모델로 보여드리겠습니다.

  • 전처리 이후 train, val셋을 구성하신 후 사용해주세요.
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.linear_model import LogisticRegression
from lightgbm import LGBMClassifier
from xgboost import XGBClassifier
from catboost import CatBoostClassifier

xgb = XGBClassifier()
lgb = LGBMClassifier()
gbm = GradientBoostingClassifier()
cat = CatBoostClassifier()

lreg = LogisticRegression()
# 최적의 파라미터 값 찾아보기
from sklearn.model_selection import GridSearchCV
# XGB
param_xgb = {"max_depth": [10,30,50],
              "min_child_weight" : [1,3,6,10],
              "n_estimators": [200,300,500,1000]
              }    
# LGB                        
param_lgb = {"learning_rate" : [0.01,0.1,0.2,0.3,0.4,0.5],
             "max_depth" : [25, 50, 75],
             "num_leaves" : [100,300,500,900,1200],
             "n_estimators" : [100, 200, 300,500,800,1000],
             "learning_rate" : [0.01,0.1,0.2,0.3,0.4,0.5]
              }
# GBM              
param_gbm = {"max_depth" : [4,5,6,7,8,9,10],
             "learning_rate" : [0.01,0.1,0.2,0.3,0.4,0.5],
             "n_estimators" : [100,200,300,500]
              }
# CAT
param_cat = {"depth" : [6,4,5,7,8,9,10],
          "iterations" : [250,100,500,1000],
          "learning_rate" : [0.001,0.01,0.1,0.2,0.3], 
          "l2_leaf_reg" : [2,5,10,20,30],
          "border_count" : [254]
          }

# Logistic
param_lreg = { 'C' : [1.0, 3, 5, 7, 10],
              'max_iter': [50, 200, 100, 300, 500,700, 800]
              }
# cv = StratifiedKFold(n_splits=5, shuffle = True, random_state=42)
gscv_xgb = GridSearchCV (estimator = xgb, param_grid = param_xgb, scoring ='accuracy', cv = 3, refit=True, n_jobs=1, verbose=2)
gscv_lgb = GridSearchCV (estimator = lgb, param_grid = param_lgb, scoring ='accuracy', cv = 3, refit=True, n_jobs=1, verbose=2)
gscv_gbm = GridSearchCV (estimator = gbm, param_grid = param_gbm, scoring ='accuracy', cv = 3, refit=True, n_jobs=1, verbose=2)
gscv_cat = GridSearchCV (estimator = cat, param_grid = param_cat, scoring ='accuracy', cv = 3, refit=True, n_jobs=1, verbose=2)
gscv_lreg = GridSearchCV (estimator = lreg, param_grid = param_lreg, scoring ='accuracy', cv = 3, refit=True, n_jobs=1, verbose=2)
gscv_xgb.fit(trainX, trainY)
gscv_lgb.fit(trainX, trainY)
gscv_gbm.fit(trainX, trainY)
gscv_cat.fit(trainX, trainY)
gscv_lreg.fit(trainX, trainY)

# time : 49mins (학습시간이 49분이나 걸렸습니다. 파라미터 값을 더 많이 설정한다면 더 오래 걸리겠죠?)
  • n_jobs = -1로 설정 하시면 모든 코어사용이 가능합니다. Default값은 1 입니다.
  • cv = 교차검증을 위한 fold 횟수 입니다. KFold를 쓰고 싶으신 분은 KFold를 설정해주셔도 됩니다.
    Ex) cv = StratifiedKFold(n_splits=5, shuffle = True, random_state=42)
  • refit : True면 가장 최적의 하이퍼 파라미터를 찾은 뒤 입력된 estimator 객체를 해당 하이퍼 파라미터로 재학습시킨다는 의미 입니다 . Default 값은 True입니다.
  • scoring : 찾으시는 다른 값으로 변경 가능합니다.
print("="*30)
print('XGB 파라미터: ', gscv_xgb.best_params_)
print('XGB 예측 정확도: {:.4f}'.format(gscv_xgb.best_score_))
print("="*30)
print('LGB 파라미터: ', gscv_lgb.best_params_)
print('LGB 예측 정확도: {:.4f}'.format(gscv_lgb.best_score_))
print("="*30)
print('GBM 파라미터: ', gscv_gbm.best_params_)
print('GBM 예측 정확도: {:.4f}'.format(gscv_gbm.best_score_))
print("="*30)
print('CAT 파라미터: ', gscv_cat.best_params_)
print('CAT 예측 정확도: {:.4f}'.format(gscv_cat.best_score_))
print("="*30)
print('Lreg 파라미터: ', gscv_lreg.best_params_)
print('Lreg 예측 정확도: {:.4f}'.format(gscv_lreg.best_score_))
print("="*30)
  • 모델.bestparams : 최적의 파라미터 값을 보여줍니다.
  • 모델.bestscore : 예측 정확도를 보여줍니다.
# 아래와 같은 결과값을 보여줍니다.
==============================
XGB 파라미터:  {'max_depth': 10, 'min_child_weight': 3, 'n_estimators': 200}
XGB 예측 정확도: 0.9279
==============================
LGB 파라미터:  {'learning_rate': 0.1, 'max_depth': 25, 'n_estimators': 1000, 'num_leaves': 100}
LGB 예측 정확도: 0.9308
==============================
GBM 파라미터:  {'learning_rate': 0.2, 'max_depth': 4, 'n_estimators': 200}
GMB 예측 정확도: 0.9308
==============================
CAT 파라미터:  {'border_count': 254, 'depth': 5, 'iterations': 500, 'l2_leaf_reg': 5, 'learning_rate': 0.1}
CAT 예측 정확도: 0.9350
==============================
Lreg 파라미터:  {'C': 10, 'max_iter': 100}
Lreg 예측 정확도: 0.8400
==============================

다른 모델 성능 향상을 위한 방법인 RandomSearchCV와 Optuna도 있으니 보고 싶으신분은 아래링크를 통해 확인하시면 됩니다.

[머신러닝] RandomSearchCV 사용 방법 및 GridSearchCV 차이점

[머신러닝] Optuna 모델 최적화 - 하이퍼파라미터 튜닝 사용법

좀 더 디테일한 정보를 원하시는분을 위한 링크

profile
"Hello World"

0개의 댓글