상세 컨텐츠

본문 제목

[머신러닝] Ensemble, Bagging, Boosting

멋사 AISCOOL 7기 Python/INPUT

by dundunee 2022. 11. 24. 17:28

본문

1️⃣ Ensemble

앙상블 기법이란 내부적으로 여러 모델을 생성한 후 모델들을 종합해 최종 모델을 생성하는 방법론이다. 머신러닝에서는 여러 머신러닝 모델을 연결하여 더 강력한 모델을 만드는 기법으로 대표적인 모델로 랜덤포레스트와 그래디언트부스팅이 있다.

📍 랜덤포레스트 → 배깅의 대표적인 예시

  • 조금씩 다른 결정트리의 묶음이다.
  • 각각의 결정트리는 예측을 잘 할 수 있지만 데이터 일부에 과대적합된다
  • 이런 과적합된 트리를 묶어 평균을 채택하면 과적합을 줄일 수 있다.

📍 그래디언트 부스팅 → 부스팅의 대표적인 예시

  • 여러 결정트리의 묶음이다.
  • 랜덤포레스트가 서로 다른 트리의 묶음이라면(배깅), 그라디언트는 순차적으로 결정트리를 만들며 이전 트리의 오차를 보완해간다(부스팅).
  • 이것의 근본 아이디어는 얕은 트리를 많이 연결하여 성능이 좋은 최종 모델을 만들어내는 것이다.

2️⃣ Bagging

트리는 작은 편향(bias)과 큰 분산(varience)를 갖기 때문에 매우 깊이 성장한 트리는 훈련 데이터에 대하 과적합한다. 이 문제를 해결하기위해 랜덤포레스트는 배깅 기능을 갖고 있다.

💡Bagging

배깅은 bootstrap aggregating의 약자로, 부트스트랩(bootstrap)을 통해 조금씩 다른 훈련 데이터에 대해 훈련된 기초 분류기(base learner)들을 결합(aggregating)시키는 방법이다.

다시말해 배깅은 훈련세트에서 중복을 허용해서 샘플링을 하여 여러개 모델을 훈련하는 앙상블 방식이다. 같은 훈련 샘플을 여러개의 모델에 걸쳐 사용해서 모든 모델이 훈련을 마치면 앙상블은 모든 예측기의 예측을 모아서 새로운 샘플에 대한 예측을 만들게 된다.

💡Bootstrap

부트스트랩이란 주어진 훈련데이터에서 중복을 허용하여 원 데이터셋과 같은 크기의 데이터셋을 만드는 과정을 말한다. 이 과정은 편향은 그대로 유지하면서 분산은 감소시키기때문에 포레스트의 성능을 향상시킨다.

따라서 배깅을 통해 랜덤포레스트를 훈련시키는 과정은 다음과 같이 진행된다

  1. 부트스트랩 방법을 통해 T개의 훈련 데이터셋을 생성한다
  2. T개의 기초분류기(트리)들을 훈련시킨다
  3. 기초분류기(트리)들을 하나의 분류기(랜덤포레스트)로 결합한다
    • 평균 또는 과반수 투표방식 이용

👉 즉 한개의 결정 트리의 경우 훈련 데이터에 있는 노이즈에 대해서 매우 민감하지만 부트스트랩 방법을 통해 서로 다른 데이터가 포함된 여러 훈련 데이터셋을 만든다면 트리들의 편향은 유지하고, 분산은 감소시켜 트리들이 서로 상관화 되지 않아 여러 트리들의 평균은 노이즈에 대해 강해지게 된다. 다시말해 배깅은 서로 다른 데이터 셋들에 대해 훈련시킴으로써 트리들을 비상관화시켜주는 과정이다.

출처: 오늘코드

 

Resample하는 과정이 부트트랩, 각각을 연결하여 Model을 생성한 것이 Bagging이라고 볼 수 있다.


3️⃣ Boosting

출처: https://www.datacamp.com/tutorial/adaboost-classifier-python

부스팅은 여러 얕은 트리를 연결하며 편향과 분산을 줄여 강력한 트리를 생성하는 기법이다. 이전 트리에서 틀렸던 부분에 가중치를 주며 지속적으로 학습해나간다. 부스팅은 약한 모델을 여러개 연결해서 강한 모델을 만들어내기 위한 앙상블 방식으로, 앞의 모델을 보완해나가며 일련의 모델들을 학습시켜나가는 것입니다.

부스팅의 대표적인 모델 중 하나는 에이다이다. 에이다부스트는 앙상블 이전까지의 오차를 보정하도록 모델을 순차적으로 추가한다. 반명 그래디언트 부스트는 에이타 부스트와 달리 샘플의 가중치를 수정하는 대신 이전 모델이 만든 잔여 오차에 대해 새로운 모델을 학습시키게 된다. 최적화된 그래디언트 부스팅 구현으로 가장 유명한 것이 XGBoost이다.

💡 배깅과 부스팅의 차이점

  • 배깅은 병렬학습이고, 부스팅은 순차적 학습이다.
    • 부스팅은 틀린거 위주로 학습하게 된다.
  • 배깅은 데이터셋이 모델마다 독립적이고, 부스팅은 앞 모델이 데이터셋을 정해준다

4️⃣ Gradient

💡 gradient: 경사(도), 변화도, 증감률

모델마다 “gradient”가 들어가는 이유는 가중치를 업데이트할 때 경사하강법을 사용하기 때문이다.

머신러닝에서는 손실함수가 최소가 되는 파라미터(베타)를 찾아야하는데, 이때 사용되는 것이 Gradient이다. 다시말해 그래프에서 값이 가장 낮은 지점으로 경사를 타고 하강하며 오차의 기울기가 최소가 되는 지점을 찾아가는 것을 말하며, 이것을 경사하강법이라고 부른다.

출처: 오늘코드


5️⃣ Learning rate: epoch == n_estimators

  • n_estimatore
    • 부스팅 트리에서는 몇번째 트리인지, 몇번째 학습인지를 의미한다. 이는 이전 트리의 오차를 보완해서 만든 sequential한 트리이다.
    • 반면 배깅에서는 트리의 개수를 의미하며 각각 다른 트리이다.
  • epoch는 학습횟수를 의미한다
  • Learning rate은 학습률이며, 보폭이라고 부르기도 한다

부스팅 모델을 만들 때 적절한 learning rate을 맞추는 것이 중요하다. 보폭이 너무 크면 최소점을 지나치고 발산할 수도 있으며, 보폭이 너무 작다면 학습에 시간이 너무 오래 걸릴 수도 있다.

출처: 오늘코드

Big Learning Rate이 Very high learning rate이다. Learning rate이 적절할 경우(Good learning rate) 학습횟수(epoch)가 증가할 수록 손실이 줄어들게 된다. → 연두색 라인

관련글 더보기