Xgboost: Enfoque (documentación) ambigüedad

Creado en 25 nov. 2015  ·  3Comentarios  ·  Fuente: dmlc/xgboost

Hola, estoy tratando de entender el enfoque de xgboost para el entrenamiento de modelos. Con eso me refiero a lo siguiente. Puedo usar Booster e invocar xgb.train o puedo usar las API de sklearn para usar Classifier / Regressor. El problema es que en el enfoque anterior (de acuerdo con la documentación de xgboost) necesito especificar el número de iteraciones de impulso y no especifico ningún número de árboles, mientras que más adelante especifico el número de árboles impulsados ​​para que quepan, pero no tengo ninguna opción para especificar el número de iteraciones potenciadas. ¿El número de iteraciones de impulso es el número de estimadores? ¿Alguien puede aclarar esto?

Si leo el código correctamente, las API de sklearn usan un refuerzo interno, por lo que puedo asignar clf._Booster a mi xgb.train donde n_estimators es igual al número de rondas potenciadas. Y no necesito llamar a clf.fit si se ha realizado dicha asignación. Estoy en lo cierto? Si es así, ¿se puede ajustar la documentación para decir explícitamente que n_estimators es lo que num_rounds usó para xgb.train?

Sería bueno tener documentación que explique exactamente la relación entre el enfoque de refuerzo de bajo nivel y las API de sklearn, entiendo que luego llamará a la anterior, pero sería bueno entender cómo se hace y aclarar esto en la documentación para evitar confusiones para el final. -usuarios.

Comentario más útil

Hola Vladimir,

El impulso, en general, es un meta-algoritmo que de manera iterativa (o en "rondas") entrena una secuencia de aprendices (o estimadores) simples / débiles de tal manera que toda la combinación funciona mejor. Puede haber varios tipos de estudiantes débiles, no solo árboles. Por ejemplo, xgboost tiene árboles y opciones de modelo lineal (generalizadas). Curiosamente, estos aprendices débiles en xgboost se denominan "impulsores", y el modelo de combinación completo se denomina "aprendiz". Eso me dejó un poco perplejo cuando inicialmente estaba leyendo los documentos y el código de xgboost, ya que era algo inverso a mi propia impronta mental de la terminología.

Si bien sería bueno tener una nomenclatura consistente entre diferentes proyectos relacionados con el mismo tema y tener documentación de enlaces cruzados de alta calidad consistente, no siempre es factible o fácil de mantener, especialmente en proyectos de código abierto. Los usuarios novatos tienden a utilizar principalmente una única interfaz. Los usuarios que estén bien familiarizados con el tema podrían identificar fácilmente los puntos en común. Y quien se preocupa por los detalles de bajo nivel, generalmente se preocupa lo suficiente como para leer el código.

En cuanto a su pregunta específica, está leyendo bien que el parámetro n_estimators en el código de envoltura sklearn [1] se asigna a num_boost_round dentro de train [2]. Sin embargo, ¿por qué, como usuario final, querría piratear un objeto contenedor de sklearn de esa manera? Para hacerlo de una manera controlable, tendría que familiarizarse bastante bien con el código contenedor.

[1] https://github.com/dmlc/xgboost/blob/2859c190cd0d168df25e2a7ea2b1fd5211ce94f0/python-package/xgboost/sklearn.py#L185
[2] https://github.com/dmlc/xgboost/blob/83e61bf99ec7d01607867b4e281da283230883b1/python-package/xgboost/training.py#L12

Todos 3 comentarios

Hola Vladimir,

El impulso, en general, es un meta-algoritmo que de manera iterativa (o en "rondas") entrena una secuencia de aprendices (o estimadores) simples / débiles de tal manera que toda la combinación funciona mejor. Puede haber varios tipos de estudiantes débiles, no solo árboles. Por ejemplo, xgboost tiene árboles y opciones de modelo lineal (generalizadas). Curiosamente, estos aprendices débiles en xgboost se denominan "impulsores", y el modelo de combinación completo se denomina "aprendiz". Eso me dejó un poco perplejo cuando inicialmente estaba leyendo los documentos y el código de xgboost, ya que era algo inverso a mi propia impronta mental de la terminología.

