4-2. 앙상블 학습

jwKim·2023년 1월 23일
0

앙상블 학습(Ensemble Learning)

01) 앙상블 학습 개요

앙상블 학습은 여러개의 분류기를 생성하고 예측 결과를 결합하는 기법이다.(집단지성과 같은 느낌) 대표적인 앙상블 학습 모델로는 랜덤포레스트, 그레디언트 부스팅이 있다.

앙상블 학습의 유형으로는 보팅(Votind), 배깅(Bagging), 부스팅(Boosting)이 있다.

  • 보팅(Voting)
    • 하나의 데이터셋을 서로 다른 모델들을 대상으로 학습하고 결과를 종합하는 방식
  • 배깅(Bagging)
    • 하나의 모델에 서로 다른 데이터셋을 학습하고 결과를 종합하는 방식
    • 서로 다른 데이터셋이라고 하면 아예 다른 데이터로 생각할 수도 있는데, 아예 다른 데이터셋이 아닌 샘플링을 통해 나온 여러개의 서브 데이터셋을 사용한다는 의미이다. (이런 방식을 Bootstrapping이라고 한다.)
    • 샘플링 시 복원추출을 원칙으로 한다.
    • 대표적인 모델로 랜덤 포레스트가 있다.
  • 부스팅(Boosting)
    • 여러개의 분류기가 학습을 하되 앞에 학습한 분류기가 예측을 틀린 데이터에 가중치를 부여하여 다음 학습기를 학습 및 분류하는 방식
    • 대표적인 모델로 그래디언트 부스트, XGBoost, LightGBM이 있다.

02) 보팅의 유형 - hard votind, soft voting

보팅에는 두 가지 유형이 있다.

  • hard voting
    • 다수결의 원칙과 비슷하다.
    • 예를 들어,하나의 레코드에 대해 3개의 모델이 각각 예측 클래스를 [1, 0, 1]로 반환했다면, 다수결의 원칙에 따라 최종적인 결과는 1이 된다.
  • soft voting
    • 각 모델이 결과값을 하나의 클래스를 반환하는 것이 아니라 예측 확률을 반환하고, 확률들을 평균 내서 최종 결과를 판단한다.
    • 예를 들어, 하나의 레코드에 대해 3개의 모델이 각각 [0.2, 0.8], [0.4, 0.6], [0.3, 0.7]로 판단했다면, 평균을 내어 [0.3, 0.7]로 최종 판단, 1번 클래스를 예측 값으로 결정한다.



03) 보팅 분류기 실습

보팅 모델을 사용하는 방법은 아래와 같다.

  • 개별 분류기 생성
  • voing 모델로 개별 분류기 넣기
  • fit()과 predict()로 모델 학습 및 예측
from sklearn.ensemble import VotingClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.neighbors import KNeighborsClassifier
from sklearn.tree import DecisionTreeClassifier

# 개별 분류기 생성
lr = LogisticRegression()
knn = KNeighborsClassifier(n_neighbors=5)
dt = DecisionTreeClassifier()

# 개별 분류기를 Voting 분류기로 합치기 
# 개별 분류기는 ('새롭게 지정할 개별 모델 이름', '개별 모델 객체') 튜플 형태로 입력
# voting 파라미터에서 보팅 유형 선택 가능 - default는 하드  
voting_model = VotingClassifier([('LR', lr), ('KNN', knn), ('DT', dt)], voting='hard')

보팅 방식은 다음과 같은 의미를 가진다.

  • 여러 개의 분류 모델을 하나로 통합한다는 관점에서 모델에 유연성을 제공한다고 할 수 있다.
  • 무조건 성능이 향상되는 것은 아니지만, 일반적으로 개별 모델을 사용할 때보다 예측 성능이 좋고 한 결과로 편향되지 않는다는 점이 현실 문제 해결에 더욱 적합할 수 있다.

0개의 댓글