본문 바로가기

Artificial Intelligence/Machine Learning

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

728x90

KFold 교차 검증을 통해서 기본 모델에서 성능 향상을 해보겠다. KFold 교차 검증은 K개의 fold를 만들어서 학습과 검증을 하는 방법을 말한다. KFold 교차 검증의 이점은 총 데이터 개수가 적은 데이터 셋에 대하여 정확도를 향상할 수 있다는 것에 있다. 다음은 5개의 fold를 만들어서 교차 과정이 진행되는 과정을 나타낸 것이다. 파란색은 train 데이터, 초록색은 test 데이터이다.

 

위의 그림처럼 5번의 학습과 검증을 진행한 모델들을 저장하여 예측값들의 평균을 구하면 한번 학습된 모델보다 더 좋은 성능을 기대할 수 있다.

 

from sklearn.model_selection import KFold
k_fold = KFold(n_splits=5, shuffle=True, random_state=1234)

 

KFold를 import 해주고, 모델을 만들어준다.

 

model = lgb.LGBMRegressor(random_state=1234,n_estimators=1000)

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))

 

이전 모델과 같은 random_state를 설정해주고 k_fold에 X_train 데이터를 넣어주어 5번의 학습을 시켜준다.

 

preds = []

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

5

 

preds 배열을 만들어서 만들어두었던 모델들의 예측값을 저장해준다.

 

kFoldLightGBM = submission.copy()
kFoldLightGBM['box_off_num'] = np.mean(preds, axis=0)
kFoldLightGBM.to_csv('kFoldLightGBM.csv', index=False)
kFoldLightGBM.tail()

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

 

제출할 파일을 복사해준 후에 preds에 있는 값들의 평균을 kFoldLightGBM의 box_off_num column에 저장해준다. 마지막으로 .csv 파일로 저장한다.

728x90