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?


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.


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.


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


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.