머신러닝/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)
위의 코드를 활용해서 진행하면 된다.