xgboost: dai maggiore importanza ai campioni recenti


22

C'è un modo per aggiungere più importanza ai punti più recenti quando si analizzano i dati con xgboost?

Risposte:


9

Potresti provare a costruire più modelli xgboost, alcuni dei quali sono limitati a dati più recenti, quindi ponderando questi risultati insieme. Un'altra idea sarebbe quella di fare una metrica di valutazione personalizzata che penalizzi maggiormente i punti recenti e che darebbe loro maggiore importanza.


4
L'OP può semplicemente fornire pesi campione più elevati a osservazioni più recenti. La maggior parte dei pacchetti lo consente, così come xgboost.
Ricardo Cruz,

30

Aggiungi pesi in base alle etichette del tempo sul tuo xgb.DMatrix. Il seguente esempio è scritto in R ma lo stesso principio si applica a xgboost su 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)

Grazie per la risposta: è davvero utile vedere un esempio in codice. In che modo l'entità dei coefficienti della funzione di ponderazione influisce sul modello? Ho esaminato i documenti di xgboost, ma non riesco a trovare informazioni sul significato di questi valori numerici.
kilojoules,

non conoscevo questo trucco, carino. c'è un po 'di curiosità nel documento xgboost sotto la funzione setinfo(), anche se non è molto descrittivo
TBSRounder

12

Su Python hai un bel wrapper scikit-learn, quindi puoi scrivere così:

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

Maggiori informazioni che puoi ricevere da questo: http://xgboost.readthedocs.io/en/latest/python/python_api.html#xgboost.XGBClassifier.fit


Anche Wish for R caret ha incorporato questo ..
pauljeba,

1
che dovrebbe essere xgb.XGBClassifier()nella seconda riga di codice ma stackexchange non consente modifiche di meno di sei caratteri ...
Andre Holzner,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.