XGBoost vs Python Sklearn 그라디언트 부스트 트리


20

XGBoost가 어떻게 작동하는지 이해하려고합니다. Python sklearn에서 그라디언트 향상 트리가 어떻게 작동하는지 이미 알고 있습니다. 분명하지 않은 것은 XGBoost가 동일한 방식으로 작동하지만 더 빠르거나 파이썬 구현과 근본적인 차이점이 있는지입니다.

이 논문을 읽을 때

http://learningsys.org/papers/LearningSys_2015_paper_32.pdf

XGboost에서 나온 최종 결과가 Python 구현에서와 같은 것처럼 보이지만 주요 차이점은 XGboost가 각 회귀 트리에서 만들 수있는 최상의 분할을 찾는 방법입니다.

기본적으로 XGBoost는 동일한 결과를 제공하지만 더 빠릅니다.

이것이 맞습니까? 아니면 누락 된 것이 있습니까?

답변:


18

맞습니다. XGBoost ( 'eXtreme Gradient Boosting')와 sklearn의 GradientBoost는 둘 다 그래디언트 부스트 구현과 기본적으로 동일합니다.

그러나 실제적인 의미에서 후드 아래에는 매우 큰 차이가 있습니다. XGBoost는 sklearn보다 훨씬 빠릅니다 ( http://machinelearningmastery.com/gentle-introduction-xgboost-applied-machine-learning/ 참조 ). XGBoost는 상당히 메모리 효율적이며 병렬화 될 수 있습니다 (sklearn은 기본적으로 그렇게 할 수 없다고 생각합니다 .sklearn의 메모리 효율성에 대해서는 정확히 알지 못하지만 XGBoost 아래에 있다고 확신합니다).

XGBoost의 속도는 두 가지를 모두 사용하여 매우 인상적이며 Sklearn의 GradientBoosting보다 성능이 뛰어납니다.


1
성능 차이도 있습니다. Xgboost는 2 차 도함수를 사용하여 각 터미널 노드에서 최적 상수를 찾았습니다. 표준 구현은 첫 번째 파생 상품 만 사용합니다.
Zelazny7 2016 년

@ Zelazny7 당신은 당신의 진술에 대한 참조가 있습니까? 2 차 도함수를 계산하면 성능이 저하 될 것으로 예상합니다. 또한 구배 하강 이외의 어떤 것이 사용되었다는 것을 의미합니다.
meh



@ K88의 게시물을 확인하면 sklearn의 GradientBoostingClassifier 에는 n_jobs사용 가능한 인터페이스 매개 변수가 없습니다. Sklearn의 알고리즘 구현으로는 내부적으로 병렬 처리가 불가능합니다.
bmc

7

Sklearn의 그래디언트 부스팅과 달리 Xgboost는 과적 합을 피하기 위해 트리를 정규화하고 누락 된 값도 효율적으로 처리합니다. 다음 링크는 xgboost를 정확하게 배우는 데 도움이 될 수 있습니다 https://www.youtube.com/watch?v=Vly8xGnNiWs


SkLearn의 GBM은 learning_rate 매개 변수를 통해 정규화를 수행합니다.
Teja Chebrole

1

XGboost는 randmization (Column Sampling 및 Row Sampling 사용)을 사용하여 GBDT를 구현 한 것으로, GBDT의 각 기본 모델에 대해 모든 훈련 데이터를 사용하지 않아도 행 샘플링이 가능합니다. 각 기본 모델에 대해 모든 교육 데이터를 사용하는 대신 행의 하위 집합을 샘플링하고 해당 데이터 행만 사용하여 각 기본 모델을 작성합니다. 이를 통해 XGBoost가이 임의 화를 사용하여 해결하려고하는 단순한 GBDT의 주요 문제인 과적 합 가능성이 줄어 듭니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.