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?


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.


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.


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


4
xgboost tidak memiliki fungsi predict_proba
Ashoka Lella


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
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.