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.