[MachineLearning/머신러닝] XGBoost

gyeol·2025년 5월 31일

XGBoost

내부적으로 여러 개의 결정 트리를 부스팅하는 방식으로 학습하여 예측력을 높인다. 이전 모델의 오류를 순차적으로 보완해나가는 방식으로 모델을 형성한다. 이전 모델에서의 실제값과 예측값의 오차(loss)를 훈련 데이터에 투입한 후, gradient를 이용해 오류를 보완해 나간다.

  • 여러개의 Decision Tree 순차적 학습
  • 이전 모델의 오차를 다음 모델이 보정
  • 만들어진 트리들의 예측 결과를 합산해 예측

개발 방법에는 두가지가 존재한다.

  1. 사이킷런 XGBoost 모듈 사용
  2. 파이썬 XGBoost 모듈 사용

사용

이 모델을 사용하게 위해선 설치가 필요하다.

pip install xgboost

XGBoost는 튜닝이 정말 중요하기에, 변수 설정을 잘 설정해주어야 한다.
나의 경우에는 변수나 데이터의 연관관계를 잘못 설정하여 모델 성능이 이상하게 나온 경험이 많다..

변수 설명

모델을 학습할 때 다음과 같이 변수들을 설정한다.

model = XGBRegressor(
    n_estimators=400,	# 트리 개수
    max_depth=7,	 	# 트리 최대 깊이
    learning_rate=0.2,	# 학습률
    subsample=0.8,
    colsample_bytree=0.8,
    random_state=42
)
model.fit(X_train, y_train)

위의 코드는 지금 내가 사용한 코드인데, 어떻게 작동하는지에 대해 설명하자면

  • 현재 모델이 만든 오차값을 계산
  • 이 오차를 예측하는 새로운 트리 학습
  • 각 트리의 결과를 조금씩 더해가며 예측값 보정
  • 이 과정을 n_estimators만큼 반복

다음과 같은 학습의 결과는 RMSE, R² Score로 확인 가능하다.

  • RMSE : 오차값, 값이 작을수록 모델의 예측 정확도가 높음.
  • R² Score : 모델 성능

n_estimators

  • 사용할 결정 트리(약한 학습기)의 개수
  • 많을수록 학습을 더 많이 해서 복잡한 패턴을 잘 학습할 수 있지만, 과적합(overfitting)의 위험도 커짐
  • 일반적으로 100~1000 사이에서 조절합니다. 그리드서치로 최적값 탐색 가능.

max_depth

  • 각 트리의 최대 깊이.
  • 깊을수록 복잡한 규칙을 학습하지만, 역시 과적합 위험
  • 3~10 사이에서 조정. 데이터가 복잡할수록 깊이를 늘릴 수 있음

learning_rate

  • 학습률 (learning rate) 또는 eta 값으로, 매 반복마다 가중치를 얼마나 갱신할지 결정.
  • 작을수록 안정적으로 학습하지만 느리고, 클수록 빠르지만 불안정.
  • 0.01~0.3 사이를 많이 사용. 낮출수록 n_estimators를 늘려야 효과적

subsample

  • 각 트리를 학습할 때 전체 데이터 중 무작위로 뽑는 비율
  • 과적합 방지용. 매번 다른 데이터 샘플로 학습하게 해서 일반화 성능 향상.
  • 0.5~1.0 범위에서 사용. 과적합일수록 낮추면 좋음.

colsample_bytree

  • 각 트리를 학습할 때 사용할 특성(feature)의 비율.
  • 특성 중 일부만 사용하게 하여 다양성을 주고 과적합 방지.
  • 기본값은 1.0. 보통 0.5~1.0 사이로 설정해서 다양성을 확보.

random_state=42

  • 랜덤 시드 값을 고정
  • 실험을 재현 가능하게 만들어줌
  • 어떤 숫자든 무관하지만, 42는 관례적으로 많이 씀.

gamma

  • 분할에 필요한 최소 손실 감소량
  • 값이 클수록 보수적
profile
공부 기록 공간 '◡'

0개의 댓글