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?


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.


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.


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


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.