Machine Learning

[sklearn] GridSearchCV

주댕이 2024. 3. 5. 14:51

# GirdSearchCV

  • Scikit-learn 라이브러리에서 제공하는 하이퍼파라미터 튜닝을 위한 기능 중 하나
  • 하이퍼파라미터는 모델을 학습할 때 사전에 정의해야 하는 매개변수로, 모델의 학습 및 성능에 영향을 미친다.
  • GridSearchCV를 사용하면 여러 하이퍼파라미터의 조합을 시도하여 최적의 조합을 찾을 수 있다.

 

# GridSearchCV를 이용하여 붓꽃 데이터를 예측 분석하기

  • train_test_split()을 이용하여 학습 데이터와 테스트 데이터 분리하기
  • 테스트할 하이퍼 파라미터 세트는 딕셔너리 형태로, 하이퍼 파라미터의 명칭은 문자열 Key 값으로, 하이퍼 파라미터의 값은 리스트 형으로 설정
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import GridSearchCV

# 데이터를 로딩하고 학습데이타와 테스트 데이터 분리
iris_data = load_iris()
X_train, X_test, y_train, y_test = train_test_split(iris_data.data, iris_data.target, 
                                                    test_size=0.2, random_state=121)
dtree = DecisionTreeClassifier()

# 파라미터 딕셔너리 형태로 설정
parameters = {"max_depth" : [1, 2, 3], "min_samples_split" : [2, 3]}

 

  • 학습 데이터 세트를 GridSearchCV 객체의 fit(학습 데이터 세트) 메서드에 인자로 입력한다.
  • GridSearchCV 객체의 fit(학습 데이터 세트) 메서드를 수행하면 학습 데이터를 cv에 기술된 폴딩 세트로 분할하여 param_grid에 기술된 하이퍼 파라미터를 순차적으로 편경하면서 학습/평가를 수행하고 그 결과를 cv_results_ 속성에 기록한다.
  • cv_results_ 는 gridserchcv의 결과 세트로서 딕셔너리 형태로 key 값과 리스트 형태의 value 값을 가진다.
import pandas as pd

# param_grid의 하이퍼 파라미터를 3개의 train, test set fold로 나누어 테스트 수행 설정
### refit=True가 default: True이면 가장 좋은 파라미터 설정으로 재학습시킨다
grid_dtree = GridSearchCV(dtree, param_grid = parameters, cv = 3, refit=True)

# 붓꽃 학습 데이터로 param_grid의 하이퍼 파라미터를 순차적으로 학습/평가
grid_dtree.fit(X_train, y_train)

# GridSearchCV 결과를 추출하여 DataFrame으로 변환
scores_df = pd.DataFrame(grid_dtree.cv_results_)
scores_df

  • 총 6개의 결과를 볼 수 있다: 하이퍼 파라미터 max_depth와 min_samples_split을 순차적으로 총 6번 변경하면서 학습 및 평가를 수행했다.
  • params: 수행할 때마다 적용된 개별 하이퍼 파라미터값을 나타낸다.
  • rank_test_score: 하이퍼 파라미터별로 성능이 좋은 score 순위를 나타낸다. 1이 가장 뛰어난 순위이며 이때의 파라미터가 최적의 하이퍼 파라미터이다.
  • mena_test_score: 개별 하이퍼 하라미터별로 CV의 폴딩 테스트 세트에 대해 총 수행한 평가 평균값
  • GridSearchCV 객체의 fit()을 수행하면 최고 성능을 나타낸 하이퍼 파라미터의 값과 그때의 평가 결과 값이 각각 best_params_, best_score_ 속성에 기록된다.
# 최적의 파라미터
grid_dtree.best_params_

# 최고 정확도
grid_dtree.best_score_

  • GridSearchCV 객체의 생성 파라미터로 refit=True가 디폴트이다.
  • refit=True이면 GridSearchCV가 최적 성능을 나타내는 하이퍼 파라미터로 Estimator를 학습해 best_estimator_로 저장한다.
  • 이미 학습된 best_estimator_를 이용해 앞에서 train_test_split()으로 분리한 테스트 데이터 세트에 대해 예측하고 성능 평가하기
# GridSearchCV의 refit으로 이미 학습된 estimator 반환
estimator = grid_dtree.best_estimator_

# GridSearchCV의 best_estimator_는 이미 최적 학습이 되었으므로 별도의 학습이 필요가 없다
pred = estimator.predict(X_test)
accuracy_score(y_test, pred)

 

728x90

'Machine Learning' 카테고리의 다른 글

[sklearn] 데이터 인코딩  (0) 2024.03.05
[ML] Feature Engineering  (0) 2024.03.05
[ML] 하이퍼 파라미터 튜닝  (0) 2024.03.05
[sklearn] Stratified K 폴드  (2) 2024.03.05
[sklearn] K 폴드 교차 검증  (0) 2024.03.05