AI

GridSearch - 교차 검증과 최적의 하이퍼 파리미터 찾기

HHB 2022. 12. 4. 00:14

하이퍼 파라미터는 머신러닝 알고리즘을 구성하는 주요 구성 요소이며, 이 값을 조정해 알고리즘의 예측 성능을 개선할 수 있습니다.

 

사이킷런은 GridSearchCV 를 제공해 하이퍼 파라미터를 순차적으로 입력하면서 편리하게 최적의 파라미터를 찾아 준다.

 

from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import cross_val_score
import numpy as np

dt = DecisionTreeClassifier(max_depth=3, min_samples_split= 5)
X = iris_df.drop('label', axis=1)
y = iris_df['label']

X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=1, shuffle=True, test_size=0.2)

scores = cross_val_score(dt, X_train, y_train, scoring = 'accuracy', cv=5)
print('교차 검증별 정확도 :', np.round(scores, 4))
print("평균 검증 정확도 :", np.round(np.mean(scores), 4))

DecisionTree 같은 경우 max_depth, min_samples_split 등 여러 파라미터가 존재한다.

이런 파라미터들은 사람이 직접 정해줘야 하는데 데이터에 맞는 최적의 하이퍼 파라미터 조합을 찾기엔 오랜 기간, 자원 손실이 크다.

 

from sklearn.model_selection import GridSearchCV

parms = {
    'max_depth':[2,4,6],
    'min_samples_split':[2, 4]
}

grid = GridSearchCV(dt, parms, cv=5, refit=True)
grid.fit(X_train, y_train)

print("GridSearch 최적의 파라미터 :", grid.best_params_)
print("GridSearch 최고 정확도", grid.best_score_)

 

탐색할 파라미터를 딕셔너리 형태로 만들어 사용한다.

cv는 kfold의 k를 뜻한다.

refit는 최적의 파라미터로 재 학습을 시킬지의 여부다.

 

 

best_estimator = grid.best_estimator_

pred = best_estimator.predict(X_test)
print("테스트 데이터 정확도 :", accuracy_score(y_test, pred))
#테스트 데이터 정확도 : 0.9666666666666667

최적의 파라미터를 찾은 후 별도의 테스트 세트를 이용해 평가하는 것이 머신러닝 모델 적용 방법이다.

728x90
반응형
LIST