Jak przewidzieć prawdopodobieństwo w xgboost?

16

Poniższa funkcja przewidywania podaje również wartości -ve, więc nie może to być prawdopodobieństwo.

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)

I google i próbowałem, pred_s <- predict(bst, x_mat_s2,type="response") ale to nie działało.

Pytanie

Jak zamiast tego przewidzieć prawdopodobieństwa?

GeorgeOfTheRF
źródło
Czy domyślnie nie wyprowadza prawdopodobieństwa przy użytych ustawieniach? Mam na myśli: czy sprawdziłeś pred_s i jesteś pewien, że to nie są prawdopodobieństwa?
kpb
Nie ma wartości ujemnych. Prawdopodobieństwo powinno wynosić od 0 do 1.
GeorgeOfTheRF
Nie widzę żadnych oczywistych problemów. (Chociaż jestem bardziej zaznajomiony z otoki Pythona). Czy próbowałeś dodać outputmargin=Fdo predictfunkcji? Jeśli w jakiś sposób outputmarginjest ustawiony na T, zwróci wartość przed transformacją logistyczną.
inwersja
1
W przypadku Pythona możesz skopiować predict_probaimplementację z sklearninterfejsu API: github.com/dmlc/xgboost/blob/master/python-package/xgboost/…
Anton Tarasenko

Odpowiedzi:

14

Wiedz, że jestem trochę spóźniony, ale aby uzyskać od xgboostciebie prawdopodobieństwa , powinieneś określić multi:softmaxcel w następujący sposób:

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

Z ?xgb.train:

multi: softprob taki sam jak softmax, ale wypisuje wektor ndata * nclass, który można dalej przekształcić w macierz ndata, nclass. Wynik zawiera przewidywane prawdopodobieństwa każdego punktu danych należącego do każdej klasy.

cyberj0g
źródło
2
Dzięki. Czym różni się ta funkcja straty od binarnej: logistyka do klasyfikacji binarnej?
GeorgeOfTheRF
3
To tylko uogólnienie funkcji logistycznej w przypadku wielu klas, nie powinno to stanowić znaczącej różnicy.
cyberj0g,
14

Po prostu użyj predict_probazamiast predict. Możesz zostawić cel jako binary:logistic.

ihadanny
źródło
3
Gdyby to był Python, a nie R, to odpowiedź może być sensowna. Zły język
B_Miner
1
ups! dzięki @B_Miner. Nie usuwam tej odpowiedzi, ponieważ może być pomocna dla innych osób, które popełniłyby ten sam błąd i myślą, że mówimy o python ..
ihadanny
Dla mnie to nie robi sztuczki datascience.stackexchange.com/questions/14527/...
Georg Heiler
4
xgboost nie ma funkcji przewidywanej_proby
Ashoka Lella
0

po prognozie

pred_s <- predict(bst, x_mat_s2)

możesz uzyskać prawdopodobieństwo przez

pred_s$data

Jeśli jest to klasyfikacja binarna, wówczas pred_s$dataobejmuje prob.0, prob.1, odpowiedź.

Możesz dostać prob.1 przez

pred_s$data$prob.1
Dera
źródło