Bagaimana cara memprediksi probabilitas di xgboost?

16

Fungsi prediksi di bawah ini adalah memberikan nilai -ve juga sehingga tidak bisa menjadi probabilitas.

param <- list(max.depth = 5, eta = 0.01,  objective="binary:logistic",subsample=0.9)
bst <- xgboost(param, data = x_mat, label = y_mat,nround = 3000)

pred_s <- predict(bst, x_mat_s2)

Saya google & mencoba pred_s <- predict(bst, x_mat_s2,type="response") tetapi tidak berhasil.

Pertanyaan

Bagaimana cara memprediksi probabilitas?

GeorgeOfTheRF
sumber
Bukankah itu menghasilkan probabilitas secara default dengan pengaturan yang Anda gunakan? Maksud saya: sudahkah Anda memeriksa pred_s dan Anda yakin itu bukan probabilitas?
kpb
Tidak ada yang memiliki nilai negatif. Probabilitas harus bervariasi antara 0 hingga 1.
GeorgeOfTheRF
Saya tidak melihat masalah yang jelas. (Meskipun, saya lebih akrab dengan pembungkus python). Apakah Anda mencoba menambahkan outputmargin=Fke predictfungsi? Jika entah bagaimana outputmargindiatur ke T, itu akan mengembalikan nilai sebelum transformasi logistik.
inversi
1
Untuk Python, Anda dapat menyalin predict_probaimplementasi dari sklearnAPI: github.com/dmlc/xgboost/blob/master/python-package/xgboost/…
Anton Tarasenko

Jawaban:

14

Tahu saya agak terlambat, tetapi untuk mendapatkan probabilitas dari xgboostAnda harus menentukan multi:softmaxtujuan seperti ini:

xgboost(param, data = x_mat, label = y_mat,nround = 3000, objective='multi:softprob')

Dari ?xgb.train:

multi: softprob sama dengan softmax, tetapi menghasilkan vektor ndata * nclass, yang selanjutnya dapat dibentuk kembali menjadi ndata, matriks nclass. Hasilnya berisi probabilitas yang diprediksi dari setiap titik data milik masing-masing kelas.

cyberj0g
sumber
2
Terima kasih. Bagaimana fungsi kerugian ini berbeda dari biner: logistik untuk klasifikasi biner?
GeorgeOfTheRF
3
Itu hanya generalisasi fungsi logistik untuk kasus multi-kelas, seharusnya tidak ada perbedaan yang signifikan.
cyberj0g
14

Cukup gunakan predict_probasaja predict. Anda dapat meninggalkan tujuannya sebagai binary:logistic.

ihadanny
sumber
3
Jika ini Python dan bukan R, maka jawaban ini mungkin masuk akal. Bahasa yang salah.
B_Miner
1
Ups! terima kasih @B_Miner. Saya tidak menghapus jawaban ini karena mungkin bermanfaat bagi orang lain yang akan membuat kesalahan yang sama dan berpikir kita sedang berbicara tentang python ..
ihadanny
Bagi saya ini tidak melakukan trik datasetcience.stackexchange.com/questions/14527/…
Georg Heiler
4
xgboost tidak memiliki fungsi predict_proba
Ashoka Lella
1
XGBoost Classifier memang memiliki opsi predict_proba xgboost.readthedocs.io/en/latest/python/python_api.html
Paul Bendevis
0

setelah prediksi

pred_s <- predict(bst, x_mat_s2)

Anda bisa mendapatkan probabilitas dengan

pred_s$data

Jika ini adalah klasifikasi biner maka pred_s$datatermasuk prob.0, prob.1, respons.

Jadi, Anda bisa mendapatkan prob.1 dengan

pred_s$data$prob.1
Dera
sumber