xgboost: lebih penting bagi sampel terbaru

22

Apakah ada cara untuk menambahkan lebih penting ke poin yang lebih baru saat menganalisis data dengan xgboost?

kilojoule
sumber

Jawaban:

9

Anda dapat mencoba membuat beberapa model xgboost, dengan beberapa di antaranya terbatas pada data yang lebih baru, kemudian menimbang hasilnya bersama-sama. Gagasan lain adalah membuat metrik evaluasi yang disesuaikan yang menghukum poin baru lebih berat yang akan memberi mereka lebih penting.

TBSRounder
sumber
4
OP hanya dapat memberikan bobot sampel yang lebih tinggi untuk pengamatan yang lebih baru. Sebagian besar paket mengizinkan ini, seperti halnya xgboost.
Ricardo Cruz
30

Cukup tambahkan bobot berdasarkan label waktu Anda ke xgb.DMatrix Anda. Contoh berikut ditulis dalam R tetapi prinsip yang sama berlaku untuk xgboost di Python atau 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
sumber
Terima kasih atas jawaban Anda - sangat membantu melihat contoh kode. Bagaimana besarnya koefisien fungsi bobot mempengaruhi model? Saya melihat-lihat dokumen xgboost, tetapi saya tidak dapat menemukan informasi tentang pentingnya nilai-nilai numerik ini.
kilojoule
tidak tahu trik ini, bagus. ada sedikit berita gembira di xgboost doc di bawah fungsi setinfo(), meskipun tidak terlalu deskriptif
TBSRounder
12

Di Python Anda memiliki pembungkus scikit-learn yang bagus, sehingga Anda bisa menulis seperti ini:

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

Informasi lebih lanjut dapat Anda terima dari ini: http://xgboost.readthedocs.io/en/latest/python/python_api.html#xgboost.XGBClassifier.fit

Lucidyan
sumber
Berharap untuk R caret memiliki ini dibangun juga ..
pauljeba
1
yang seharusnya ada xgb.XGBClassifier()di baris kedua kode tetapi stackexchange tidak mengizinkan pengeditan kurang dari enam karakter ...
Andre Holzner