Como prever probabilidades no xgboost?

16

A função de previsão abaixo também fornece valores -ve, portanto não podem ser 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)

Eu google e tentei, pred_s <- predict(bst, x_mat_s2,type="response") mas não funcionou.

Questão

Como prever probabilidades?

GeorgeOfTheRF
fonte
Não gera probabilidades por padrão com as configurações usadas? Quero dizer: você examinou pred_s e tem certeza de que não são probabilidades?
Kpb
Não é ter valores negativos. A probabilidade deve variar entre 0 e 1.
GeorgeOfTheRF
Não vejo problemas óbvios. (Embora eu esteja mais familiarizado com o wrapper python). Você já tentou adicionar outputmargin=Fà predictfunção? Se, de alguma forma, outputmarginestiver definido como T, ele retornará o valor antes da transformação logística.
inversion
11
Para Python, você pode copiar a predict_probaimplementação da sklearnAPI: github.com/dmlc/xgboost/blob/master/python-package/xgboost/…
Anton Tarasenko

Respostas:

14

Saiba que estou um pouco atrasado, mas para obter probabilidades, xgboostvocê deve especificar multi:softmaxobjetivos como este:

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

De ?xgb.train:

multi: softprob igual a softmax, mas gera um vetor de ndata * nclass, que pode ser remodelado ainda mais para ndata, nclass matrix. O resultado contém probabilidades previstas de cada ponto de dados pertencente a cada classe.

cyberj0g
fonte
2
Obrigado. Como essa função de perda é diferente de binária: logística para classificação binária?
GeorgeOfTheRF
3
É apenas uma generalização da função logística para o caso de várias classes, não deve haver diferença significativa.
cyberj0g
14

Basta usar em predict_probavez de predict. Você pode deixar o objetivo como binary:logistic.

ihadanny
fonte
3
Se fosse Python e não R, então essa resposta pode ser sensata. Linguagem errada.
B_Miner 15/08/16
11
oops! obrigado @B_Miner. Não estou excluindo esta resposta, uma vez que pode ser útil para outras pessoas que vão fazer o mesmo erro e pensar que estamos falando de python ..
ihadanny
Para mim, isso não faz o truque datascience.stackexchange.com/questions/14527/…
Georg Heiler
4
não xgboost não tem uma função predict_proba
Ashoka Lella
11
O XGBoost Classifier possui uma opção predict_proba xgboost.readthedocs.io/en/latest/python/python_api.html
Paul Bendevis
0

depois da previsão

pred_s <- predict(bst, x_mat_s2)

você pode obter a probabilidade de

pred_s$data

Se esta é uma classificação binária, pred_s$datainclui prob.0, prob.1, resposta.

Para que você possa obter prob.1,

pred_s$data$prob.1
Dera
fonte