Come prevedere le probabilità in xgboost?


16

La seguente funzione di previsione fornisce anche -ve valori, quindi non può essere una probabilità.

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)

Ho cercato su google pred_s <- predict(bst, x_mat_s2,type="response") ma non ha funzionato.

Domanda

Come prevedere invece le probabilità?


Non genera probabilità per impostazione predefinita con le impostazioni utilizzate? Voglio dire: hai esaminato i pred_s e sei certo che quelle non sono probabilità?
kpb,

No, ha valori negativi. La probabilità dovrebbe variare tra 0 e 1.
GeorgeOfTheRF

Non vedo problemi evidenti. (Anche se ho più familiarità con il wrapper Python). Hai provato ad aggiungere outputmargin=Falla predictfunzione? Se in qualche modo outputmarginè impostato su T, restituirà il valore prima della trasformazione logistica.
inversione

1
Per Python, puoi copiare l' predict_probaimplementazione sklearndall'API: github.com/dmlc/xgboost/blob/master/python-package/xgboost/…
Anton Tarasenko,

Risposte:


14

Sappi che sono un po 'in ritardo, ma per ottenere le tue probabilità xgboostdovresti specificare multi:softmaxobiettivi come questo:

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

Dal ?xgb.train:

multi: softprob come softmax, ma genera un vettore di ndata * nclass, che può essere ulteriormente rimodellato in ndata, matrice nclass. Il risultato contiene le probabilità previste di ciascun punto dati appartenente a ciascuna classe.


2
Grazie. In che modo questa funzione di perdita è diversa da quella binaria: logistica per la classificazione binaria?
GeorgeOfTheRF,

3
È solo una generalizzazione della funzione logistica per i casi multi-classe, non dovrebbe fare differenza significativa.
cyberj0g

14

Basta usare predict_probainvece di predict. Puoi lasciare l'obiettivo come binary:logistic.


3
Se questo fosse Python e non R, questa risposta potrebbe essere sensata. Linguaggio sbagliato.
B_Miner

1
oops! grazie @B_Miner. Non sto eliminando questa risposta in quanto potrebbe essere utile per gli altri che faranno lo stesso errore e pensano che stiamo parlando di pitone ..
ihadanny


4
xgboost non ha una funzione predict_proba
Ashoka Lella,


0

dopo la previsione

pred_s <- predict(bst, x_mat_s2)

puoi ottenere la probabilità di

pred_s$data

Se questa è una classificazione binaria, allora pred_s$datainclude prob.0, prob.1, risposta.

Quindi puoi ottenere prob.1 da

pred_s$data$prob.1
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.