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?

kilojoules
la source

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.

TBSRounder
la source
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)
wacax
la source
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

lucidyan
la source
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