XGBoost vs Python Sklearn-Bäume wurden mit einem Anstieg versehen

20

Ich versuche zu verstehen, wie XGBoost funktioniert. Ich verstehe bereits, wie gradientenverstärkte Bäume auf Python Sklearn funktionieren. Was mir nicht klar ist, ist, ob XGBoost auf die gleiche Weise funktioniert, aber schneller, oder ob es grundlegende Unterschiede zwischen ihm und der Python-Implementierung gibt.

Wenn ich diese Zeitung lese

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

Für mich sieht es so aus, als ob das Endergebnis von XGboost dasselbe ist wie in der Python-Implementierung. Der Hauptunterschied besteht jedoch darin, wie XGboost die beste Aufteilung für jeden Regressionsbaum findet.

Grundsätzlich liefert XGBoost das gleiche Ergebnis, ist jedoch schneller.

Ist das richtig oder fehlt mir noch etwas?

Ziemlich Nerdy
quelle

Antworten:

18

Sie haben Recht, XGBoost ('eXtreme Gradient Boosting') und sklearns GradientBoost sind im Grunde genommen die gleichen, da beide Implementierungen zur Gradientenanhebung sind.

Unter der Haube gibt es jedoch in praktischer Hinsicht erhebliche Unterschiede. XGBoost ist viel schneller (siehe http://machinelearningmastery.com/gentle-introduction-xgboost-applied-machine-learning/ ) als sklearns. XGBoost ist sehr speichereffizient und kann parallelisiert werden (ich denke, sklearn kann dies nicht standardmäßig, ich weiß nicht genau über die Speichereffizienz von sklearn Bescheid, aber ich bin ziemlich sicher, dass es unter XGBoost liegt).

Nachdem beide verwendet wurden, ist die Geschwindigkeit von XGBoost ziemlich beeindruckend und die Leistung ist der von GradientBoosting von sklearn überlegen.

K88
quelle
1
Es gibt auch einen Leistungsunterschied. Xgboost verwendete zweite Ableitungen, um die optimale Konstante in jedem Endknoten zu finden. Die Standardimplementierung verwendet nur die erste Ableitung.
Zelazny7
@ Zelazny7 Hast du irgendwelche Referenzen für deine Aussage? Man würde erwarten, dass die Berechnung der 2. Derivate die Performance verschlechtern würde. Es würde auch bedeuten, dass etwas anderes als (irgendein Geschmack von) Gradientenabstieg verwendet wurde.
meh
Bestätigung für @ K88s Beitrag, sklearns GradientBoostingClassifier verfügt nicht über einen n_jobsSchnittstellenparameter. Eine parallele Verarbeitung ist intern mit der Implementierung des Algorithmus durch sklearn nicht möglich.
BMC
7

Im Gegensatz zur Steigungserhöhung des Sklearn führt Xgboost auch eine Regularisierung des Baums durch, um eine Überanpassung zu vermeiden, und verarbeitet die fehlenden Werte auch effizient. Der folgende Link kann hilfreich sein, um xgboost genau zu lernen: https://www.youtube.com/watch?v=Vly8xGnNiWs

Harshit Mehta
quelle
Das GBM von SkLearn führt die Regularisierung über den Parameter learning_rate durch.
Teja Chebrole
1

XGboost ist eine Implementierung von GBDT mit Randmization (verwendet Coloumn Sampling und Row Sampling). Die Reihenabtastung ist möglich, indem nicht alle Trainingsdaten für jedes Basismodell des GBDT verwendet werden. Anstatt alle Trainingsdaten für jedes Basismodell zu verwenden, nehmen wir eine Teilmenge von Zeilen und verwenden nur diese Datenzeilen, um jedes der Basismodelle zu erstellen. Dies stellt sicher, dass die Wahrscheinlichkeit einer Überanpassung geringer ist. Dies ist ein Hauptproblem bei einfachen GBDTs, die XGBoost mithilfe dieser Randomisierung zu beheben versucht.

Hemanth
quelle