출퇴근길에 공부하는 머신러닝
XGBoost는 eXtreme Gradient Boosting의 줄임말로, Gradient Boosting Machine의 고도화된 형태이다. Boosting 기법을 기반으로 한 이 알고리즘은 병렬 학습이 가능하도록 설계되었으며, 회귀와 분류 문제 모두에 뛰언나 성능을 보인다.
XGBoost는 GBM에 비해서 빠른 수행 속도를 자랑한다. 이는 XGBoost의 병렬 처리 능력 덕분이다. 그리고 XGBoost는 과적합을 방지하는 패널티 항을 포함하고 있으며, 다양한 지도 학습 문제에서 뛰어난 성능을 보여준다. 추가적으로 결측치를 내부적으로 처리할 수 있다는 특징도 가지고 있다. 정리하자면 빠른 수행시간, 과적합 방지, 뛰어난 성능, 결측치 처리가 되겠다.
트리의 분할 지점을 찾기 위해 일반적으로 사용되는 방법으로 순도나 정보 획득량이 높은 지점을 기준으로 한다. 장점으로는 가능한 모든 분할 지점을 탐색하기 때문에 최적의 분할 지점을 항상 보장한다는 것이다. 단점으로는 데이터 크기가 커질수록 가능한 모든 분할 지점을 찾기 어렵게 된다는 것이다. 또한 메모리 문제나 분산 환경에서의 처리가 어려울 수 있다.
특정 피처의 값을 오름차순으로 정렬한 후, 버킷(데이터를 여러 개의 그룹 또는 구간으로 나누는 것)을 정하여 데이터셋을 나눈다. 각 버킷 내에서 분할 지점을 찾아, 정보 획득량이 가장 높은 지점을 최적의 분할 지점으로 선정한다. 이 방식은 병렬 처리가 가능하며, 대규며 데이터 처리에 유용하다.
XGBoost는 효과적으로 결측치를 처리한다. 실제 데이터에서는 결측치 뿐만 아니라 0값도 많이 나타나게 된다. 학습 시 기본 방향을 정의하여 새로운 결측치나 0데이터가 들어왔을 때 해당 기본 방향으로 데이터를 보낸다.
XGBoost는 트리를 학습시키면서 분할 지점을 찾기 위해 피처 값을 정렬한다. 이렇게 정렬된 데이터는 Column-wise 방식으로 저장되며, 이후에는 다시 정렬할 필요가 없다. 따라서 시간을 절약할 수 있다. 또한, 캐시를 효율적으로 활용하여 계산 속도를 높이는 기능도 포함되어 있다.
XGBoost는 그 성능과 효율성으로 많은 데이터 과학자와 연구자들에게 인기가 있다. 특히, 대규모 데이터에 대한 빠른 처리 능력과 결측치 처리 기능, 그리고 병렬 처리 능력은 XGBoost를 독특하게 만든다. 2015년 Kaggle 대회에서 상위 10개 팀이 모두 XGBoost를 사용하기도 하였다.