Si bien sería bueno tener una nomenclatura consistente entre diferentes proyectos relacionados con el mismo tema y tener documentación de enlaces cruzados de alta calidad consistente, no siempre es factible o fácil de mantener, especialmente en proyectos de código abierto. Los usuarios novatos tienden a utilizar principalmente una única interfaz. Los usuarios que estén bien familiarizados con el tema podrían identificar fácilmente los puntos en común. Y quien se preocupa por los detalles de bajo nivel, generalmente se preocupa lo suficiente como para leer el código.

En cuanto a su pregunta específica, está leyendo bien que el parámetro n_estimators en el código de envoltura sklearn [1] se asigna a num_boost_round dentro de train [2]. Sin embargo, ¿por qué, como usuario final, querría piratear un objeto contenedor de sklearn de esa manera? Para hacerlo de una manera controlable, tendría que familiarizarse bastante bien con el código contenedor.

[1] https://github.com/dmlc/xgboost/blob/2859c190cd0d168df25e2a7ea2b1fd5211ce94f0/python-package/xgboost/sklearn.py#L185
[2] https://github.com/dmlc/xgboost/blob/83e61bf99ec7d01607867b4e281da283230883b1/python-package/xgboost/training.py#L12

¿Hay los mismos problemas para R?

El jueves 26 de noviembre de 2015 a las 11:39 a. M., Vadim Khotilovich <
[email protected]> escribió:

Hola Vladimir,

El impulso, en general, es un meta-algoritmo que iterativamente (o en
"rondas") entrena una secuencia de aprendices (o estimadores) simples / débiles en tales
de una manera que toda la combinación funcione mejor. Podría haber varios
tipos de aprendices débiles, no solo árboles. Por ejemplo, xgboost tiene árboles y
Opciones de modelo lineal (generalizado). Curiosamente, estos estudiantes débiles en
xgboost se denominan "impulsores", y todo el modelo de combinación es
referido como un "aprendiz". Eso me dejó un poco perplejo cuando inicialmente estaba
leer los documentos y el código de xgboost, ya que era algo inverso a mi propio
huella de la terminología.

Si bien sería bueno tener una nomenclatura consistente entre diferentes
proyectos relacionados con el mismo tema y tener un alto nivel
documentación de enlaces cruzados de calidad, no siempre es factible o fácil
mantenible, especialmente en proyectos de código abierto. Los usuarios novatos tienden a
en su mayoría utilizan una única interfaz. Usuarios que están bien familiarizados con el tema.
La materia sería fácilmente capaz de trazar un mapa de los puntos en común. Y a quien le importe
sobre detalles de bajo nivel, por lo general se preocupan lo suficiente como para leer el código.

En cuanto a su pregunta específica, está leyendo bien que los n_estimators
parámetro en el código de envoltura de sklearn [1] se asigna a num_boost_round dentro de
tren [2]. Sin embargo, ¿por qué, como usuario final, querría hackear un sklearn
envoltorio objeto de esa manera? Para hacerlo de manera controlable, tendrías
para llegar a conocer bastante bien el código contenedor.

[1]
https://github.com/dmlc/xgboost/blob/2859c190cd0d168df25e2a7ea2b1fd5211ce94f0/python-package/xgboost/sklearn.py#L185
[2]
https://github.com/dmlc/xgboost/blob/83e61bf99ec7d01607867b4e281da283230883b1/python-package/xgboost/training.py#L12

-
Responda a este correo electrónico directamente o véalo en GitHub
https://github.com/dmlc/xgboost/issues/651#issuecomment -159956213.

@khotilov , gracias por la explicación. Es suficiente para mis necesidades y cerraré el ticket.

¿Fue útil esta página
0 / 5 - 0 calificaciones