본문 바로가기
Archive/TIL

[TIL] Soft Voting, Hard Voting

by 다람이도토리 2024. 1. 14.

캐글을 풀게 되다가 알게 된 내용.

기본적으로 Ensemble 은 보팅, 배깅과 부스팅으로 나뉘는데, 부스팅은 약화된 학습기를 가지고 중첩해서 학습을 하는거였다면, 배깅과 보팅은 기본적으로 투표를 활용한다.

- 보팅 : 한 데이터 세트에 대해서 "서로 다른 알고리즘"을 가진 분류기들을 결합하는 방식
- 배깅 : 각 분류기는 모두 같은 유형의 알고리즘, 데이터 샘플링이 달라짐(부트스트래핑)

여기서, 보팅의 경우는 하드보팅과 소프트 보팅으로 나뉜다.
- 하드 보팅 : 각 분류기의 최종 결과에 따른 다수결
- 소프트 보팅 : 각 분류기마다 Class의 확률을 정하고, 그 확률들의 평균값이 큰 값을 최종으로 결정.

from sklearn.ensemble import VotingClassifier
vo_clf = VotingClassifier(estimators = [('lgbm',model_lgbmc),
                                        ('gb', model_gbc),
                                        ('cb', model_cbc)], voting = 'soft')
vo_clf.fit(X, y)
final_ensemble_voclf = vo_clf.predict_proba(test_df)
get_final_df(final_ensemble_voclf)

다음과 같이 각 모델들을 넣고, 해당 모델들을 학습시킨다.

voting에서 이제 soft로 할지 hard로 할지 결정하면 된다.

실전에서 많이 쓸지는 모르겠는데, 캐글 등의 경진대회 에서는 유용하게 사용할 것으로 예상된다.