Comment prédire les probabilités dans xgboost?


16

La fonction de prédiction ci-dessous donne également des valeurs -ve, il ne peut donc pas s'agir de probabilités.

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)

J'ai google et essayé pred_s <- predict(bst, x_mat_s2,type="response") mais cela n'a pas fonctionné.

Question

Comment prédire les probabilités à la place?


Ne génère-t-il pas les probabilités par défaut avec les paramètres que vous avez utilisés? Je veux dire: avez-vous examiné les pred_s et vous êtes certain que ce ne sont pas des probabilités?
kpb

Pas de valeurs négatives. La probabilité devrait varier entre 0 et 1.
GeorgeOfTheRF

Je ne vois aucun problème évident. (Bien que je sois plus familier avec le wrapper python). Avez-vous essayé d'ajouter outputmargin=Fà la predictfonction? Si la valeur outputmarginest définie sur T, elle renverra la valeur avant la transformation logistique.
inversion du

1
Pour Python, vous pouvez copier l' predict_probaimplémentation à partir de l' sklearnAPI: github.com/dmlc/xgboost/blob/master/python-package/xgboost/…
Anton Tarasenko

Réponses:


14

Je sais que je suis un peu en retard, mais pour obtenir des probabilités de xgboostvotre part, spécifiez un multi:softmaxobjectif comme celui-ci:

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

Du ?xgb.train:

multi: softprob identique à softmax, mais génère un vecteur de ndata * nclass, qui peut être remodelé en ndata, nclass matrix. Le résultat contient les probabilités prédites de chaque point de données appartenant à chaque classe.


2
Merci. En quoi cette fonction de perte est-elle différente du binaire: logistique pour la classification binaire?
GeorgeOfTheRF du

3
C'est juste une généralisation de la fonction logistique pour le cas multi-classe, ne devrait pas faire de différence significative.
cyberj0g

14

Utilisez simplement predict_probaau lieu de predict. Vous pouvez laisser l'objectif comme binary:logistic.


3
S'il s'agissait de Python et non de R, cette réponse pourrait être judicieuse. Mauvaise langue.
B_Miner du

1
Oups! merci @B_Miner. Je ne supprime pas cette réponse car cela pourrait être utile pour d'autres qui commettront la même erreur et penseront que nous parlons de python ..
ihadanny

Pour moi, cela ne fait pas l'affaire datascience.stackexchange.com/questions/14527/…
Georg Heiler

4
xgboost n'a pas de fonction predict_proba
Ashoka Lella


0

après la prédiction

pred_s <- predict(bst, x_mat_s2)

vous pouvez obtenir la probabilité en

pred_s$data

S'il s'agit d'une classification binaire, alors pred_s$datainclut prob.0, prob.1, response.

Vous pouvez donc obtenir prob.1 en

pred_s$data$prob.1
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.