공부

xgboost 모델

무른2 2024. 12. 26. 21:49

 

1. 정의

  • GBT모델과 비슷하지만 GBT 모델에 병렬 처리, 하드웨어 최적화, 과적합 규제 페널티 등의 개념을 도입하여 최적화한 모델이다. 
  • Xgboost는 Gradient Tree boosting이다.
    Xgboost의 기본 학습기는 의사결정나무로 하며 gradient를 이용하여 GBT의 약점을 보완한다.

 

1-1 Boosting의 주요 아이디어

  • 여러 개의 learning 모델을 순차적으로 구축하여 최종적으로 합침(앙상블)
  • 사용하는 모델 : 단순 모델 -이진 분류기에서 정확도가 0.5보다 조금 좋은 모델
  • 순차적 -> 모델 구축에 순서를 고려
  • 각 단계에서 새로운 base learner를 학습하여 이전 단계의 base learner의 단점 보완
  • 각 단계를 거치면서 모델이 점차 강해짐 -> boosting
  • boosting 알고리즘 종류
    1. Adaptive boosting(Adaboost)
    2. Gradient boosting machines(GBM)
    3. Xgboost
    4. Light gradient boost machines(Light GBM)
    5. Catboost

1-2 single vs bagging vs boosting

출처: https://youtu.be/GciPwN2cde4?si=EY4m4Da0m1oIjmmc (김성범 [교수/산업경영공학부])

 

single : 하나의 트레이닝 데이터에서 모델 만드는것
bagging:  하나의 트레이닝 데이터에서 여러 개의 샘플을 만들어 그로부터 각각 모델을 구하고 가중치를 가한 것(랜덤포레스트)
boosting: 하나의 트레이닝 샘플이 있으면 모델을 만들고 거기로부터 새로운 모델을 또 만들고 가중치를 계속 업데이트하여 모델들을 다 더한것

 

2. 특징

 

  • Bossting: 여러 개의 약한 학습기(주로 결정 트리)를 결합하여 강력한 예측 모델 생성
  • Regularization: 과적합을 방지하기 위해 L1 또는 L2 정규화 지원
  • Paraller processing: 트리의 분할을 병렬로 처리하여 학습 속도를 크게 향상
  • Scalling : 대규모 데이터셋을 처리할 수 있도록 설계

 

3. 작동 원리

1. 초기화: 초기 예측값 설정

2. 잔여 오차 계산: 현재 모델의 예측값과 실제 값 간의 오차 

3. 새로운 트리 학습: 잔여 오차를 예측하는 새로운 결정 트리 학습

4. 모델 업데이트: 새로 학습한 트리를 기존 모델에 추가하여 예측값 없데이트 

5. 반복

 

4. 주요 하이퍼파라미터

  • n_estimators: 생성할 트리의 수
  • learning_rate : 각 트리의 기여도를 조절하는 학습률
  • max_depth: 각 결정 트리의 최대 깊이
  • subsample: 각 트리를 학습할 때 사용할 샘플의 비율
  • colsample_bytree: 각 트리를 학습할 때 사용할 특성의 비율 

5. 예제(출처:https://riverzayden.tistory.com/17)

 

보스턴 주택 가격 데이터셋을 로드하여 Xgboost 알고리즘으로 모델 성능 평가

from sklearn.datasets import load_boston
import xgboost
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.metrics import explained_variance_score

boston = load_boston()
X_train, X_test, y_train, y_test = train_test_split(boston.data, boston.target ,test_size=0.1)
xgb_model = xgboost.XGBRegressor(n_estimators=100, learning_rate=0.08, gamma=0, subsample=0.75,
                           colsample_bytree=1, max_depth=7)

print(len(X_train), len(X_test))
xgb_model.fit(X_train,y_train)

 

xgboost.plot_importance(xgb_model)

 

predictions = xgb_model.predict(X_test)
predictions

 

 

r_sq = xgb_model.score(X_train, y_train)
print(r_sq)
print(explained_variance_score(predictions,y_test))