https://steadiness-193.tistory.com/286
위 포스팅에서 만든 데이터셋과 함수를 이용한다.
필요 라이브러리 호출 및 데이터셋 설정
임시로 정답지가 있는 데이터 셋을 train_test_split으로 나눠놓자
Cross validation / OOF validation
간단히 그리면 위 도식과 같다.
oof_pred
사실 이번 포스팅의 핵심은 여기 있다.
oof_pred는 총 5번 더해진 값이다.
다시 말하면
각 fold별 X_train과 y_train으로 학습한 모델이, 실제 unseen data (X_test)를 predict_proba한 것이다.
(지금은 unseen data를 tmp_x_test라고 가정한다.)
이는 각 fold 별로 학습을 한 뒤 예측한 값들을 앙상블 하므로 모델 검증을 동시에 진행할 수 있고,
과적합을 방지하는 장점이 있다.
단순히 cv 값을 구하고 그 모델로 한번 예측하는 것보다 성능이 좋을 수 있다.
OOF 앙상블은 KFold 교차 검증에서 생성되는 각 Fold에 대한 예측 값을 앙상블하는 기법으로,
모델 검증과 함께 앙상블을 진행할 수 있음
predict_proba를 하면 각 클래스를 예측할 확률을 구하기 때문에
총 5겹이므로 각 행별 합은 5가 나온다.
(* regression일땐 5로 나눠줘야 한다.)
np.argmax와 axis=1을 이용해 각 행별 큰 값의 인덱스를 뽑아낸다.
이를 미리 정답지로 나눠놨던 tmp_y_test와 비교해서 scoring 하는 것이다.
하지만 실제로는 train_test_split을 하지 않고 바로 data를 train과 valid로 나눠서 진행한다.
즉, 이렇게 Cross Validation Score만 구하고 그 값이 잘 나온다면 oof_pred를 제출용으로 이용하면 된다.
함수 정의
함수를 정의한 뒤 여러 모델을 시험해보고
각 모델별로 CV(cross validation) 값이 제일 높은 oof_pred를 구해보자
결과에 의하면 CV값은 LGBMClassifier를 이용했을 때 제일 높게 나왔다.
다시 lgb를 model 자리에 넣고 리턴 되는 oof_pred array를 받아내면 된다.
이를 sample_submission의 label 값으로 대체해서 제출하는 것이다.
'Machine Learning > 검증(Validation)' 카테고리의 다른 글
Validation - Voting Ensemble (VotingClassifier) (0) | 2020.09.22 |
---|---|
Validation - GridSearchCV (0) | 2020.09.22 |
Validation - StratifiedKFold (Cross Validation) (0) | 2020.09.21 |
Validation - KFold (0) | 2020.09.21 |