Árboles impulsados ​​por el gradiente XGBoost vs Python Sklearn


20

Estoy tratando de entender cómo funciona XGBoost. Ya entiendo cómo funcionan los árboles impulsados ​​por gradiente en Python sklearn. Lo que no está claro para mí es si XGBoost funciona de la misma manera, pero más rápido, o si hay diferencias fundamentales entre él y la implementación de Python.

Cuando leo este artículo

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

Me parece que el resultado final que sale de XGboost es el mismo que en la implementación de Python, sin embargo, la principal diferencia es cómo XGboost encuentra la mejor división para hacer en cada árbol de regresión.

Básicamente, XGBoost da el mismo resultado, pero es más rápido.

¿Es esto correcto o hay algo más que me estoy perdiendo?

Respuestas:


18

Estás en lo correcto, XGBoost ('eXtreme Gradient Boosting') y Sklearn's GradientBoost son básicamente los mismos, ya que ambas son implementaciones de aumento de gradiente.

Sin embargo, hay diferencias muy significativas bajo el capó en un sentido práctico. XGBoost es mucho más rápido (ver http://machinelearningmastery.com/gentle-introduction-xgboost-applied-machine-learning/ ) que sklearn's. XGBoost es bastante eficiente en memoria y puede ser paralelo (creo que sklearn no puede hacerlo por defecto, no sé exactamente sobre la eficiencia de memoria de sklearn, pero estoy bastante seguro de que está por debajo de XGBoost).

Después de haber usado ambos, la velocidad de XGBoost es bastante impresionante y su rendimiento es superior al GradientBoosting de sklearn.


1
También hay una diferencia de rendimiento. Xgboost usó segundas derivadas para encontrar la constante óptima en cada nodo terminal. La implementación estándar solo usa la primera derivada.
Zelazny7

@ Zelazny7 ¿Tiene alguna referencia para su declaración? Uno esperaría que el cálculo de la segunda derivada degradaría el rendimiento. También significaría que se utilizó algo además del descenso de gradiente (cualquier sabor de).
meh



Confirmación de la publicación de @ K88, GradientBoostingClassifier de sklearn no tiene un n_jobsparámetro de interfaz disponible; El procesamiento paralelo no es posible internamente con la implementación del algoritmo por parte de sklearn.
bmc

7

A diferencia del aumento de gradiente de Sklearn, Xgboost también regulariza el árbol para evitar el sobreajuste y también trata eficientemente los valores faltantes. El siguiente enlace puede ser útil para aprender xgboost con precisión https://www.youtube.com/watch?v=Vly8xGnNiWs


El GBM de SkLearn realiza la regularización a través del parámetro learning_rate.
Teja Chebrole

1

XGboost es la implementación de GBDT con randmization (utiliza muestreo de columnas y muestreo de filas). El muestreo de filas es posible al no utilizar todos los datos de entrenamiento para cada modelo base del GBDT. En lugar de usar todos los datos de entrenamiento para cada modelo base, muestreamos un subconjunto de filas y usamos solo esas filas de datos para construir cada uno de los modelos base. Esto garantiza que haya una menor posibilidad de sobreajuste, que es un problema importante con GBDT simple que XGBoost intenta abordar utilizando esta aleatorización.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.