Machine Learning/scikit-learn
[앙상블] XGBoost 개념과 사이킷런 래퍼 예제
ISLA!
2023. 8. 30. 10:47
부스팅이란?
- 순차적으로 모델의 정확도를 높이는 방법
- 전체 학습데이터에서 일부를 선택하여 하위 데이터 세트와 이를 학습할 첫 번째 모델을 만듦
- 첫 번째 모델이 잘 학습하지 못한 부분을 반영해서 두 번째 데이터 세트와 모델을 만들고, 이 과정을 반복하여 점진적으로 모델 정확도를 높임
XGBoost(Extreme Gradient Boosting)란?
- 이러한 부스팅 기법을 이용하여 구현한 알고리즘은 Gradient Boost 가 대표적
- 이 알고리즘을 병렬 학습이 지원되도록 구현한 것이 XGBoost (학습시간 단축을 위함)
- GBM에 기반하고 있지만, GBM의 단점인 느린 수행 시간 및 과적합 규제 부재 등의 문제를 해결함
- 병렬 CPU 환경에서 병렬 학습이 가능해 기존 GBM보다 학습을 빠르게 완료
XGBoost의 주요 장점
- 뛰어난 예측 성능
- GBM 대비 빠른 수행 시간
- 과적합 규제 : 자체에 과적합 규제 기능으로, 과적합에 좀 더 강한 내구성이 있음
- 나무 가지치기(Tree Pruning) : 더 이상 긍정 이득이 없는 분할을 가지치기 해서 분할 수를 더 줄이는 추가적인 장점이 있음
- 자체 내장된 교차 검증 : 반복 수행 시마다 내부적으로 학습/평가 데이터 세트를 나누어 교차 검증을 수행해 최적화된 반복 수행 횟수를 가짐(평가 데이터 세트의 평가 값이 최적화되면 반복을 중간에 멈출 수 있는 조기 중단 기능 있음)
- 결손값 자체 처리
XGBoost 사용법
- XGBoost 프레임워크 기반의 파이썬 래퍼 모듈
- 사이킷런과 연동되는 사이킷런 래퍼 모듈이 있음
사이킷런 래퍼 XGBoost의 모델 학습과 예측
fit( ) 메서드의 매개변수
from xgboost import XGBClassifier
# XGBClassifier 객체 생성
xgb_ml = XGBClassifier(n_estimators = 400, learning_rate = 0.05, max_depths = 3, eval_metrics = 'logloss')
evals = [(X_tr, y_tr), (X_val, y_val)]
# 모델 학습
xgb_ml.fit(X_train,y_train, early_stopping_rounds=50, eval_set=evals, verbose=True)
y_pred = xgb_ml.predict(X_test)
- eval_set : 모델 학습 중 성능을 평가할 데이터 세트를 지정
- 검증 데이터를 사용하며, 데이터를 튜플로 묶어서 eval_set 매개변수에 리스트 형태로 전달
- 부스팅이 종료될 때마다 해당 데이터셋을 사용하여 모델 성능을 확인하며 검증 점수를 반환
- verbose : 학습 결과 출력 조건을 설정
- verbose를 10으로 설정할 경우, 부스팅을 수행한 횟수가 10의 배수 일때, eval_metric 매개변수에 입력한 평가 지표에 대한 검증 점수를 반환
XGBoost의 모델 검증 시각화
RMSE = rmse(y_valid, y_pred)
plt.figure(dpi=150)
plt.title('RMSE : ' + str(RMSE)[:8])
plt.plot(y_valid.reset_index(drop=True), alpha=0.6, label='real')
plt.plot(y_pred, alpha=0.6, label='pred')
plt.legend()
plt.show()
728x90