xgboost: lebih penting bagi sampel terbaru


22

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

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.


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)

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


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.