Xgboost: ¿Qué hace exactamente gblinear+reg:linear? y otras preguntas

Creado en 24 may. 2015  ·  12Comentarios  ·  Fuente: dmlc/xgboost

Hola,

Estoy empezando a descubrir el poder de xgboost y, por lo tanto, estoy jugando con conjuntos de datos de demostración (conjunto de datos de Boston de sklearn.datasets en este momento).

Si entiendo correctamente los parámetros, eligiendo:

plst=[('silent', 1),
 ('eval_metric', 'rmse'),
 ('nthread', 1),
 ('objective', 'reg:linear'),
 ('eta', 1),
 ('booster', 'gblinear'),
 ('lambda', 0),
 ('alpha', 10)]

Debería estar haciendo boosting con regresiones de Lasso como estudiantes débiles. _¿Es así?_ Si ese es el caso, con num_round=1 debería recuperar el resultado de una única regresión de Lasso, por lo tanto, un vector de peso muy escaso, que no es el caso en absoluto.
Pero, de hecho, no creo que sea posible obtener el resultado de una sola ronda. De hecho, el vector de peso del modelo cambia cuando cambio eta, incluso con num_round=1, lo que significa que hay al menos dos rondas, o de lo contrario he entendido algo mal. _¿Es correcta mi interpretación?_

Además, después de algunas pruebas, no creo que el parámetro eta se limite al árbol de aumento de gradiente en su implementación, aunque en el documento está en la subsección _parámetro de árbol_. Esto me parece lógico, ya que la reducción al establecer una tasa de aprendizaje es una forma de regularizar el aumento que no es específico para aumentar los árboles.
Lo que tampoco podría limitarse a impulsar el árbol es la opción 'submuestra'. Puede ser una forma de regularizar el impulso de los regresores lineales, así como el impulso de los árboles (al menos en teoría).

Finalmente, solo para estar seguro de que entiendo, al objetivo de aprendizaje corresponde una pérdida dada, que no está necesariamente vinculada a eval_metric, ¿solo se usa para la evaluación del usuario? Dado que se pueden especificar muchas eval_metrics. En ese caso, ¿cuáles son las diferentes pérdidas para reg:logistic , reg:linear y multi:softmax? (p. ej., ¿pérdida al cuadrado o pérdida absoluta para la regresión, pérdida exponencial o de desviación para la clasificación?)

Gracias por sus respuestas,
Mejor,
Alicia

Comentario más útil

@tqchen ¿Puede darnos más detalles sobre lo que realmente está haciendo gblinear? La referencia a un artículo/fórmula sería genial.

En particular, me gustaría poder calcular las predicciones para 1 ronda de entrenamiento ( nrounds=1 ). Aquí hay un conjunto de datos de muestra:

> train
        x      y
 1: 13.36  37.54
 2:  5.35  14.54
 3:  0.26  -0.72
 4: 84.16 261.19
 5: 24.67  76.90
 6: 22.26  67.15
 7: 18.02  53.89
 8: 14.29  43.48
 9: 61.66 182.60
10: 57.26 179.44

Después entreno un modelo de regresión lineal y un modelo xgboost con parámetros { booster="gblinear" , objective="reg:linear" , eta=1 , subsample=1 , lambda=0 , lambda_bias=0 , alpha=0 } obtengo los siguientes resultados

> test
        x      y Pred.linreg Pred.xgb
 1: 47.75 153.23      146.25    155.7
 2: 12.13  40.05       35.78    107.9
 3: 89.05 274.37      274.34    211.1
 4: 38.87 116.51      118.71    143.8
 5: 27.30  80.61       82.83    128.2
 6: 87.66 267.95      270.02    209.3
 7: 39.33 114.97      120.14    144.4
 8: 64.32 191.73      197.64    177.9
 9: 13.18  48.28       39.04    109.3
10:  8.89  23.30       25.73    103.5

¿Qué está pasando realmente aquí? ¡Gracias!

Todos 12 comentarios

Desea utilizar varias rondas en gblinear para recuperar una sola regresión de lazo.

Esto se debió a que tiene menos sentido apilar modelos lineales (que nuevamente era un modelo lineal). Por lo tanto, num_round pasos de actualización se usaron conjuntamente para resolver un solo problema de lazo.

eval_metric no tiene nada que ver con la función objetivo. La función de pérdida está documentada en los parámetros.md reg:logistic para regresión logística, reg:linear para squared-loss y muti:softmax para clasificación multiclase softmax

Hola,

¡Gracias por sus respuestas! He entendido cómo recuperas un solo Lasso después de un gran número de rondas y no 1. Entonces también responde a mi segunda pregunta, es decir, estás usando la pérdida al cuadrado para la regresión. Y supongo que estás usando desviación binomial/multinomial para la clasificación. _¿Es eso correcto?_

No estaba seguro, porque para la regresión también podría usar la pérdida L1 o la pérdida de Huber, por ejemplo (ejemplos comunes dados en la sección 10.10.2 de los elementos del aprendizaje estadístico).

Gracias por tu ayuda,
Alicia

Hola,

