본문 바로가기

Artificial Intelligence/Machine Learning

[Machine Learning] 영화 관객수 예측 모델 (5)

728x90

이제 마지막으로 GridSearchCV를 사용하여 최적의 파라미터를 찾아 모델에 적용해보겠다.

 

from sklearn.model_selection import GridSearchCV

 

GridSearchCV를 import 해준다.

 

params = {
    'learning_rate': [0.1, 0.01, 0.003],
    'min_child_samples': [20, 30]
}

gs = GridSearchCV(estimator=model,
                 param_grid=params,
                  scoring= 'neg_mean_squared_error',
                  cv=k_fold)

 

LGBMRegressor에서  설정할 수 있는 learning_rate, min_child_samples 값을 적당하게 설정하고, GridSearchCV에 값을 초기화해준다.

 

gs.fit(X_train, y_train)

 

gs를 학습시켜준다.

 

gs.best_params_

{'learning_rate': 0.003, 'min_child_samples': 30}

 

학습하여 나온 결과를 토대로 최적의 파라미터를 확인하면 'learning_rate': 0.003, 'min_child_samples': 30 이 나온다.

 

model = lgb.LGBMRegressor(random_state=1234,n_estimators=1000, learning_rate=0.003, min_child_samples=30)

models = []

for train_idx, val_idx in k_fold.split(X_train):
    x_t = X_train.iloc[train_idx]
    y_t = y_train.iloc[train_idx]
    x_val = X_train.iloc[val_idx]
    y_val = y_train.iloc[val_idx]
    
    models.append(model.fit(x_t, y_t, eval_set=(x_val, y_val), early_stopping_rounds=100, verbose = 100))

 

최적의 파라미터를 적용하여 model을 생성해주고, 미리 설정해두었던 k_fold 값에 따라 모델을 학습시켜준다.

 

preds = []

for model in models:
    preds.append(model.predict(X_test))

 

학습된 모델들의 예측값을 preds에 넣어준다.

 

gridSearchGBM = submission.copy()
gridSearchGBM['box_off_num'] = np.mean(preds, axis=0)

 

submission을 gridSearchGBM에 복사해주고, 예측된 결괏값의 평균을 gridSearchGBM ['box_off_num']에 저장해준다.

 

pd.options.display.float_format = '{:.1f}'.format
print(featureLightGBM.tail())

               title  box_off_num
238        해에게서 소년에게     172238.8
239           울보 권투부     209268.0
240             어떤살인    1286869.1
241        말하지 못한 비밀     359618.3
242  조선안방 스캔들-칠거지악 2     124363.3

 

예측된 결과값을 확인해본다.

 

pd.reset_option('display.float_format')
gridSearchGBM.to_csv('gridSearchGBM.csv', index=False)

 

결과값을 csv 파일로 저장해준다.

 

 

 

728x90