xgboost: Letzten Stichproben mehr Bedeutung beimessen


22

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

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.


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)

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



1
das sollte xgb.XGBClassifier()in der zweiten Codezeile sein, aber Stackexchange erlaubt keine Änderungen von weniger als sechs Zeichen ...
Andre Holzner
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.