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.