xgboost: da más importancia a las muestras recientes


22

¿Hay alguna manera de agregar más importancia a los puntos que son más recientes al analizar datos con xgboost?

Respuestas:


9

Puede intentar construir múltiples modelos xgboost, con algunos de ellos limitados a datos más recientes, y luego ponderando esos resultados juntos. Otra idea sería hacer una métrica de evaluación personalizada que penalice los puntos recientes con mayor intensidad, lo que les daría más importancia.


44
El OP simplemente puede dar mayores pesos de muestra a observaciones más recientes. La mayoría de los paquetes lo permiten, al igual que xgboost.
Ricardo Cruz

30

Simplemente agregue pesos basados ​​en sus etiquetas de tiempo a su xgb.DMatrix. El siguiente ejemplo está escrito en R pero el mismo principio se aplica a xgboost en Python o Julia.

data <- data.frame(feature = rep(5, 5),
                   year = seq(2011, 2015), 
                   target = c(1, 0, 1, 0, 0))
weightsData <- 1 + (data$year - max(data$year)) * 5 * 0.01

#Now create the xgboost matrix with your data and weights
xgbMatrix <- xgb.DMatrix(as.matrix(data$feature), 
                         label = data$target, 
                         weight = weightsData)

Gracias por su respuesta, es realmente útil ver un ejemplo codificado. ¿Cómo afecta la magnitud de los coeficientes de la función de ponderación al modelo? Revisé los documentos de xgboost, pero no puedo encontrar información sobre el significado de estos valores numéricos.
kilojulios

No conocía este truco, bien. hay un pequeño dato en el documento xgboost debajo de la función setinfo(), aunque no es muy descriptivo
TBSRounder

12

En Python tienes un buen contenedor de scikit-learn, por lo que puedes escribir así:

import xgboost as xgb
exgb_classifier = xgb.XGBClassifier()
exgb_classifier.fit(X, y, sample_weight=sample_weights_data)

Más información puede recibir de esto: http://xgboost.readthedocs.io/en/latest/python/python_api.html#xgboost.XGBClassifier.fit


Desearía que R caret también tuviera esto incorporado ..
pauljeba 03 de

1
eso debería estar xgb.XGBClassifier()en la segunda línea de código, pero stackexchange no permite ediciones de menos de seis caracteres ...
Andre Holzner
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.