¿Cómo predecir probabilidades en xgboost?

16

La siguiente función de predicción también proporciona valores -ve, por lo que no puede haber probabilidades.

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)

Busqué en Google e intenté pred_s <- predict(bst, x_mat_s2,type="response") pero no funcionó.

Pregunta

¿Cómo predecir probabilidades en su lugar?

GeorgeOfTheRF
fuente
¿No genera probabilidades por defecto con la configuración que usó? Quiero decir: ¿has examinado pred_s y estás seguro de que no son probabilidades?
kpb
No, tiene valores negativos. La probabilidad debería variar entre 0 y 1.
GeorgeOfTheRF
No veo ningún problema obvio. (Aunque estoy más familiarizado con el envoltorio de python). ¿Has intentado agregar outputmargin=Fa la predictfunción? Si de alguna manera outputmarginse establece en T, devolverá el valor antes de la transformación logística.
inversión
1
Para Python, puede copiar la predict_probaimplementación desde la sklearnAPI: github.com/dmlc/xgboost/blob/master/python-package/xgboost/…
Anton Tarasenko

Respuestas:

14

Sé que llego un poco tarde, pero para obtener probabilidades xgboosttuyas debes especificar multi:softmaxobjetivos como este:

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

De la ?xgb.train:

multi: softprob igual que softmax, pero genera un vector de ndata * nclass, que puede reformarse aún más a ndata, matriz de nclass. El resultado contiene probabilidades predichas de cada punto de datos que pertenece a cada clase.

cyberj0g
fuente
2
Gracias. ¿En qué se diferencia esta función de pérdida del binario: logística para la clasificación binaria?
GeorgeOfTheRF
3
Es solo una generalización de la función logística para el caso de múltiples clases, no debería haber una diferencia significativa.
cyberj0g
14

Solo use en predict_probalugar de predict. Puedes dejar el objetivo como binary:logistic.

ihadanny
fuente
3
Si esto fuera Python y no R, entonces esta respuesta podría ser sensata. Lenguaje equivocado.
B_Miner
1
¡Uy! gracias @B_Miner. No estoy borrando esta respuesta, ya que podría ser útil para otros que cometerán el mismo error y piensan que estamos hablando de Python ..
ihadanny
Para mí esto no funciona el truco datascience.stackexchange.com/questions/14527/…
Georg Heiler
44
xgboost no tiene una función predict_proba
Ashoka Lella
1
El clasificador XGBoost tiene una opción predict_proba xgboost.readthedocs.io/en/latest/python/python_api.html
Paul Bendevis
0

después de la predicción

pred_s <- predict(bst, x_mat_s2)

puedes obtener la probabilidad por

pred_s$data

Si esta es una clasificación binaria, entonces pred_s$dataincluye prob.0, prob.1, respuesta.

Para que pueda obtener el problema 1 por

pred_s$data$prob.1
Dera
fuente