xgboost: Letzten Stichproben mehr Bedeutung beimessen

22

Gibt es eine Möglichkeit, neueren Punkten bei der Datenanalyse mit xgboost mehr Bedeutung zu verleihen?

Kilojoule
quelle

Antworten:

9

Sie könnten versuchen, mehrere xgboost-Modelle zu erstellen, von denen einige auf neuere Daten beschränkt sind, und diese Ergebnisse dann zusammenwägen. Eine andere Idee wäre, eine angepasste Bewertungsmetrik zu erstellen, die die jüngsten Punkte stärker benachteiligt und ihnen mehr Bedeutung verleiht.

TBSRounder
quelle
4
Das OP kann einfach neueren Beobachtungen höhere Probengewichte verleihen. Die meisten Pakete erlauben dies, ebenso wie xgboost.
Ricardo Cruz
30

Fügen Sie Ihrer xgb.DMatrix einfach Gewichte basierend auf Ihren Zeitangaben hinzu. Das folgende Beispiel ist in R geschrieben, aber das gleiche Prinzip gilt für xgboost unter Python oder 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
quelle
Vielen Dank für Ihre Antwort - es ist sehr hilfreich, ein codiertes Beispiel zu sehen. Wie wirkt sich die Größe der Gewichtungsfunktionskoeffizienten auf das Modell aus? Ich habe die xgboost-Dokumente durchgesehen, kann jedoch keine Informationen zur Bedeutung dieser numerischen Werte finden.
Kilojoule
kannte diesen Trick nicht, nett. Es gibt einen kleinen Leckerbissen im xgboost-Dokument unter der Funktion setinfo(), obwohl es nicht sehr beschreibend ist
TBSRounder
12

In Python haben Sie einen netten Wrapper zum Lernen von Scikits, so dass Sie einfach so schreiben können:

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

Weitere Informationen erhalten Sie hier: http://xgboost.readthedocs.io/en/latest/python/python_api.html#xgboost.XGBClassifier.fit

lucidyan
quelle
Wünschte,
1
das sollte xgb.XGBClassifier()in der zweiten Codezeile sein, aber Stackexchange erlaubt keine Änderungen von weniger als sechs Zeichen ...
Andre Holzner