¿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?


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


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.


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


44
xgboost no tiene una función predict_proba
Ashoka Lella


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.