앙상블 학습 : 여러 개의 분류기를 생성하고 그 예측을 결합 - 보다 정확한 예측을 도출
목표 : 다양한 분류기의 예측 결과를 결합하여 단일 분류기의 예측 결과보다 신뢰성을 높임
유형 :
▶ 보팅 : 서로 다른 알고리즘을 가진 분류기가 동일 데이터 셋을 가지고 투표로 최종 예측 결과 결정 (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 감소)
부트스트랩 크기가 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가 사용될 것이다.
'Study > 머신러닝' 카테고리의 다른 글
WandB 사용법 (0) | 2024.03.02 |
---|---|
차원 축소 (0) | 2023.10.29 |
Decision Tree : 가지치기 (pruning)에 대하여 (0) | 2023.09.15 |
Decision Tree : scikit learn의 feature_importances_는 어떻게 계산된 것일까? + Permutation Importance (0) | 2023.09.08 |
Decision Tree : 데이터 분할에서 '균일도'(impurity)에 대하여 (0) | 2023.09.07 |