Drzewa wzmocnione gradientem XGBoost kontra Python Sklearn

20

Próbuję zrozumieć, jak działa XGBoost. Już rozumiem, w jaki sposób drzewa wzmocnione gradientem działają na sklearn Pythona. Nie jest dla mnie jasne, czy XGBoost działa w ten sam sposób, ale szybciej, czy istnieją fundamentalne różnice między nim a implementacją Pythona.

Kiedy czytam ten artykuł

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

Wydaje mi się, że wynik końcowy wychodzący z XGboost jest taki sam jak w implementacji Pythona, jednak główna różnica polega na tym, jak XGboost znajduje najlepszy podział do wykonania w każdym drzewie regresji.

Zasadniczo XGBoost daje ten sam wynik, ale jest szybszy.

Czy to prawda, czy brakuje mi czegoś jeszcze?

Dość nerdy
źródło

Odpowiedzi:

18

Masz rację, XGBoost („eXtreme Gradient Boosting”) i sklearn's GradientBoost są zasadniczo takie same, ponieważ oba są implementacjami zwiększającymi gradient.

Istnieją jednak bardzo istotne różnice pod maską w sensie praktycznym. XGBoost jest znacznie szybszy (patrz http://machinelearningmastery.com/gentle-introduction-xgboost-applied-machine-learning/ ) niż sklearn. XGBoost jest dość wydajne pod względem pamięci i może być zrównoleglone (myślę, że sklearn nie może tego domyślnie zrobić, nie wiem dokładnie o wydajności pamięci sklearn, ale jestem całkiem pewien, że jest poniżej XGBoost).

Po zastosowaniu obu, prędkość XGBoost jest imponująca, a jego wydajność jest lepsza niż GradientBoosting sklearn.

K88
źródło
1
Istnieje również różnica w wydajności. Xgboost wykorzystał drugie pochodne, aby znaleźć optymalną stałą w każdym węźle końcowym. Standardowa implementacja wykorzystuje tylko pierwszą pochodną.
Zelazny7
@ Zelazny7 Czy masz jakieś odniesienia do swojego oświadczenia? Można się spodziewać, że obliczenie 2. instrumentów pochodnych pogorszyłoby wyniki. Oznaczałoby to również, że użyto czegoś oprócz (dowolnego smaku) spadku gradientu.
meh
2
Istotne pytania i odpowiedzi na temat Datascience: Dlaczego xgboost jest o wiele szybszy niż sklearn, a tutaj os Statystyki: Funkcja utraty XGBoost Przybliżenie z rozszerzeniem Taylora
mruga
Potwierdzenie do posta @ K88, GradientBoostingClassifier sklearn nie ma n_jobsdostępnego parametru interfejsu; równoległe przetwarzanie nie jest możliwe wewnętrznie przy implementacji algorytmu przez sklearn.
bmc
7

W przeciwieństwie do zwiększania gradientu Sklearn, Xgboost dokonuje również regularyzacji drzewa, aby uniknąć nadmiernego dopasowania i skutecznie radzi sobie z brakującymi wartościami. Poniższy link może pomóc w dokładnym nauczeniu się xgboost https://www.youtube.com/watch?v=Vly8xGnNiWs

Harshit Mehta
źródło
SkLearn GBM dokonuje legalizacji za pomocą parametru learning_rate.
Teja Chebrole
1

XGboost jest implementacją GBDT z randmizacją (używa próbkowania coloumn i próbkowania wierszy). Próbkowanie rzędowe jest możliwe, ponieważ nie wykorzystuje się wszystkich danych treningowych dla każdego modelu podstawowego GBDT. Zamiast używać wszystkich danych szkoleniowych dla każdego modelu podstawowego, próbkujemy podzbiór wierszy i używamy tylko tych wierszy danych, aby zbudować każdy z modeli podstawowych. Zapewnia to mniejszą szansę na przeregulowanie, co jest poważnym problemem w przypadku prostego GBDT, który XGBoost próbuje rozwiązać za pomocą tej randomizacji.

Hemanth
źródło