본문 바로가기

ML & DM/Ensemble Learning

A Gentle Introduction to XGBoost for Applied Machine Learning

원문 :  http://machinelearningmastery.com/gentle-introduction-xgboost-applied-machine-learning/


XGBoost는 최근 Kaggle competition들과 응용기계학습에서 가장 잘나가는 알고리즘이다.

XGBoost는 gradient boosted decision trees(속칭 GBM)을 속도와 성능면에서 향상시킨 알고리즘이다.

이 포스팅에서, XGBoost가 무엇이고, 어디서 유래되었고, 또 어떻게 학습시키는지 등을 설명할 것이다.

이 포스팅을 읽고 난 후, 여러분은 다음을 알게될 것이다. :

  • XGBoost가 무엇이고 이 프로젝트의 목적들이 무엇인지.
  • 왜 XGBoost는 따로 머신러닝 툴킷으로 나왔는지.
  • 당신의 다음 머신러닝 프로젝트에 사용하기 위해, 어디서 더 배울수 있는지.

시작해보자!



What is XGBoost?

XGBoost는 eXtreme Gradient Boosting를 나타낸다.

그러나 xgboost란 이름이 boosted tree algorithm들의 계산리소스의 한계를 넘기위한, 기능적 목표를 지칭한다.

— Tianqi Chen, in answer to the question “What is the difference between the R gbm (gradient boosting machine) and xgboost (extreme gradient boosting)?” on Quora

이것은 Tianqi Chen에 의해 만들어지고, 많은 개발자들의 도움으로 발전된 gradient boosting machines의 한 종류이다. 이것은 the umbrella of the Distributed Machine Learning Community 또는 인기있는 mxnet deep learning library를 만든 DMLC의 더 넓은 범위의 툴 컬렉션(패키지 말하는거 같음)에 포함된다.

Tianqi Chen은 XGBoost를 만들면서 생긴 뒷이야기들을 다음 포스팅에서 말했다. : Story and Lessons Behind the Evolution of XGBoost.

XGBoost는 여러분의 컴퓨터에 다운로드 받아 설치한 후, 다양한 인터페이스들로부터 접근할 수 있는 소프트웨어 라이브러리이다. 특히, XGBoost는 다음 메인 인터페이스들을 지원한다.

  • Command Line Interface (CLI).
  • C++ (the language in which the library is written).
  • Python interface as well as a model in scikit-learn.
  • R interface as well as a model in the caret package.
  • Julia.
  • Java and JVM languages like Scala and platforms like Hadoop.

XGBoost Features

이 라이브러리는, 불필요한 기능이 거의 없이 오직 속도와 모델 성능에만 초점이 맞춰졌다. 그럼에도 불구하고, XGBoost는 많은 기능들을 제공한다.


Model Features

XGB모형은 Regularization기능과 함께 R과 scikit-learn의 실행을 지원한다. 다음 3가지 gradient boosting이 지원된다.

  • 알고리즘은 학습률(Learning rate)를 포함한 gradient boosting machine인 Gradient Boosting
  • 행,열 그리고 범주들 마다의 열에서의 하위표본샘플링의 Stochastic Gradient Boosting  
  • L1 과 L2 regularization.이 있는 Regularized Gradient Boosting

System Features

이 라이브러리는 특히, 다양한 컴퓨터 환경에서 사용할 하나의 시스템을 제공한다.

  • 학습하는 동안, 모든 CPU코어들을 사용하여, 나무를 생성하는 Parallelization 
  • 한 클러스터의 기계들을 사용하여, 매우 큰 모델들을 학습하기 위한 Distributed Computing 
  • 메모리에 맞지 않는 엄청 큰 데이터셋들을 위한 Out-of-Core Computing
  • 하드웨어의 최상의 사용을 위해, 데이터 구조와 알고리즘에 대한 Cache Optimization

Algorithm Features

