PL/Python

Ensemble Learning 5: XGBM - 이론 파트

PIYA 2022. 12. 22.

Introduction

지난 시간에 Adaboost와 GBM에 대해 간단하게 정리했다.

이번에는 XGBoost에 대해서 정리해보자.

 

 

 

XGBoost 소개

eXtreme Gradient Boost.

단어 자체에서 알 수 있듯, Gradient Boost (GBDT, GBM)을 기반으로 동작하는 머신러닝 알고리즘이다.

그래디언트 부스트보다 분류나 회귀에서 뛰어난 예측 성능을 보여준다.

 

CPU 병렬처리와 GPU를 지원하기 때문에 GBM보다 학습속도가 빠르다.

하지만 LightGBM등 다른 앙상블 계열의 알고리즘보다 느린 편.

 

다양한 성능 향상 기능이 있다.

GBM에 없던 Regularization과 Tree pruning이 추가되었다.

 

다양한 편의 기능이 추가되었다.

Early Stopping, 자체 내장된 교차 검증, 결손값 자체 처리 등.

 

 

Early Stopping

얼리 스타핑, Early stopping은 신경망에서 많이 사용하며, 과적합을 방지하는 역할을 한다.

 

위 그래프와 같이 반복 학습시 학습데이터의 에러는 계속해서 줄어들 수 있다.

하지만 검증 데이터셋의 에러를 그려본다면 위 그래프와 같이 어느 순간부터 증가하는 것을 볼 수 있다.

이는 과적합 때문이며, 이를 방지하기 위해 조기종료, Early Stopping을 한다.

 

XGBoost는 특정 반복 횟수만큼더 이상 비용함수가 감소하지 않으면,

지정된 반복횟수를 다 완료하지 않고 수행을 종료할 수 있다.

 

Early stopping을 위한 주요 파라미터

early_stopping_rounds: 더 이상 비용 평가 지표가 감소하지 않는 최대 반복횟수.

eval_metric: 반복수행시 사용하는 비용 평가 지표

eval_set: 평가를 수행하는 별도의 검증 데이터 세트. 딜반적으로 검증 데이터 세트에서 반복적으로 비용 감소 성능 평가.

 

 

 

Installation

 

dlmc 개발그룹의 xgboost는 원래는 C/C++로 작성되었지만, 파이썬 Wrapper가 그다음 등장했고,

이후 Scikit Learn이 영향력을 얻으면서 사이킷런 래퍼도 나오게 되었다.

 

 

Python 설치

간단히 pip로 설치할 수 있다.

pip install xgboost

 

Conda 설치

Anaconda Prompt를 관리자 권한으로 실행시킨다.

(base)라고 되어있는 디렉토리의 콘솔에 입력하면 된다.

conda install -c conda-forge py-xgboost

 

 

 

파이썬 Wrapper vs 사이킷런 Wrapper

 

간단하게 실험할 때는 사이킷런으로 사용하면 좋겠지만,

나중에 본격적(?)으로 실험하려면 파이썬 Wrapper도 정리하고 지나가는 게 맞지 싶다.

내가 지금 가려가며 배울 입장인가?ㅎ

 

파이썬 Wrapper의 경우 'from xgboost as xgb'로 많이 쓰고,

사이킷런은 다른 classifier 들과 마찬가지로

'from xgboost import XGBClassifier' 와 같이 쓴다.

 

가장 큰 차이점은 파이썬 Wrapper가 DMatrix 객체를 사용한다는 것이다.

DMatrix는 XGBoost에서 사용하는 자료형이며, 메모리 효율성과 트레이닝 속도 측면에서 최적화되어있다.

넘파이, 판다스 등 여러 데이터포맷에서 DMatrix로 변환할 수 있다.

 

xgb의 경우 xgb.train() 학습시에 객체를 반환받아야하며,

사이킷런은 반환받지 않고, XGBClassifier.fit()으로 학습한다.

 

예측 API 사용 시 xgb.predict()는 사이킷런의 predict_proba()처럼 작동한다.

 

하이퍼파라미터 비교

사이킷런 Wrapper의 경우 GBM에 동일한 하이퍼파라미터가 있다면 이를 사용하고,

그렇지 않다면 파이썬 Wrapper의 하이퍼 파라미터를 사용한다.

 

 

 

Regularization에 대해서는 다음에 다시 정리하기.

 

 

 

 

Conclusion

XGBoost에 대해서 간단하게 정리해보았다.

이론만 일단 적었고, 다음번에 실제 코드도 돌려보자!

 

Reference

파이썬 머신러닝 완벽 가이드 - 권철민

 

댓글