Quiero aplicar xgboost en un modelo de regresión, lo que significa que mi variable dependiente es de tipo numérico continuo. Sin embargo, estoy confundido, ¿qué debo proporcionar en el argumento de "etiqueta". Por favor, ayuda aquí.

Saludos,
Vivek

en la etiqueta de caso de regresión es su objetivo de regresión

El lunes 25 de mayo de 2015 a las 8:43 a. m., Vivek Agarwal [email protected]
escribió:

Hola,

Quiero aplicar xgboost en un modelo de regresión, significa mi variable dependiente
es un tipo de numérico continuo. Sin embargo, estoy confundido, ¿qué debo proporcionar?
en el argumento "etiqueta". Por favor, ayuda aquí.

Saludos,
Vivek


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

Atentamente,

Tianqi-chen
Informática e Ingeniería, Universidad de Washington

Ver documentación del objetivo en
https://github.com/dmlc/xgboost/blob/master/doc/parameter.md
Se pueden especificar diferentes funciones objetivas, y puede encontrar el significado de
parámetros actuales

Tianqi

El lunes 25 de mayo de 2015 a la 1:47 a. m., AliceS [email protected] escribió:

Hola,

¡Gracias por sus respuestas! He entendido cómo se recupera un solo
Lazo después de un gran num_rounds y no 1.

En cuanto a las funciones de pérdida, todavía no está claro cuáles son, al menos
menos para la regresión. Podrías usar la pérdida al cuadrado, la pérdida L1 o la
Pérdida de Huber, por ejemplo (ejemplos comunes dados en la sección 10.10.2 del
elementos del aprendizaje estadístico). Para la clasificación supongo que usas
Desviación binomial/multinomial (también podría ser la pérdida exponencial en la que
caso de que recupere la potenciación clásica).

Gracias por tu ayuda,
Alicia


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

Atentamente,

Tianqi-chen
Informática e Ingeniería, Universidad de Washington

Gracias Tianqi,
Alicia

La variable dependiente tiene valores numéricos. A continuación se muestran las primeras 6 observaciones del objetivo de regresión:

head(datos_finales[1:n.tren,'Dependiente'])
[1] 4996 3784 1504 4994 3687 3084

Ahora, si pongo esta variable dependiente en etiquetas y ejecuto el siguiente código:

param <- list("objetivo" = "reg:lineal",
"núm_clase" = 9,
"n hilo" = 8,
"eta" = 0.08,
"submuestra"=0.8,
"gamma" = 1,
"min_child_weight" = 2,
"profundidad_máxima"= 12,
"muestra_por_árbol" = 1
)
model_xg <- xgboost(param=param,data = final_data[1:n.train,],label=final_data[1:n.train,'Dependent'],nrounds=250)

Entonces recibo el siguiente error:

Error en xgb.get.DMatrix (datos, etiqueta): xgboost: entrada de datos no válida
Además: Mensaje de advertencia:
En xgb.get.DMatrix(data, label) : xgboost: se ignorará la etiqueta.

Por favor, hágame saber qué estoy haciendo mal.

@vivekag Por favor, abra un nuevo número sobre esto. Sería genial si pudiera proporcionar un fragmento de código (posiblemente con algunos datos ficticios) que podamos ejecutar para reproducir el problema.

Supongo que fue porque el tipo de datos de final_data no era lo que xgboost esperaba (xgboost esperaba una matriz o una matriz dispersa) @ hetong007

@tqchen ¿Puede darnos más detalles sobre lo que realmente está haciendo gblinear? La referencia a un artículo/fórmula sería genial.

En particular, me gustaría poder calcular las predicciones para 1 ronda de entrenamiento ( nrounds=1 ). Aquí hay un conjunto de datos de muestra:

> train
        x      y
 1: 13.36  37.54
 2:  5.35  14.54
 3:  0.26  -0.72
 4: 84.16 261.19
 5: 24.67  76.90
 6: 22.26  67.15
 7: 18.02  53.89
 8: 14.29  43.48
 9: 61.66 182.60
10: 57.26 179.44

Después entreno un modelo de regresión lineal y un modelo xgboost con parámetros { booster="gblinear" , objective="reg:linear" , eta=1 , subsample=1 , lambda=0 , lambda_bias=0 , alpha=0 } obtengo los siguientes resultados

> test
        x      y Pred.linreg Pred.xgb
 1: 47.75 153.23      146.25    155.7
 2: 12.13  40.05       35.78    107.9
 3: 89.05 274.37      274.34    211.1
 4: 38.87 116.51      118.71    143.8
 5: 27.30  80.61       82.83    128.2
 6: 87.66 267.95      270.02    209.3
 7: 39.33 114.97      120.14    144.4
 8: 64.32 191.73      197.64    177.9
 9: 13.18  48.28       39.04    109.3
10:  8.89  23.30       25.73    103.5

¿Qué está pasando realmente aquí? ¡Gracias!

¿Cuál es la diferencia entre la regresión xg y otra regresión general?
Sé que xgboost tiene una versión de árbol que es diferente de otro algoritmo de árbol.
Supongo que hay que hackear la fuente.

¿Podemos extraer los pesos finales de todas las características de entrada cuando usamos gblinear en xgboost? Me resulta difícil extraer los pesos.

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