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?


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.


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.


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


4
não xgboost não tem uma função predict_proba
Ashoka Lella


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.