Table of Contents
728x90

Adaboost(AdaBoost, Adaptive Boosting)는 약한 학습기(weak learners)를 결합하여 강한 학습기(strong learner)를 만드는 앙상블 학습 방법 중 하나입니다. 여기서 약한 학습기란 개별적으로는 성능이 좋지 않지만, 여러 개를 결합하면 성능이 크게 향상되는 모델을 말합니다. AdaBoost는 주로 의사결정 스텀프(decision stump, 깊이가 1인 의사결정 나무)를 약한 학습기로 사용합니다.
AdaBoost의 원리
AdaBoost의 핵심 아이디어는 각 학습기의 예측 오류에 따라 데이터 포인트의 가중치를 조정하여 다음 학습기에서 더 나은 예측을 할 수 있도록 하는 것입니다. AdaBoost는 반복적으로 학습기를 학습시키고 결합하는 과정에서 오류가 큰 데이터 포인트에 더 많은 가중치를 부여합니다.
AdaBoost 알고리즘 단계
- 초기화:
- 각 데이터 포인트에 동일한 가중치를 부여합니다. 예를 들어, 데이터셋이 ( N )개의 샘플로 구성되어 있다면 각 샘플의 초기 가중치는 ( \frac{1}{N} )입니다.
- 반복:
- 약한 학습기 학습: 현재 가중치를 사용하여 약한 학습기를 학습시킵니다.
- 오류 계산: 학습기의 예측 오류율 ( \epsilon )을 계산합니다. 이는 잘못 분류된 샘플들의 가중치 합으로 계산됩니다.
- 학습기의 가중치 계산: 학습기의 가중치 ( \alpha )를 계산합니다. 이는 다음과 같이 계산됩니다:
[
\alpha = \frac{1}{2} \ln\left(\frac{1 - \epsilon}{\epsilon}\right)
] - 가중치 업데이트: 잘못 분류된 샘플들의 가중치를 증가시키고, 올바르게 분류된 샘플들의 가중치를 감소시킵니다. 이때 새로운 가중치는 다음과 같이 계산됩니다:
[
w_i = w_i \times \exp(\alpha \times I(y_i \neq h(x_i)))
]
여기서 ( I(y_i \neq h(x_i)) )는 샘플 ( i )가 잘못 분류된 경우 1이고, 그렇지 않으면 0입니다. 가중치는 전체 가중치 합이 1이 되도록 정규화됩니다.
- 결합:
- 최종 모델은 각 약한 학습기의 가중치를 반영한 가중치 합으로 결합됩니다. 최종 예측은 다음과 같이 계산됩니다:
[
H(x) = \text{sign}\left(\sum_{t=1}^{T} \alpha_t h_t(x)\right)
]
여기서 ( T )는 약한 학습기의 수입니다.
- 최종 모델은 각 약한 학습기의 가중치를 반영한 가중치 합으로 결합됩니다. 최종 예측은 다음과 같이 계산됩니다:
AdaBoost의 장점
- 단순성: 구현이 비교적 간단합니다.
- 성능: 잘 설계된 AdaBoost는 강력한 분류 성능을 보입니다.
- 적응성: 오류가 큰 데이터 포인트에 더 많은 가중치를 부여하여 학습기를 개선합니다.
- 해석력: 각 학습기의 가중치를 통해 모델의 결정 과정을 어느 정도 해석할 수 있습니다.
AdaBoost의 단점
- 노이즈 민감성: 노이즈가 많은 데이터에 대해 민감할 수 있습니다. 잘못된 레이블을 가진 데이터 포인트에 높은 가중치가 부여될 수 있습니다.
- 과적합: 너무 많은 학습기를 결합하면 과적합이 발생할 수 있습니다.
Python을 사용한 AdaBoost 예제
다음은 Scikit-learn을 사용하여 AdaBoost를 구현하는 간단한 예제입니다:
import numpy as np
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.ensemble import AdaBoostClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score
# 데이터 생성
X, y = make_classification(n_samples=1000, n_features=20, random_state=42)
# 훈련 세트와 테스트 세트로 분할
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# AdaBoost 분류기 생성
# 기본 학습기로 깊이 1인 결정 스텀프 사용
base_estimator = DecisionTreeClassifier(max_depth=1)
model = AdaBoostClassifier(base_estimator=base_estimator, n_estimators=50, random_state=42)
# 모델 학습
model.fit(X_train, y_train)
# 예측
y_train_pred = model.predict(X_train)
y_test_pred = model.predict(X_test)
# 성능 평가
train_accuracy = accuracy_score(y_train, y_train_pred)
test_accuracy = accuracy_score(y_test, y_test_pred)
print(f'Train Accuracy: {train_accuracy:.4f}')
print(f'Test Accuracy: {test_accuracy:.4f}')
이 코드는 AdaBoost 알고리즘을 사용하여 데이터를 학습하고 예측하며, 학습 세트와 테스트 세트의 정확도를 출력합니다. 이 예제에서 기본 학습기로 깊이가 1인 결정 스텀프를 사용하고, 50개의 약한 학습기를 결합합니다.
'ML' 카테고리의 다른 글
Model black box, XAI: LIME, SHAP (0) | 2024.05.31 |
---|---|
Ensemble > Boosting: Gradient Boosting Machine(GBM), XGBoost, LightGBM, CatBoost, NGBoost (0) | 2024.05.30 |
Model Explanation 모델설명 (1) | 2024.05.30 |
Validation set(검증 세트) (0) | 2024.05.30 |
Optimal Binning (0) | 2024.05.30 |
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- recursion #재귀 #자료구조 # 알고리즘
- speaking
- 티스토리챌린지
- 손실함수
- git
- RAG
- LIST
- 오블완
- 리스트
- #패스트캠퍼스 #UpstageAILab #Upstage #부트캠프 #AI #데이터분석 #데이터사이언스 #무료교육 #국비지원 #국비지원취업 #데이터분석취업 등
- 코딩테스트
- #패스트캠퍼스 #패스트캠퍼스AI부트캠프 #업스테이지패스트캠퍼스 #UpstageAILab#국비지원 #패스트캠퍼스업스테이지에이아이랩#패스트캠퍼스업스테이지부트캠프
- Transformer
- #패스트캠퍼스 #패스트캠퍼스ai부트캠프 #업스테이지패스트캠퍼스 #upstageailab#국비지원 #패스트캠퍼스업스테이지에이아이랩#패스트캠퍼스업스테이지부트캠프
- Hugging Face
- 해시
- cnn
- nlp
- clustering
- Github
- PEFT
- Numpy
- t5
- Array
- 파이썬
- classification
- LLM
- Lora
- English
- Python
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
글 보관함