2023/물사랑 나라사랑

앙상블 (Ensemble)

notty 2023. 10. 3. 10:14
728x90

앙상블 (Ensemble)

: 예측기를 모아서 하나의 모델로 만든다

**앙상블 학습은 예측기가 서로 독립적일 때 최고의 성능을 보인다.**

-why?: 각 분류기마다 서로 다른 종류의 오차를 만들어 서로가 보완적으로 작용할 수 있기 때문이다. 

-다른 종류(알고리즘)의 학습기를 사용한다

 

보팅 (Voting)

-각각의 모델을 학습시킨다 (각각의 정확도는 80% 정도)

-각 모델이 도출한 y를 투표를 통하여 최종 결정(다수결 투표 == 직접투표)

  • 직접투표: 다수결 투표 (통계적 최빈값, 회귀의 경우 평균을 계산한다.)
    • voting = 'hard'
  • 간접투표: 개별 분류기의 예측 평균을 내어 가장 확률이 높은 클래스를 예측한다. -> 확률 높은 곳에 비중이 있음 == 직투보다 성능이 높다.
    • voting = 'soft'

-다수결 투표로 예측할 때의 성능이 개별 모델 중 성능이 가장 높은 모델보다 좋은 경우가 많음

**약한 학습기: 각각의 모델

**강한 학습기: 약한 학습기를 앙상블하여 더 좋은 성능을 내는 모델

배깅 (Bagging)

-from sklearn.ensemble import BaggingClassifier, BaggingRegressor

-훈련세트에서 중복을 허용하여 샘플링하는 방식

-같은 훈련 샘플을 여러개의 학습기에 걸쳐 사용할 수 있음

-한 예측기를 위해 같은 훈련 샘플을 여러개의 예측기에 걸쳐 사용할 수 있음

-훈련에 사용되지 않은 데이터 포인트: oob(out of bag) -> 평가하는데에 사용될 수 있음

페이스팅 (Pasting)

-중복을 허용하지 않고 샘플링하는 방식

-같은 훈련 샘플을 여러개의 학습기에 걸쳐 사용할 수 있음

부스팅(Boosting)

-약한 학습기를 여러개 연결하여 강한 학습기를 만든다

-앞의 모델을 보완해 나가면서 학습

예시)

Adaboost

  • 잘못분류된 세트의 가중치를 높여 다시 훈련시키고 가중치 업데이트 반복
  • 경사하강법은 비용함수를 최소화하기 위하 모델의 파라미터를 조정
  • Adaboost는 비용함수를 최소화하기 위해 예측기를 추가
  • 예측기에 따라서 다른 가중치를 가진다. 
  • 연속된 학습 기법으로 병렬화 불가

Gradientboost

  • Ada처럼 오차를 보정하도록 예측기를 추가
  • 하지만 샘플의 가중치를 수정하는 것이 아닌 잔여 오차에 대해서 새로운 예측기를 생성

스태킹 (Stacking)

-앙상블에 속한 모든 예측기를 취합하는 모델을 만들 수 있지 않을까?

-각 예측기가 값을 예측하고 마지막 예측기(블랜더, 메타학습기)가 예측값들을 통해서 최종 예측을 만든다. 

 

-블렌더(메타학습기)를 훈련시키는 방법

  • 홀드아웃 세트를 사용한다
    • 훈련셋 -> 2개의 subset으로 나눈다 (첫번째는 첫번째 레이어의 예측을 훈련시키기 위해서 사용) -> 첫번째 셋으로 첫번째 레이어의 예측기를 훈련시킨다 -> 두번째 샘플을 예측한다(만약 학습기가 3개이면 3개의 예측 셋이 만들어진다.) -> 생성된 개별 예측기의 예측셋으로 블렌더(최종 모델)를 훈련 => 첫번째 레이어의 예측을 가지고 타깃값을 예측하도록 한다. 
  • 블랜더를 여러개 훈련시키는 것도 가능

 

 

 

728x90
반응형