-
Ensemble 의 기본머신러닝/Ensemble 활용방안 2022. 8. 25. 12:20
이번에는 Ensemble(앙상블)에 대해 정리해보고자 한다.
Ensemble은 Assemble의 불어이다.
거두절미하고 본론으로 들어가면 ,
2개 이상의 모델의 결과를 조합해서 최적을 만들어내는 방식으로,
회귀/분류 모델마다 약간의 상이한점이 있다.
본 포스팅에서는 sklearn에서 일반적으로 제공하는 VotingClassifier의 활용보단 Customizing한 방법을 설명하고자 한다.
추후 Voting의 'soft voting' , 'hard voting' 등등 다양한 개념들을 포스팅하고자한다.
Regression(회귀)문제에서의 Ensemble은
대수적으로 더하고 나누고 비율을 선정하는 경우가 많다.cat_reg = CatBoostRegressor() cat_reg.fit(X_train ,y_train) pred_cat = cat_reg.predict(X_test) ### catboost로 예측한 결과 rf_reg = RandomForestRegressor() rf_reg.fit(X_train , y_train) pred_rf = rf_reg.predict(X_test ### randomforest로 예측한 결과 pred_total = (pred_cat + pred_rf) / 2 ### 2개를 더하고 나눠서 앙상블
예를 들어 , pred_cat 이 pred_rf 보다 모델의 성능이 더 좋을 경우
비율로 정할 수 도 있다. 제출한 후 리더보드를 확인해가며 조정해보자!pred_total = 0.7 * pred_cat + 0.3 * pred_rf
Classification(분류)문제에서의 Ensemble은
대수적으로 더하고 나눌 경우 정수형이 안될 수 있으므로 주의해야한다.
따라서 그럴때는 threshold를 선정해서 해야한다.cat_clf = CatBoostClassifier() cat_clf.fit(X_train ,y_train) pred_cat = cat_clf.predict(X_test) ### catboost로 예측한 결과 rf_clf = RandomForestClassifier() rf_clf.fit(X_train , y_train) pred_rf = rf_clf.predict(X_test) ### randomforest로 예측한 결과 pred_total = (pred_cat + pred_rf) / 2 ### 2개를 더하고 나눠서 앙상블하게 되면 0.5 , 0.67 등의 소수점 값이 나온다 따라서 ### 아래와 같이 threshold를 사용한다. prediction ### 임의의 데이터프레임 threshold = 0.5 ### 값은 알아서 정하시면 됩니다. prediction.loc[prediction["pred_total"] >= threshold , "pred_total"] = 1 prediction.loc[prediction["pred_total"] < threshold , "pred_total"] = 0 submission["Target"] = prediction["pred_total"] ### 이렇게 제출파일에 반영하시면 됩니다.
번외 1. random state만으로 앙상블하기
스코어링이 좋은 모델이 타 모델과 앙상블했을때 오히려 결과가 안좋을때는 동일한 모델의 컨디션에서
random_state(난수) 값만 변경해서 여러개를 더해서 앙상블하는 것도 한 방법추가적인 패키지에 대한 내용은 다음 포스팅에서 설명하기로 한다.
'머신러닝 > Ensemble 활용방안' 카테고리의 다른 글
Ensemble 활용방안 2편(Multiple Classification , Voting Classifier) (0) 2022.09.01