앙상블 학습 : 여러 개의 분류기를 생성하고 그 예측을 결합 - 보다 정확한 예측을 도출

 

목표 : 다양한 분류기의 예측 결과를 결합하여 단일 분류기의 예측 결과보다 신뢰성을 높임

 

유형 : 

 

▶ 보팅 : 서로 다른 알고리즘을 가진 분류기가 동일 데이터 셋을 가지고 투표로 최종 예측 결과 결정 (hard/soft)

  배깅 : 서로 같은 알고리즘을 가진 분류기가 각각 다른 데이터 샘플링으로 투표를 통해 최종 예측 결과 결정

  부스팅 : 여러 분류기가 순차적으로 학습을 진행하면서 앞의 분류기가 틀리게 예측한 데이터에 가중치를 부여하면서 학습 진행

 


Bagging의 대표적인 알고리즘 : Randomforest

 

  decision tree(통계적 가정 X, 비모수)를 기본 모델로 이용

  여러 개의 decision tree가 개별적으로 학습을 수행한 뒤 보팅을 통해 예측 결정함

  Bagging과 Random Subspace를 활용해여 다양성과 무작위성을 확보함

 

 

 

Bagging = Bootstrap + Aggregating 

 

  Bootstrap : 복원추출을 통해 기존 데이터셋과 같은 크기를 갖도록 샘플링하는 방법

  bootstrap 데이터셋으로 만들어진 기본 decision tree 모델들을 aggregate하는 것 (회귀의 경우 결과의 평균 / 분류의 경우 다수결로 가장 많은 모델이 선택 한 것)

  OOB(Out-Of-Bag) : 샘플링 과정에서 선택되지 않은 데이터 (이 데이터는 모델 검증에 이용 가능 - variance 감소)

출처 : https://www.analyticsvidhya.com/blog/2020/12/out-of-bag-oob-score-in-the-random-forest-algorithm/

 

 

 

부트스트랩 크기가 n이라고 할 때, 어떤 한 샘플이 추출되지 않을 확률 p = (n-1)/n이다. 이를 n번 복원추출하면 그 확률은 (n-1/n)^n이고, 여기서 n을 무한대로 보내면 e^(-1)=0.368이다. 

따라서 부트스트랩 샘플링을 계속 한다면 한 번도 뽑히지 않을 OOB 샘플은 전체 데이터의 약 36.8%가 될 것이고, 

이 데이터 셋으로 모델 검증을 진행할 수 있다. 

 

Scikit-learn에서는 oob_score_속성을 이용하여 oob score (error)를 계산해낼 수 있다. 

# create a random forest classifier and fit it to the data
clf = RandomForestClassifier(n_estimators=100, oob_score=True, random_state=0)
clf.fit(X, y)

# Obtain the OOB error
oob_error = 1 - clf.oob_score_

 

OOB error은 모델을 training 시킬 때 사용되지 않는 샘플들을 이용하여 모델의 성능을 새롭게 평가하는 지표이다. 

그리고 hyperparameter tuning시에 performance metric으로 OOB error를 이용하여 unseen data 예측에 대하여 모델의 성능을 향상시킬 수 있다. 

 

→ 위의 설명대로 bootstrapping을 통해 만든 데이터셋들로 DT를 학습시킬 때, 'Random Subspace'방법이 나온다. (feature bagging이라고도 부른다) 상위 노드에서 분기될 때 원래 feature 중 일부 feature들만 임의로 선택해서 분기하는 방법이다. 

  각 분기마다 서로 다른 feature가 사용될 것이다.