본문 바로가기
Data Analytics/MachineLearning

[ML] 머신러닝 모델의 성능을 향상시키는 방법 GridSearchCV

by Istj_eff 2022. 11. 7.

1. GridSearchCV란?

머신러닝에서 모델의 성능향상을 위해 쓰이는 기법 중 하나

사용자가 모델의 하이퍼 파라미터 값을 리스트로 입력하면 값에 대한 경우의 수마다 예측 성능을 측정 평가하여 비교하면서 최적의 하이퍼 파라미터 값을 찾는 과정을 진행한다.

 

GridSearchCV가 없다면 max_depth 가 3일때 가장 최적의 스코어를 뽑아내는지 1일때 가장 최적인 스코어를 뽑아내는지 일일이 학습을 해야 한다. 하지만 grid 파라미터 안에서 집합을 만들고 적용하면 최적화된 파라미터를 뽑아낼 수 있다.

 

시간이 오래걸린다는 단점이 있다.

 

 

2. GridSearchCV 생성자

  • estimator : classifier, regressor, pipeline 등 가능
  • param_grid : 튜닝을 위해 파라미터, 사용될 파라미터를 dictionary 형태로 만들어서 넣는다.
  • scoring : 예측 성능을 측정할 평가 방법을 넣는다. 보통 accuracy 로 지정하여서 정확도로 성능 평가를 한다.
  • cv : 교차 검증에서 몇개로 분할되는지 지정한다.
  • refit : True가 디폴트로 True로 하면 최적의 하이퍼 파라미터를 찾아서 재학습 시킨다.

 

3. Iris 데이터를 이용해 GridSearchCV 실습

import pandas as pd
import numpy as np
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import GridSearchCV, train_test_split
from sklearn.metrics import accuracy_score

iris_data = load_iris()
label = iris_data.target
data = iris_data.data
# train, test set 분리
X_train, X_val, y_train, y_val = train_test_split(data, label, test_size=0.2)


# GridSearchCV의 param_grid 설정
params = {
    'max_depth': [2, 3],
    'min_samples_split': [2, 3]
}

dtc = DecisionTreeClassifier()

grid_tree = GridSearchCV(dtc, param_grid=params, cv=3, refit=True)
grid_tree.fit(X_train, y_train)

print('best parameters : ', grid_tree.best_params_)
print('best score : ', grid_tree.best_score_)
em = grid_tree.best_estimator_
pred = em.predict(X_val)
accuracy_score(y_val, pred)
# out
best parameters :  {'max_depth': 2, 'min_samples_split': 2}
best score :  0.9416666666666668
0.9333333333333333

 

댓글