알고리즘의 실행은 실행시간과 메모리 리소스들의 효율성에 맞춰져 있다. 이렇게 디자인된 목적은 모델을 훈련시키기 위해 이용가능한 자원들을 최적으로 사용하도록 하는 것이다. 이 알고리즘의 몇가지 중요한 특징들은 다음과 같다. :

  • 결측치를 자동적으로 처리하는 Sparse Aware 
  • 나무 생성 병렬화를 지원하는 Block Structure
  • 새로운 데이터에 대해, 이전에 학습한 모델의 성능을 더 향상시키기 위한 Continued Training

XGBoost는 Apache-2 라이센스하에서 무료 오픈소스 소프트웨어로 사용이 가능하다.

Why Use XGBoost?

XGBoost를 사용하는 2가지 이유가 또한 프로젝트의 2가지 목표가 된다.

  1. Execution Speed.
  2. Model Performance.

1. XGBoost Execution Speed

일반적으로, XGBoost는 빠르다. 다른 Gradient boosting모델들의 실행에 비해 정말 빠르다.

Szilard Pafka는 XGBoost의 성능과 다른 Gradient boosting과 Bagged 트리들의 성능을 비교한 객관적인 벤치마크를 보여줬다. 그는 2015년 5월달에 이 결과들을 블로그에 썼다. :  “Benchmarking Random Forest Implementations“.

그는 또한 모든 코드와 구체적인 숫자로 더 심화된 결과내용을 깃허브를 통해 제공했다.

Benchmark Performance of XGBoost

Benchmark Performance of XGBoost, taken from Benchmarking Random Forest Implementations.

이 결과들은 XGBoost가 거의 항상 R, Python, Spark, H2O 같은 다른 벤치마크들보다 빠르다는걸 보여줬다.

이 실험에 대해, 그는 다음과 같이 말했다.

나 또한 XGBoost를 사용했다. 이 라이브러리는 boosting을 위한 것이지만, random forests도 만드는 것이 가능하다. 이것은 빠르고, 메모리효율적이고 높은 정확도를 보여준다.

— Szilard Pafka, Benchmarking Random Forest Implementations.

2. XGBoost Model Performance

XGBoost는 구조화되거나 혹은 표로 정리된 데이터셋에서 분류 혹은 회귀 예측모형을 만드는 문제에서, 가장 많이 쓰인다.

캐글에서 많은 우승자들의 도움이되는 알고리즘에 XGBoost가 있었다는 것이 그 증거다.

예를 들어, 1,2,3위를 한 입상자들이 사용한 미완성 리스트가 있다. :  XGBoost: Machine Learning Challenge Winning Solutions.

이를 좀더 자세히 보면, 아래 캐글 우승자들이 XGBoost에 대해 말한 것들이 있다.

많은 캐글우승자들을 통해, XGBoost가 여러분들의 툴박스에 있을 가치가 있는 만능의 알고리즘이 될 것임을 다시한번 보여줬다.

— Dato Winners’ Interview: 1st place, Mad Professors

확신이 안선다면, xgboost를 사용해라.

— Avito Winner’s Interview: 1st place, Owen Zhang

나는 성능좋은 단일모델들을 좋아한다. 그리고 나의 최고의 단일 모델은 XGBoost였다. XGBoost 하나로만 10등의 성적을 낼 수 있었다.

— Caterpillar Winners’ Interview: 1st place

나는 오직 XGBoost만 사용했다.

— Liberty Mutual Property Inspection, Winner’s Interview: 1st place, Qingchen Wang

내가 사용한 유일한 지도학습방법은 훌륭한 XGBoost 패키지에 있는 Gradient boosting이다.

— Recruit Coupon Purchase Winner’s Interview: 2nd place, Halla Yang

What Algorithm Does XGBoost Use?

XGBoost 라이브러리는 gradient boosting decision tree algorithm을 사용한다.

이 알고리즘은 다음과 같은 다양한 이름으로도 불린다. : gradient boosting, multiple additive regression trees, stochastic gradient boosting or gradient boosting machines.

