머신러닝/Ensemble 활용방안

Ensemble 활용방안 2편(Multiple Classification , Voting Classifier)

Stevelee_HMC 2022. 9. 1. 06:19

이번에는 지난 포스팅에서 다루었던 

binary classification & regression 외의 추가적인 ensemble에 대해서 다뤄 보고자 한다.

 

1) Multiple Classification

Target Value가 0,1 이 아니라 여러개일 경우에 
앞서 언급한 Ensemble 활용방안 1편의 내용을 그대로 활용하면 안된다.
항상 문제를 정확히 파악 및 이해 후 전략적으로 접근을 하는것이 예측률을 높이는 중요한 방법임을 명심하자

Target이 Multiple classification(타겟값이 여러개)일 경우 예를들어

Target value list = [0,1,2,3,4,5]라고 가정해보자 

 

  rf_clf cat_clf xgb_clf lgbm_clf ensemble
pred
(예측값)
0 1 2 3 ?

위와 같이 특정 행에 대한 예측을 할 경우, 

manual 하게 Ensemble(앙상블)하는 방법은 아래와 같다.

pred_total = (rf_clf + cat_clf + xgb_clf + lgbm_clf) /4 

int(np.round(pred_total)) ### 다 더한후 갯수로 나눈 다음 반올림 및 정수형 int로 처리 

int(np.ceil(pred_total))  ### 다 더한후 갯수로 나눈 다음 올림 및 정수형 int로 처리 

int(np.trunc(pred_total)) ### 다 더한후 갯수로 나눈 다음 내림 및 정수형 int로 처리

중요한것은 분류 결과이므로 Target value list 안의 값으로만 결과를 도출해야하고 , 정수형이어야한다.

 

2) VotingClassifier

 

다수결 분류를 통해서 결정하는 방법으로 두가지가 있다

1. Hard Voting Classifier : 가장 많은 표를 얻은 클래스를 최종 예측값으로 정한다.
  rf_clf cat_clf xgb_clf lgbm_clf
pred(예측값) 0 1 1 2

위와 같은 경우 1로 최종 결과를 산출 

 

2. Soft Voting Classifier : 각 분류기의 예측 확률(predict probability)의 평균이 높은 클래스를 예측 클래스로 정함
  rf_clf cat_clf xgb_clf lgbm_clf
pred(예측값) 0 1 1 2
predict_probability_0  0.6 0.1 0.2 0.3
predict_probability_1 0.3 0.8 0.7 0.3
predict_probability_2 0.1 0.1 0.1 0.4

predict_probability_0 의 평균 = (0.6 + 0.1 + 0.2 + 0.3) / 4  = 0.3
predict_probability_1 의 평균 = (0.3 + 0.8 + 0.7 + 0.3) / 4  = 0.525

predict_probability_2 의 평균 = (0.1 + 0.1 + 0.1 + 0.4) / 4  = 0.175

 

따라서 1로 최종 Ensemble 결과를 도출한다.

 

from sklearn.ensemble import VotingClassifier , RandomForestRegressor
from catboost import CatBoostRegressor
from xgboost import XGBRegressor 
from lightgbm import LGBMRegressor 

rf_clf = RandomForestRegressor()
rf_clf.fit(X_train , y_train) ### 학습까지만 수행

cat_clf = CatBoostRegressor()
cat_clf.fit(X_train , y_train) ### 학습까지만 수행

xgb_clf = XGBRegressor()
xgb_clf.fit(X_train , y_train) ### 학습까지만 수행

lgbm_clf = LGBMRegressor()
lgbm_clf.fit(X_train , y_train) ### 학습까지만 수행

votingC = VotingClassifier(estimators = [('rf' , rf_clf) , ('cat' , cat_clf) , ('xgb' , xgb_clf) , ('lgbm' , lgbm_clf)] ,voting = 'hard' ,n_jobs = -1)


### Ensemble할 모든 학습된 모델 추가 및 voting 방식을 'hard' , 'soft' 결정 

votingC.fit(X_train ,y_train)
pred_voting = votingC.predict(X_test)

위의 코드를 활용해서 진행하면 된다.