끄적이는 개발노트
260605_강의 정리 (XGBoost) 본문
728x90
machine learning · ensemble
XGBoost 정리 — Booster, Objective, 과적합 방지
- 약한 학습기를 순차적으로 쌓아 강한 모델을 만드는 Gradient Boosting 원리 이해
- gbtree / gblinear / dart 세 가지 Booster 종류와 규제 파라미터 비교
- Cross-Validation, Early Stopping, Pruning, Regularization으로 과적합 방지
1. XGBoost의 핵심 원리
"약한 학습기를 계속 더해가며 손실을 줄이는 것" — 앙상블 학습의 정수
- Gradient Boosting 기반 — 이전 모델이 틀린 부분을 다음 모델이 보정함
- 손실함수를 2차 미분(헤시안, Hessian)까지 활용하는 뉴톤법 적용 — 일반 Gradient Boosting보다 수렴이 빠름
- 학습 목표: 손실함수 최소화 + 규제(Regularization)의 균형
- 병렬 처리로 후보 분할점을 동시에 계산 → 속도 우위
💡 새 개념
약한 학습기 → 강한 학습기 Weak → Strong Learner
- 혼자서는 정확도가 낮은 단순 모델(약한 학습기)을 여러 개 순서대로 쌓음
- 각 단계에서 직전 모델의 오류를 타깃으로 새 모델을 학습시킴
처음에 키로 몸무게를 예측하다 틀린 부분을 다음 모델이 보완 → 반복하면 점점 정확해짐
뉴톤법 Newton's Method
- 손실함수의 1차 미분(기울기)과 2차 미분(곡률)을 모두 사용해 최적값을 찾음
- 일반 경사하강법은 1차 미분만 사용 → 뉴톤법이 더 정확하고 빠른 수렴 가능
경사(기울기)뿐 아니라 "얼마나 굽어 있는지(곡률)"도 보고 보폭을 조정하는 것
헤시안 Hessian
- 손실함수의 2차 편미분값 — 기울기 변화율을 나타냄
- XGBoost의 트리 분할 기준과 리프 가중치 계산에 직접 활용됨
Gradient(1차 미분) + Hessian(2차 미분) 조합으로 각 리프 노드의 점수를 계산함
핵심 요약
· 일반 Gradient Boosting + 뉴톤법(2차 미분) + 규제 = XGBoost
· "경사만 보며 산을 내려오는 것(경사하강법)"에서 "곡률까지 보며 내려오는 것(뉴톤법)"으로 업그레이드된 버전
· 일반 Gradient Boosting + 뉴톤법(2차 미분) + 규제 = XGBoost
· "경사만 보며 산을 내려오는 것(경사하강법)"에서 "곡률까지 보며 내려오는 것(뉴톤법)"으로 업그레이드된 버전
2. Booster 종류 — gbtree / gblinear / dart
XGBoost의 내부 학습기(Booster)는 세 가지 — 데이터 특성에 따라 선택함
gbtree
기본값 · 결정 트리 기반
비선형 패턴을 잡는 가장 범용적인 Booster
- max_depth — 트리의 최대 깊이. 클수록 복잡한 패턴 학습 가능, 과적합 위험 증가
- min_child_weight — 리프 노드가 가져야 할 최소 Hessian 합. 작은 값은 과적합 유발 가능
- gamma (min_split_loss) — 노드 분할에 필요한 최소 손실 감소량. 클수록 보수적으로 분할
→ max_depth=6이면 루트에서 리프까지 최대 6번 분기 — 너무 깊으면 훈련 데이터에만 과도하게 맞춰짐
gblinear
선형 모델 기반
선형 관계가 명확한 데이터에 적합, 트리보다 빠름
- 각 부스팅 단계에서 선형 회귀/분류 모델을 약한 학습기로 사용
- L0 규제 (gamma) — 0이 아닌 가중치 수를 제한 (희소성 유도)
- L1 규제 (alpha) — 가중치 절댓값 합을 패널티로 부과 → 불필요한 피처 가중치를 0으로 만듦
- L2 규제 (lambda) — 가중치 제곱합을 패널티로 부과 → 가중치를 전체적으로 작게 만듦
dart
Dropout 적용 트리
트리에 드롭아웃을 적용해 과적합을 추가로 억제
- 신경망의 Dropout 개념을 트리 앙상블에 도입
- 부스팅 시 일부 기존 트리를 무작위로 제거하고 학습 → 특정 트리에 과도하게 의존하는 것을 방지
- gbtree보다 학습이 느리지만 과적합이 심한 경우 효과적
Booster 선택 기준
· 기본 선택: gbtree (대부분의 경우 최적)
· 피처 수 >> 샘플 수인 경우: gblinear (선형 관계 가정)
· 과적합이 심한 경우: dart (Dropout 효과)
· 기본 선택: gbtree (대부분의 경우 최적)
· 피처 수 >> 샘플 수인 경우: gblinear (선형 관계 가정)
· 과적합이 심한 경우: dart (Dropout 효과)
3. 과적합 방지 4가지 전략
"훈련 데이터에만 잘 맞는 모델"이 되지 않도록 — 일반화 성능을 높이는 핵심 기법
1
Cross-Validation (교차 검증)
데이터를 K개 폴드로 나눠 K번 반복 검증 — XGBoost의 Booster.cv로 내장 지원됨. 별도 라이브러리 없이 CV 가능
2
Early Stopping (조기 종료)
검증 데이터의 성능이 N 라운드 동안 개선되지 않으면 학습 자동 중단 — 불필요한 트리 추가를 막아 과적합 방지
3
Pruning (가지치기)
트리를 최대 깊이까지 키운 뒤, 손실 감소가 없는 가지를 역방향으로 제거 (post-pruning). gamma 값으로 제거 기준을 조정함
4
Regularization (규제)
손실함수에 가중치 크기에 대한 패널티 항 추가
L1(alpha): 불필요한 피처 제거 효과 (희소 모델)
L2(lambda): 가중치를 전체적으로 작게 유지 (기본값 1)
Learning Rate(eta): 각 트리의 기여도를 낮춰 천천히 학습 → 과적합 감소
L1(alpha): 불필요한 피처 제거 효과 (희소 모델)
L2(lambda): 가중치를 전체적으로 작게 유지 (기본값 1)
Learning Rate(eta): 각 트리의 기여도를 낮춰 천천히 학습 → 과적합 감소
💡 새 개념
Subsampling 서브샘플링
- subsample: 각 트리 학습 시 사용할 행(샘플) 비율 (0~1)
- colsample_bytree: 각 트리 학습 시 사용할 열(피처) 비율
- 무작위성을 도입해 특정 데이터 패턴에 과도하게 의존하는 것을 방지
Random Forest처럼 매번 다른 샘플/피처 조합으로 트리를 학습시키는 것
Learning Rate 학습률 / eta
- 각 부스팅 단계에서 새 트리의 기여도를 얼마나 반영할지 결정
- 작을수록 천천히 학습 → 더 많은 트리 필요, 과적합 감소
한 번에 내딛는 발걸음 크기 — 작을수록 신중하게, 크면 빠르지만 넘어지기 쉬움
과적합 방지 요약
· Early Stopping → 적절한 트리 수 자동 결정
· Regularization(L1/L2) + 낮은 Learning Rate → 모델 복잡도 직접 제어
· Subsample / colsample → 랜덤성 도입으로 일반화 향상
· Early Stopping → 적절한 트리 수 자동 결정
· Regularization(L1/L2) + 낮은 Learning Rate → 모델 복잡도 직접 제어
· Subsample / colsample → 랜덤성 도입으로 일반화 향상
4. XGBoost 주요 기능 한눈에 보기
일반 Gradient Boosting 대비 XGBoost가 추가로 제공하는 기능들
| 기능 | 설명 | 관련 파라미터 |
|---|---|---|
| 2차 미분 사용 | 뉴톤법으로 Gradient + Hessian 동시 활용 — 정확한 최적화 | 내장 |
| Regularization | L1(alpha), L2(lambda) 규제로 과적합 방지 | alpha, lambda |
| Learning Rate | 천천히 학습하여 과적합 감소 | eta |
| Subsampling | 행/열 무작위 샘플링으로 일반화 향상 | subsample, colsample_bytree |
| Pruning | 최대까지 성장 후 손실 감소 없는 가지 제거 | gamma |
| Early Stopping | 검증 성능 미개선 시 학습 자동 중단 | early_stopping_rounds |
| 내장 CV | Booster.cv로 교차 검증 지원 | nfold |
| 결측값 자동 처리 | NaN을 별도 전처리 없이 자동으로 처리함 | 내장 |
| 병렬 처리 | 후보 분할점을 병렬로 계산 → 학습 속도 향상 | nthread |
| 희소 행렬 지원 | Sparsity Aware 알고리즘으로 희소 데이터 효율 처리 | 내장 |
| Out-of-Core | Chunk 단위 읽기로 메모리 초과 데이터 처리 가능 | DMatrix |
5. XGBoost 사용 방법 — 두 가지 API
XGBoost는 scikit-learn 호환 API와 네이티브 API 두 가지를 제공함
🎯 Scikit-learn API
XGBClassifier
XGBRegressor
Booster를 래핑한 모델 — fit/predict 방식으로 사용 가능. Pipeline, GridSearch와 바로 연결됨
XGBRegressor
Booster를 래핑한 모델 — fit/predict 방식으로 사용 가능. Pipeline, GridSearch와 바로 연결됨
⚙️ Native API
DMatrix
Booster.cv
XGBoost 전용 데이터 구조(DMatrix)와 저수준 API — 내장 CV, 세밀한 파라미터 제어에 유리함
Booster.cv
XGBoost 전용 데이터 구조(DMatrix)와 저수준 API — 내장 CV, 세밀한 파라미터 제어에 유리함
💡 새 개념
DMatrix
- XGBoost 전용 내부 데이터 구조 — NumPy 배열이나 pandas DataFrame을 변환해서 사용
- 희소 행렬, 결측값, 가중치 등을 효율적으로 처리하도록 최적화됨
pandas DataFrame을 xgb.DMatrix(X, label=y)로 변환한 뒤 xgb.train()에 전달
Objective (목적함수)
- XGBoost가 최소화할 손실함수 지정
- reg:squarederror — 회귀 (MSE 최소화)
- binary:logistic — 이진 분류 (로그 손실)
- multi:softmax — 다중 클래스 분류
분류 문제면 binary:logistic, 수치 예측이면 reg:squarederror 선택
데이터 준비
→
DMatrix 변환
→
파라미터 설정
→
xgb.train()
→
예측 / 평가
scikit-learn API vs Native API 선택 기준
· Pipeline/GridSearch 활용: XGBClassifier / XGBRegressor
· 내장 CV 활용, 세밀한 제어: DMatrix + xgb.train()
· Pipeline/GridSearch 활용: XGBClassifier / XGBRegressor
· 내장 CV 활용, 세밀한 제어: DMatrix + xgb.train()
6. 핵심 파라미터 한눈에 정리
튜닝 시 가장 자주 조정하는 파라미터들
| 파라미터 | 역할 | 기본값 | 튜닝 방향 |
|---|---|---|---|
| max_depth | 트리 최대 깊이 | 6 | 과적합 시 줄임 |
| eta | 학습률 | 0.3 | 과적합 시 낮춤 |
| n_estimators | 트리 수 | 100 | Early Stopping으로 결정 |
| min_child_weight | 리프 최소 가중치 | 1 | 과적합 시 높임 |
| gamma | 분할 최소 손실 감소 | 0 | 과적합 시 높임 |
| subsample | 샘플 서브샘플링 비율 | 1.0 | 0.8~0.9 추천 |
| colsample_bytree | 피처 서브샘플링 비율 | 1.0 | 0.8~0.9 추천 |
| alpha | L1 규제 | 0 | 피처 선택 필요 시 높임 |
| lambda | L2 규제 | 1 | 기본값 유지 or 높임 |
튜닝 순서 권장
① max_depth, min_child_weight → ② gamma → ③ subsample, colsample_bytree → ④ alpha, lambda → ⑤ eta 낮추고 n_estimators 증가
① max_depth, min_child_weight → ② gamma → ③ subsample, colsample_bytree → ④ alpha, lambda → ⑤ eta 낮추고 n_estimators 증가
관련 키워드
XGBoost
Gradient Boosting
Newton's Method
Hessian
과적합 방지
Early Stopping
Regularization
Cross-Validation
Pruning
728x90
'머신러닝' 카테고리의 다른 글
| 260610_강의 정리 (KNN, K-Means) (0) | 2026.06.10 |
|---|---|
| 260609_강의 정리 (나이브 베이즈) (0) | 2026.06.09 |
| 260608_강의 정리 (확률 모델 기초) (0) | 2026.06.08 |
| 260604_강의 정리 (DT와 Ensemble) (0) | 2026.06.04 |
| 260602_강의 정리 (scikit-learn) (0) | 2026.06.02 |