xgboost: przywiązuj większą wagę do ostatnich próbek

22

Czy istnieje sposób na nadanie większego znaczenia punktom, które są nowsze podczas analizy danych za pomocą xgboost?

kilodżule
źródło

Odpowiedzi:

9

Możesz spróbować zbudować wiele modeli xgboost, przy czym niektóre z nich ograniczają się do nowszych danych, a następnie zważyć wyniki razem. Innym pomysłem byłoby stworzenie zindywidualizowanej miary oceny, która będzie silniej karać ostatnie punkty, co dałoby im większe znaczenie.

TBSRounder
źródło
4
OP może po prostu nadać większą wagę próbkom nowszym obserwacjom. Większość pakietów na to pozwala, podobnie jak xgboost.
Ricardo Cruz,
30

Po prostu dodaj wagi na podstawie etykiet czasu do xgb.DMatrix. Poniższy przykład jest napisany w R, ale ta sama zasada dotyczy xgboost w Pythonie lub Julii.

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
źródło
Dzięki za odpowiedź - naprawdę warto zobaczyć zakodowany przykład. Jak wielkość współczynników funkcji ważenia wpływa na model? Przeglądałem dokumenty xgboost, ale nie mogę znaleźć informacji na temat znaczenia tych wartości liczbowych.
kilodżule,
nie znałem tej sztuczki. w funkcji xgboost znajduje się mały smakołyk pod funkcją setinfo(), choć nie jest on zbyt opisowy
TBSRounder
12

W Pythonie masz fajne opakowanie do nauki scikit, dzięki czemu możesz pisać tak:

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

Więcej informacji można uzyskać z tego: http://xgboost.readthedocs.io/en/latest/python/python_api.html#xgboost.XGBClassifier.fit

Lucidyan
źródło
Wish for R caret też to ma wbudowane ..
pauljeba
1
powinien znajdować się xgb.XGBClassifier()w drugim wierszu kodu, ale stackexchange nie pozwala na edycję mniej niż sześciu znaków ...
Andre Holzner