모델의 성능 향상을 위해 하이퍼파라미터 튜닝을 진행하며 사이킷런의 model_selection에서 제공하는GridSearchCV와RandomizedSearchCV를 이용하여 최적화할 수 있습니다.
• grid search를 통해 모두 탐색하여 최적의 하이퍼파라미터를 찾음 (시간 오래 걸림)
• RandomizedSearchCV 는 GridSearchCV와 달리 랜덤으로 N개의 조합만 탐색함(시간 내 최적의 하이퍼파라미터 탐색)
# 라이브러리 불러오기
fromsklearn.model_selection importGridSearchCV, RandomizedSearchCV
# 하이퍼파라미터
params={'learning_rate':[0.07, 0.05],
'max_depth':[3, 5, 7],
'n_estimators':[100, 200],
'subsample':[0.9, 0.8, 0.7]
}
# 데이터셋 로드
defmake_dataset2():
dataset = load_diabetes()
df = pd.DataFrame(dataset.data, columns=dataset.feature_names)
df['target'] = dataset.target
returndf.drop('target', axis=1), df['target']
X, y = make_dataset2()
# GridSearchCV
xgb = XGBRegressor()
grid = GridSearchCV(xgb, params, cv=3, n_jobs=-1) {모델,하파값,크로스밸리데이션을 몇 개로 나눌건지 적기 cv=3(개로 나눈다는 것), 옵션:n_jobs를 통해~}
grid.fit(X, y)
# 최적의 하이퍼파라미터를 찾음
grid.best_params_
# 하이퍼파라미터 튜닝 {위에서 나온 값을 넣은 것}
xgb = XGBRegressor(
learning_rate = 0.05,
max_depth = 3,
n_estimators = 100,
subsample =0.7
)
xgb.fit(X_train, y_train)
pred = xgb.predict(X_test)
mean_squared_error(y_test, pred)
# Randomized Search
xgb = XGBRegressor()
grid = RandomizedSearchCV(xgb, params, cv=3, n_iter=10, n_jobs=-1)
grid.fit(X, y)
# 최적의 하이퍼파라미터를 찾음
grid.best_params_