[머신러닝/딥러닝] 회귀예측 13 - 스태킹앙상블2, KNN 하이퍼파라미터 튜닝
오늘은 지난시간에 고민했던 부분들을 모두 직접 시도해보았다.
저번포스팅에서는 하이퍼파라미터 튜닝을 한 3개의 모델을 가지고
LGBM을 최종 메타모델로하여 스태킹 앙상블을 진행하였다.
하지만 베이스모델인 3개의 모델 중 LGBM이 포함되어있어서 그런지
베이스모델의 LGBM과 스태킹앙상블을 거친 메타모델LGBM의 성능이 거의 똑같음을 보여줬다.
< 지난 포스팅 >
https://jayindustry.tistory.com/44
[머신러닝/딥러닝] 회귀예측 12 - 스태킹앙상블
지난시간에 진행한 3개의 모델에 대한 하이퍼파라미터 튜닝을 진행한 후, 스태킹앙상블을 진행하였다. < 지난 포스팅 > https://jayindustry.tistory.com/41 [머신러닝/딥러닝] 회귀예측 11 - 머신러닝 모델
jayindustry.tistory.com
< 지난시간에 했던 고민 >
[ 개요 ]
그래서 오늘은 과연 메타모델이 베이스모델에 있는 모델을 사용하면, 성능이 그대로인지 확인하기 위하여
메타모델을 베이스모델에 있는 Catboost와 베이스 모델에 없는 KNN으로 진행해보았다.
3개의 베이스모델 모두 옵튜나 + K fold기법으로 하이퍼파라미터 튜닝을 모두 거쳤고,
마지막에 사용된 메타모델 CatBoost, KNN도 같은 방법으로 튜닝하였다.
[ 내용 ]
1. MetaModel = CatBoostRegressor(**best params)
앞선 블로그에서 계속 포스팅했듯, 3개의 베이스 모델은 다음과 같다.
LightGBM, XGBoost, CatBoost
-> 모두 Regressor(회귀모델)
먼저 베이스모델들의 손실함수 결과는 다음과 같다.
그리고 최종 메타모델을 CatBoost로 했을 때, 최종결과는...
Train Score : 0.2945
Validation Score : 0.2965
결국 베이스모델에서 진행한 CatBoost모델의 성능과 같았다.
이로써, 저번 LGBM과 이번 Catboost실험을 통해,
앙상블 최종메타모델이 베이스모델에 있으면 성능이 거의 그대로라는 것을 알 수 있었다.
2. MetaModel = KNeighborsRegressor(**best params)
그래서 이번엔 메타모델을 KNN으로 진행해보았다.
총 4개의 파라미터를 옵튜나로 탐색하였고,
: n_neighbors, weights,algorithm, p
K fold기법으로 데이터를 5파트로 나누어 각각 10회 탐색하였다.
탐색한 최상의 파라미터를 직접 세팅하고,
스태킹 앙상블을 진행한다.
[ 결과 ]
< 베이스 모델들과 비교 >
오히려 KNN스태킹앙상블은 성능이 더 낮게 나왔다.
[ 고민 ]
결과가 3개의 베이스모델보다 낮게 나온 이유가 뭘까?
- 스태킹 앙상블 방법이 잘못되었나?
- 앙상블코드에 문제가 있나?
- 모델선정에 문제가 있을까?
무턱대고 많은 모델을 사용한다고 좋은게 아닌 것 같다.
4명이 스터디를 하는데 1명이 애매한 답들을 내놓아서 나머지를 오히려 방해하는 느낌이다.
실제로 KNN은 단일학습시켰을 때, 앞선 3개의 베이스모델들보다 예측률이 비교적 낮았다.
성능이 좋게나온 모델들을 잘 선정하여, 낮은 성능의 모델은 과감히 drop해줘야겠다.
이렇게 다양하게 실험해보면서 최상의 예측률이 나오는 경우의 수를 찾아가는게 머신러닝 회귀예측의 참맛인것같다.
다음엔 베이스모델의 수를 늘려보고,
메타모델을 가장 스코어가 높은 Catboost로 선정해보려고한다.
Try 1.
베이스모델은 LGBM, XGBoost, AdaBoost, KNN 으로 진행하고
메타모델은 CatBoost로 진행해본다.
Try 2.
베이스 모델들 중, 가장 점수가 낮은 모델 하나를 제거하고 그대로 진행해본다.
최종적으로 LGBM,XGBoost,Cat으로 검증했을 때와의 점수를 비교해본다.