[ML] 부스팅 알고리즘(Boosting)이란? AdaBoost, Gradient Boosting, XGBoost, LightGBM의 장단점

gyurili·2025년 1월 26일
0

AI

목록 보기
9/23

부스팅은 어떤 특징을 가진 앙상블 기법인가요? 부스팅 모델에는 무엇이 있으며, 각 부스팅 모델의 특징, 장단점에 대해 말해주세요.



부스팅 알고리즘(Boosting)이란?

부스팅 알고리즘이란 여러 개의 약한 학습기(weak learner)를 순차적으로 학습-예측하면서, 잘못 예측한 데이터에 가중치를 부여오류를 개선해나가는 학습방식이다.

최종적으로 여러 모델의 결과를 결합하여 강한 학습기(strong learner)를 만드는 방식이라고도 볼 수 있다.

결론적으로 ✔️부스팅 알고리즘의 특징을 세 가지로 정리✔️하자면,

  1. 이전 단계에서 발생한 오류를 기반으로 학습하므로, 모델이 점진적으로 성능을 개선한다.
  2. 이전 모델이 잘못 분류한 데이터에 더 많은 가중치를 주어 학습하며, 모델의 약점을 보완한다.
  3. 데이터에 따라 가중치가 동적으로 변경되어 학습이 진행된다.

이 정도로 정리할 수 있을 것이다.



그렇다면 부스팅 알고리즘에는 어떤 모델들이 있을까?

1. AdaBoost (Adaptive Boosting)

AdaBoost는 부스팅 알고리즘의 가장 기본적인 형태이자 부스팅 기법의 출발점이다. 부스팅 알고리즘의 기본 아이디어를 구현한 초기 모델이라고 볼 수 있다.
따라서 AdaBoost은 앞서 설명한 것과 같이, 약한 학습기를 순차적으로 학습시키고, 이전 모델이 잘못 예측한 데이터에 높은 가중치를 부여하는 모델이다.
단점은 이상치(outlier)에 민감하며, 노이즈가 많은 데이터에서 성능이 저하될 수 있다. 또한, 약한 학습기가 제대로 작동하지 않으면 전체 모델 성능에 영향을 줄 수 있다.

from sklearn.ensemble import AdaBoostClassifier

model = AdaBoostClassifier(n_estimators=50, learning_rate=1.0)
model.fit(X_train, y_train)
  • n_estimators: 사용할 약한 학습기 개수.
  • learning_rate: 학습 속도, 학습률

위와 같은 방식으로 사용할 수 있다.



2. Gradient Boosting

Gradient Boosting(GBM)은 AdaBoost와 유사하지만 가중치 업데이트를 경사하강법(Gradient Descent)를 이용하여 최적화된 결과를 얻는 모델이다.
분기할 때마다 모든 모든 데이터 값을 고려해 손실함수, MSE, 지니계수가 가장 낮아지는 최적의 분기점을 계산해 분할해 나간다. 잔차(이전 모델의 예측값과 실제값 간의 차이)를 이용하여 이전 모형의 약점을 보완한다. 따라서 예측 성능이 높다는 것이 장점이다.
반면 Greedy Algorithm으로 과적합이 빠르게 되고, 시간이 오래 걸린다는 것은 단점이다.

Gradient Boosting의 동작 과정

  1. 초기 모델 생성
    • 첫 번째 모델 F0(x)은 출력값의 초기 예측값으로 설정된다.
      • 회귀 문제: 전체 데이터의 평균값
      • 분류 문제: 로그 확률 또는 기본 예측값
  2. 잔차 계산
    • 모델의 현재 예측값 Fm(x)과 실제값 yi 간의 차이(잔차)를 계산한다.
  3. 잔차 학습
    • 잔차 ri를 새로운 학습기(약한 학습기)가 학습한다.
    • 결정 트리(Decision Tree)가 약한 학습기로 사용된다.
  4. 모델 업데이트
    • 학습된 모델의 예측값을 기존 모델에 추가하여 업데이트한다.
  5. 반복
    • 이 과정을 반복하여 M개의 학습기를 결합한다.

from sklearn.ensemble import GradientBoostingClassifier

model = GradientBoostingClassifier(n_estimators=100, learning_rate=0.1, max_depth=3)
model.fit(X_train, y_train)
  • n_estimators: 학습기(약한 모델)의 개수
  • learning_rate: 각 학습기의 기여도를 조정
  • max_depth: 각 결정 트리의 최대 깊이
  • subsample: 각 학습기에서 샘플링할 데이터 비율 (0.5로 설정하면 Bagging 효과를 제공)

위와 같은 방식으로 사용할 수 있다.



3. XGBoost

XGBoost는 Gradient Boosting와 유사하지만, Gradient Boosting가 병렬 학습이 지원되도록 구현한 것으로, 더 빠른 학습과 정교한 조정이 가능하다. GPU를 사용해야 하며, L1, L2 정규화를 지원하여 과적합을 방지한다. 검증 데이터의 성능이 개선되지 않으면 학습을 조기에 종료하여 시간을 절약한다는 장점이 있다.
단점으로는 GPU를 사용해야 할 만큼 복잡한 모델로 인해 해석이 어려울 수 있으며, 대규모 데이터셋에서는 메모리 사용량이 높을 수 있다.

from xgboost import XGBClassifier

model = XGBClassifier(n_estimators=100, learning_rate=0.1, max_depth=3)
model.fit(X_train, y_train)
  • n_estimators: 부스팅할 트리의 개수
  • learning_rate: 각 트리의 가중치를 줄이는 학습률
  • max_depth: 각 트리의 최대 깊이
  • lambda: L2 정규화 강도
  • alpha: L1 정규화 강도

위와 같은 방식으로 사용할 수 있다.



4. LightGBM

LightGBM은 Gradient Boosting 알고리즘의 확장판으로, 속도와 메모리 효율성에 초점을 맞춰 설계한 모델이다. 대규모 데이터와 고차원 데이터에서 빠르고 효율적으로 학습할 수 있다는 것이 큰 장점이다.
손실 함수의 감소량을 기준으로 가장 손실을 줄이는 리프(Leaf)를 선택적으로 확장하기에 더 적은 노드로도 높은 성능을 낼 수 있다.
원-핫 인코딩 없이도 범주형 특성(Categorical Features)을 자동으로 처리할 수 있다는 것도 장점이다.
반면 대규모 데이터를 목적으로 설계된 모델이기 때문에, 작은 데이터 세트에서는 과적합 위험이 있다는 것이 단점이다. 또한, 리프 중심 트리 분할 방식이 복잡성을 증가시킬 수 있다.

from lightgbm import LGBMClassifier

model = LGBMClassifier(n_estimators=100, learning_rate=0.1, max_depth=-1)
model.fit(X_train, y_train)
  • num_leaves: 트리의 최대 리프 개수
  • max_depth: 트리의 최대 깊이
  • learning_rate: 각 트리의 기여도를 조정
  • n_estimators: 부스팅 단계(트리)의 개수
  • feature_fraction: 각 트리에서 사용할 특성의 비율
  • min_data_in_leaf: 각 리프에 포함될 최소 데이터 수

위와 같은 방식으로 사용할 수 있다.

profile
개발 공부ᕦ(ò_óˇ)ᕤ

0개의 댓글