Boosting은 이전 모델들에 의해 나온 오차들을 교정하기위해 새로운 모델들을 추가하는 하나의 앙상블 테크닉이다. 모델들은 더이상의 향상이 없을때 까지 순차적으로 더해진다. 가장 많이 쓰이는 예제가 예측하기 어려운 데이터 포인트들에 가중치를 주는 AdaBoost algorithm이다.

Gradient boosting은 이전모델들의 오차 또는 잔차들을 예측하는 새로운 모델을 생성한다. 그 후 최종 예측을 하기 위해, 이전모델과 새로운모델을 합친다. 여기서 새로운 모델들을 더할때, 오차를 최소화 시키기 위해 gradient descent 알고리즘을 사용하기 때문에 gradient boosting 이라고 부른다.

이 접근법은 회귀와 분류예측모델링 문제 둘 다 적용된다.

boosting and gradient boosting에 대해 더 자세한 내용은,  Gradient Boosting Machine Learning에 대한 Trevor Hastie’s talk를 참고해라.

Official XGBoost Resources

XGBoost에 대한 가장 좋은 정보는 official GitHub repository for the project 이다.

여기서, 여러분은  질문을 올리거나 버그를 제보할 수 있는, Issue TrackerUser Group에 접근할 수 있다.

예제 코드가 있는 좋은 곳은  Awesome XGBoost page.

다양한 다른 언어들, 튜토리얼, 가이드가 있는 곳은 official documentation page 

XGBoost의 배경에 대해 더 읽어 볼만한 공식적인 논문들이 몇개있다.

Talks on XGBoost

XGBoost같이 새로운 툴을 시작할때, 코드를 보기 전, 주제에 대한 몇개의 발표들을 보는것이 도움이 될 수 있다.

XGBoost: A Scalable Tree Boosting System

Tianqi Chen, the creator of the library gave a talk to the LA Data Science group in June 2016 titled “XGBoost: A Scalable Tree Boosting System“.

You can review the slides from his talk here:

There is more information on the DataScience LA blog.

XGBoost: eXtreme Gradient Boosting

Tong He, a contributor to XGBoost for the R interface gave a talk at the NYC Data Science Academy in December 2015 titled “XGBoost: eXtreme Gradient Boosting“.

You can review the slides from his talk here:

There is more information about this talk on the NYC Data Science Academy blog.

Installing XGBoost

There is a comprehensive installation guide on the XGBoost documentation website.

It covers installation for Linux, Mac OS X and Windows.

It also covers installation on platforms such as R and Python.

XGBoost in R

If you are an R user, the best place to get started is the CRAN page for the xgboost package.

From this page you can access the R vignette Package ‘xgboost’ [pdf].

 

There are also some excellent R tutorials linked from this page to get you started:

There is also the official XGBoost R Tutorial and Understand your dataset with XGBoost tutorial.

XGBoost in Python

Installation instructions are available on the Python section of the XGBoost installation guide.

The official Python Package Introduction is the best place to start when working with XGBoost in Python.

To get started quickly, you can type:

There is also an excellent list of sample source code in Python on the XGBoost Python Feature Walkthrough.

Summary

이 포스팅에서, 여러분은 응용기계학습을 위한 XGBoost 알고리즘을 알아봤다.

여러분은 다음을 배웠다. :

  • XGBoost는 빠르고 높은 성능의 Gradient boosting tree model을 만들어 주는 라이브러리다.
  • XGBoost는 다양한 어려운 머신러닝 작업들에 대해서 최고의 성능을 달성하고 있다.
  • 여러분은 이 라이브러리를 command line, Python and R에서 사용할수 있다는 것과 시작하는 방법을 안다.

XGBoost를 사용해 본적이 있으시다면, 여러분의 경험들을 아래에 코멘트 해주세요

이 포스팅 혹은 XGBoost에 대해 어느 질문이든 있다면, 댓글을 남기면 성심성의껏 답변해 드리겠습니다.

'ML & DM > Ensemble Learning' 카테고리의 다른 글

Catboost  (0) 2018.12.10
Random Forest  (1) 2016.02.26