학습 자료: 파이썬 머신러닝 완벽 가이드(개정2판), 위키북스
부스팅(Boosting)
개요
여러 개의 약한 학습기(weak learner)를 순차적으로 학습-예측하면서 잘못 예측한 데이터에 가중치 부여를 통해 오류를 개선해 나가며 학습하는 방식
0. AdaBoost(Adaptive boosting)
개요
오류 데이터에 가중치를 부여하면서 부스팅을 수행하는 대표적인 알고리즘
맨 왼쪽 그림과 같이 +와 -로 된 피처 데이터셋이 있다면
- Step 1: 첫 번째 약한 학습기(weak learner)가 분류 기준 1로 +와 -를 분류
- Step 2: Step 1의 오류 데이터(동그라미 안의 +)에 대해 가중치 값을 부여
- Step 3: 두 번째 약한 학습기가 분류 기준 2로 +와 -를 분류
.
.
.
- Step Final: 약한 학습기가 순차적으로 오류 값에 대해 가중치를 부여한 예측 결정 기준을 모두 결합해 예측을 수행
1. GBM(Gradient Boost Machine)
개요
에이다부스트와 유사하나, 가중치 업데이트를 경사 하강법(Gradient Descent)를 이용해서 수행한다.
오류 값 = 실제 값 - 예측 값
오류식을 최소화하는 방향성을 가지고 반복적으로 가중치 값을 업데이트
랜덤 포레스트보다 나은 예측 성능을 보이지만, 수행 시간이 오래 걸리고, 하이퍼 파라미터 튜닝 노력도 더 필요하다.
사이킷런
GradientBoostingClassifier()
- loss: 경사 하강법에서 사용할 비용 함수
- learning_rate: 학습을 진행할 때마다 적용하는 학습률. Weak learner가 순차적으로 오류 값을 보정해 나가는 데 적용하는 계수. 0~1 사이의 값을 지정할 수 있으며 디폴트는 0.1. 작을수록 예측 성능이 높아질 가능성이 있지만 수행 시간이 오래 걸린다. 보통 learning_rate를 낮추고 n_estimators를 늘리며 상호 보완적으로 조합해 사용한다.
- n_estimators: weak learner의 개수. 개수가 많을수록 예측 성능이 좋아지지만 수행 시간이 오래 걸림. 디폴트는 100.
- subsample: weak learner가 학습에 사용하는 데이터의 샘플링 비율. 디폴트는 1으로, 전체 학습 데이터를 기반으로 학습한다는 의미.
2. XGBoost(eXtra Gradient Boost)
개요
GBM에 기반하고 있지만, GBM의 단점인 느린 수행 시간 및 과적합 규제(Regularization) 부재 등의 문제를 해결해 각광받고 있다. 특히 XGBoost는 병렬 CPU 환경에서 병렬 학습이 가능해 기존 GBM보다 빠르게 학습을 완료할 수 있다.
또한, 내부적으로 교차 검증이 가능해 성능이 더 이상 좋아지지 않으면 조기 중단할 수 있는 기능이 있다.
사이킷런
XGBClassifier()
- learning_rate: 디폴트는 0.1. 보통 0.01~0.2 사이로 조정.
- n_estimators
- subsample: 일반적으로 0.5~1 사이로 조정.
- max_depth: 트리 기반 알고리즘과 같다. 0을 지정하면 깊이에 제한이 없음. 보통 3~10 사이로 조정.
- min_split_loss: 트리의 리프 노드를 추가적으로 나눌지를 결정할 최소 손실 감소 값
조기 중단 기능은 fit()의 파라미터 활용
- early_stopping_rounds: 평가 지표가 향상될 수 있는 반복 횟수(n번 반복할 때까지 성능이 좋아지지 않으면 조기 중단)
너무 급격하게 줄여 예측 성능이 저하되지 않도록 주의
- eval_metric: 조기 중단을 위한 평가 지표
- eval_sets: 성능 평가를 수행할 데이터셋 [(X_tr, y_tr), (X_val, y_val)]
3. LightGBM
개요
XGBoost보다 학습에 걸리는 시간이 훨씬 적고, 메모리 사용량도 상대적으로 적은 알고리즘
단, 10,000건 이하 정도의 적은 데이터셋에 적용할 경우 과적합이 발생하기 쉬우니 주의
LightGBM은 일반 GBM 계열의 트리 분할 방법과 다르게 리프 중심 트리 분할(Leaf Wise) 방식을 사용
기존의 대부분 트리 기반 알고리즘은 트리의 깊이를 효과적으로 줄이기 위한 균형 트리 분할(Level Wise) 방식을 사용
LightGBM은 카테고리형 피처의 자동 변환과 최적 분할이 가능하다.
사이킷런
LGBMClassifier()
LightGBM은 XGBoost와 다르게 리프 노드가 계속 분할되면서 트리의 깊이가 깊어지므로 이러한 트리 특성에 맞는 하이퍼 파라미터 설정이 필요함
- n_estimators: 반복 수행하려는 트리의 개수. 크게 지정할수록 예측 성능이 높아질 수 있으나, 너무 크게 지정하면 오히려 과적합으로 성능이 저하될 수 있음
- learning_rate: 일반적으로 0.05~0.2 사이로 조정
- max_depth: 깊이가 상대적으로 더 깊다.
- min_child_samples: 최종 결정 클래스인 리프 노드가 되기 위해 최소한으로 필요한 레코드 수
- num_leaves: 하나의 트리가 가질 수 있는 최대 리프 개수
보통 하이퍼 파라미터 튜닝 시에는 num_leaves의 개수를 중싱므로 min_child_samples, max_depth를 함께 조정하면서 모델의 복잡도를 줄인다.
- num_leaves: 일반적으로 높이면 정확도가 높아지지만, 반대로 트리의 깊이가 깊어지고 과적합 영향도가 커진다.
- min_child_samples: 보통 큰 값으로 설정하면 트리가 깊어지는 것을 방지한다.
- max_depth: 명시적으로 깊이의 크기 제한
조기 중단 역시 가능하다.
'ML' 카테고리의 다른 글
[머신러닝/사이킷런] 앙상블 학습(분류): 스태킹(Stacking) (0) | 2025.02.21 |
---|---|
[머신러닝/사이킷런] 앙상블 학습(분류): 보팅, 배깅(랜덤 포레스트) (0) | 2025.02.16 |
[머신러닝/사이킷런] 분류 모델: 결정 트리(Decision Tree) (0) | 2025.02.16 |