xgboost: donner plus d'importance aux échantillons récents


22

Existe-t-il un moyen d'ajouter plus d'importance aux points les plus récents lors de l'analyse des données avec xgboost?

Réponses:


9

Vous pouvez essayer de créer plusieurs modèles xgboost, certains d'entre eux étant limités à des données plus récentes, puis pondérer ces résultats ensemble. Une autre idée serait de créer une mesure d'évaluation personnalisée qui pénalise davantage les points récents, ce qui leur donnerait plus d'importance.


4
L'OP peut simplement donner des poids d'échantillon plus élevés aux observations plus récentes. La plupart des packages le permettent, tout comme xgboost.
Ricardo Cruz

30

Ajoutez simplement des poids basés sur vos étiquettes de temps à votre xgb.DMatrix. L'exemple suivant est écrit en R mais le même principe s'applique à xgboost sur Python ou 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)

Merci pour votre réponse - c'est vraiment utile de voir un exemple codé. Comment l'ampleur des coefficients de la fonction de pondération affecte-t-elle le modèle? J'ai parcouru les documents xgboost, mais je ne trouve pas d'informations sur la signification de ces valeurs numériques.
kilojoules du

ne connaissait pas cette astuce, chouette. il y a un petit morceau dans le document xgboost sous la fonction setinfo(), bien que ce ne soit pas très descriptif
TBSRounder

12

Sur Python, vous avez un joli wrapper scikit-learn, vous pouvez donc écrire comme ceci:

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

Plus d'informations que vous pouvez recevoir de ceci: http://xgboost.readthedocs.io/en/latest/python/python_api.html#xgboost.XGBClassifier.fit


Wish for R caret a aussi intégré cela ..
pauljeba

1
cela devrait être xgb.XGBClassifier()dans la deuxième ligne de code mais stackexchange ne permet pas les modifications de moins de six caractères ...
Andre Holzner
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.