끄적이는 개발노트

260605_강의 정리 (XGBoost) 본문

머신러닝

260605_강의 정리 (XGBoost)

크런키스틱 2026. 6. 5. 14:09
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
· "경사만 보며 산을 내려오는 것(경사하강법)"에서 "곡률까지 보며 내려오는 것(뉴톤법)"으로 업그레이드된 버전
🌳
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 효과)
🛡️
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): 각 트리의 기여도를 낮춰 천천히 학습 → 과적합 감소
💡 새 개념
Subsampling 서브샘플링
  • subsample: 각 트리 학습 시 사용할 행(샘플) 비율 (0~1)
  • colsample_bytree: 각 트리 학습 시 사용할 열(피처) 비율
  • 무작위성을 도입해 특정 데이터 패턴에 과도하게 의존하는 것을 방지
Random Forest처럼 매번 다른 샘플/피처 조합으로 트리를 학습시키는 것
Learning Rate 학습률 / eta
  • 각 부스팅 단계에서 새 트리의 기여도를 얼마나 반영할지 결정
  • 작을수록 천천히 학습 → 더 많은 트리 필요, 과적합 감소
한 번에 내딛는 발걸음 크기 — 작을수록 신중하게, 크면 빠르지만 넘어지기 쉬움
과적합 방지 요약
· 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와 바로 연결됨
⚙️ Native API
DMatrix
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()
⚙️
6. 핵심 파라미터 한눈에 정리

튜닝 시 가장 자주 조정하는 파라미터들

파라미터역할기본값튜닝 방향
max_depth트리 최대 깊이6과적합 시 줄임
eta학습률0.3과적합 시 낮춤
n_estimators트리 수100Early Stopping으로 결정
min_child_weight리프 최소 가중치1과적합 시 높임
gamma분할 최소 손실 감소0과적합 시 높임
subsample샘플 서브샘플링 비율1.00.8~0.9 추천
colsample_bytree피처 서브샘플링 비율1.00.8~0.9 추천
alphaL1 규제0피처 선택 필요 시 높임
lambdaL2 규제1기본값 유지 or 높임
튜닝 순서 권장
① 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