Wie kann man Wahrscheinlichkeiten in xgboost vorhersagen?

16

Die folgende Vorhersagefunktion gibt ebenfalls -ve-Werte an, sodass es sich nicht um Wahrscheinlichkeiten handeln kann.

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)

Ich google & versuchte, pred_s <- predict(bst, x_mat_s2,type="response") aber es hat nicht funktioniert.

Frage

Wie kann man stattdessen Wahrscheinlichkeiten vorhersagen?

GeorgeOfTheRF
quelle
Gibt es nicht standardmäßig Wahrscheinlichkeiten mit den von Ihnen verwendeten Einstellungen aus? Ich meine: hast du pred_s untersucht und bist dir sicher, dass das keine Wahrscheinlichkeiten sind?
kpb
Nein, es hat negative Werte. Die Wahrscheinlichkeit sollte zwischen 0 und 1 variieren.
GeorgeOfTheRF
Ich sehe keine offensichtlichen Probleme. (Obwohl ich mit dem Python-Wrapper besser vertraut bin). Haben Sie versucht outputmargin=F, die predictFunktion zu erweitern? Wenn irgendwie der Wert auf outputmargingesetzt ist T, wird der Wert vor der logistischen Umwandlung zurückgegeben.
Inversion
1
Für Python können Sie die predict_probaImplementierung von der sklearnAPI kopieren : github.com/dmlc/xgboost/blob/master/python-package/xgboost/…
Anton Tarasenko

Antworten:

14

Ich bin zwar etwas spät dran, aber um die Wahrscheinlichkeiten von xgboostdir zu bekommen , solltest du folgendes multi:softmaxZiel angeben :

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

Aus dem ?xgb.train:

multi: softprob Entspricht softmax, gibt jedoch einen Vektor der Klasse ndata * n aus, der weiter in die Matrix ndata, nclass umgewandelt werden kann. Das Ergebnis enthält vorhergesagte Wahrscheinlichkeiten für jeden Datenpunkt, der zu jeder Klasse gehört.

cyberj0g
quelle
2
Vielen Dank. Inwiefern unterscheidet sich diese Verlustfunktion von der binären: Logistik für die binäre Klassifizierung?
GeorgeOfTheRF
3
Es ist nur eine Verallgemeinerung der logistischen Funktion für Multi-Class-Fall, sollte kein wesentlicher Unterschied sein.
cyberj0g
14

Verwenden Sie predict_probastatt predict. Sie können das Objektiv als verlassen binary:logistic.

ihadanny
quelle
3
Wenn dies Python und nicht R wäre, dann könnte diese Antwort sinnvoll sein. Falsche Sprache.
B_Miner
1
Hoppla! danke @B_Miner. Ich lösche diese Antwort nicht, da sie für andere hilfreich sein könnte, die den gleichen Fehler machen und der Meinung sind, dass es sich um Python handelt.
ihadanny
Für mich ist dies kein Trick. Datascience.stackexchange.com/questions/14527/…
Georg Heiler
4
xgboost hat keine predict_proba-Funktion
Ashoka Lella
XGBoost Classifier hat eine predict_proba-Option xgboost.readthedocs.io/en/latest/python/python_api.html
Paul Bendevis
0

nach der Vorhersage

pred_s <- predict(bst, x_mat_s2)

Sie können die Wahrscheinlichkeit durch bekommen

pred_s$data

Wenn es sich um eine binäre Klassifizierung handelt, pred_s$dataumfasst dies prob.0, prob.1, response.

So kann man prob.1 durch bekommen

pred_s$data$prob.1
Dera
quelle