Wie ändere ich den Schwellenwert für die Klassifizierung in R randomForests?

10

In der gesamten Literatur zur Modellierung der Artenverteilung wird vorgeschlagen, dass bei der Vorhersage des Vorhandenseins / Nichtvorhandenseins einer Art unter Verwendung eines Modells, das Wahrscheinlichkeiten (z. B. RandomForests) ausgibt, die Wahl der Schwellenwahrscheinlichkeit, nach der eine Art tatsächlich als Vorhandensein oder Nichtvorhandensein klassifiziert werden soll, wichtig ist und sollte Verlassen Sie sich nicht immer auf den Standardwert von 0,5. Ich brauche Hilfe dabei! Hier ist mein Code:

library(randomForest)
library(PresenceAbsence)

#build model
RFfit <- randomForest(Y ~ x1 + x2 + x3 + x4 + x5, data=mydata, mytry = 2, ntrees=500)

#eventually I will apply this to (predict for) new data but for first I predict back    to training data to compare observed vs. predicted
RFpred <- predict(RFfit, mydata, type = "prob")

#put the observed vs. predicted in the same dataframe
ObsPred <- data.frame(cbind(mydata), Predicted=RFpred)

#create auc.roc plot
auc.roc.plot(ObsPred, threshold = 10, xlab="1-Specificity (false positives)",
  ylab="Sensitivity (true positives)", main="ROC plot", color=TRUE,
  find.auc=TRUE, opt.thresholds=TRUE, opt.methods=9) 

Daraus ermittelte ich, dass der Schwellenwert, den ich zur Klassifizierung der Anwesenheit anhand der vorhergesagten Wahrscheinlichkeiten verwenden möchte, 0,7 beträgt, nicht der Standardwert von 0,5. Ich verstehe nicht ganz, was ich mit diesen Informationen anfangen soll. Benutze ich diesen Schwellenwert einfach, wenn ich eine Karte meiner Ausgabe erstelle? Ich könnte leicht eine zugeordnete Ausgabe mit kontinuierlichen Wahrscheinlichkeiten erstellen und dann einfach diejenigen mit Werten größer als 0,7 als vorhanden und diejenigen <0,7 als nicht vorhanden neu klassifizieren.

Oder möchte ich diese Informationen verwenden und meine randomForests-Modellierung mithilfe des Cut-Off-Parameters erneut ausführen? Was genau macht der Cut-Off-Parameter? Ändert es die resultierende Abstimmung? (sagt derzeit, es ist "Mehrheit"). Wie verwende ich diesen Grenzparameter? Ich verstehe die Dokumentation nicht! Vielen Dank!

etw
quelle
2
Ich würde sagen, dass dies hier hingehört: Die Frage von (1) Wahrscheinlichkeitsschätzungen aus RF, (2) ob Sie dem Modell eine Kostenfunktion auferlegen können oder in das Modell einbauen müssen und (3) wie Kostenfunktionen implementiert werden In RF treten immer wieder Probleme auf, die nicht nur mit der Programmierung zusammenhängen.
Charles

Antworten:

7

# Setzen Sie den Schwellenwert oder den Grenzwert auf 0,7

cutoff=0.7

# Alle Werte, die unter dem Grenzwert 0,7 liegen, werden als 0 klassifiziert (in diesem Fall vorhanden).

RFpred[RFpred<cutoff]=0

# Alle Werte größer als der Grenzwert 0,7 werden als 1 klassifiziert (in diesem Fall nicht vorhanden).

 RFpred[RFpred>=cutoff]=1
Überflutung
quelle
1
Könnten Sie Ihre Antwort ein wenig erweitern? Zumindest wäre es nützlich, Ihren Code mit Anmerkungen zu versehen.
Patrick Coulombe
2
FWIW, ich denke das ist völlig ausreichend.
Sycorax sagt Reinstate Monica
Diese Antwort ist vollkommen richtig. Genau.
Seanosapien
7

Tut mir leid, dass du keine Antworten bekommen hast. Ich würde Max Kuhns Buch zur Berichterstattung über dieses Problem empfehlen. Dies ist ein ziemlich weites Thema. Fügen Sie einfach einige Bits hinzu:

  1. ROC-Kurven sind beliebt, aber nur dann sinnvoll, wenn Sie versuchen, den Kompromiss zwischen den Kosten für falsch negative und falsch positive Ergebnisse zu verstehen. Wenn CostFN = CostFP, dann sind sie sich nicht sicher, ob sie sinnvoll sind. Die c-Statistik und andere abgeleitete Kennzahlen haben noch Verwendung. Wenn Sie die Genauigkeit maximieren möchten - stimmen Sie einfach Ihr Modell darauf ab (Caret-Paket macht dies einfach), und erstellen Sie keine ROC-Kurve.
  2. Jeder verwendet die aus RF-Modellen abgeleiteten Wahrscheinlichkeiten. Ich denke, man sollte darüber nachdenken - dies sind keine probabilistischen Modelle, sie sind nicht dafür gebaut. Es funktioniert oft. Zumindest würde ich ein Validierungsdiagramm der HF-Wahrscheinlichkeiten für neue Daten erstellen, wenn ich wirklich an Wahrscheinlichkeiten interessiert wäre
  3. Der einfachste Weg wäre, "einfach diejenigen mit Werten größer als 0,7 als vorhanden und diejenigen <0,7 als nicht vorhanden neu zu klassifizieren".
  4. Wenn Kosten (FN) nicht gleich Kosten (FP) sind, müssen Sie die HF kostensensitiv machen. R macht das nicht einfach. Die Gewichtungsfunktion im RandomForest-Paket funktioniert nicht. Die beste Option ist, mit der Stichprobe zu spielen, die Mehrheit der Fälle zu unterschätzen, um die gewünschte Kostenfunktion zu erhalten. Die Beziehung zwischen Stichprobenverhältnis und Kosten ist jedoch nicht direkt. Vielleicht möchten Sie also bei (3) bleiben

Update zu Klassengewichten Andy Liaw:
"Die aktuelle Option" classwt "im randomForest-Paket war von Anfang an vorhanden und unterscheidet sich von der Implementierung von Klassengewichten durch den offiziellen Fortran-Code (Version 4 und höher). Sie berücksichtigt lediglich die Klasse Gewichte in der Gini-Indexberechnung beim Aufteilen von Knoten, genau wie ein einzelner CART-Baum bei gegebenen Klassengewichten erstellt wird. Prof. Breiman hat das neuere Klassengewichtungsschema entwickelt, das in der neueren Version seines Fortran-Codes implementiert ist, nachdem wir festgestellt haben, dass es einfach verwendet wird Die Gewichte im Gini-Index schienen bei extrem unausgeglichenen Daten (z. B. 1: 100 oder schlechter) nicht viel zu helfen. Wenn die Verwendung von gewichtetem Gini in Ihrer Situation hilft, tun Sie dies auf jeden Fall. Ich kann das nur in der Vergangenheit sagen hat uns nicht das erwartete Ergebnis gebracht. "

Charles
quelle
Könnten Sie zu Unterpunkt (4) erläutern, warum das Gewichtungsargument nicht funktioniert?
Sycorax sagt Reinstate Monica
2
Mein Verständnis war, dass es angemessen in Fortran-Code ( stat.berkeley.edu/~breiman/RandomForests/cc_software.htm ) implementiert ist, aber nicht in R-Paket. Dies wird diskutiert: ( stat.ethz.ch/pipermail/r-help/2011-September/289769.html ) und konzentriert sich auf die Notwendigkeit, Gewichte in allen Phasen der Baumbildung zu verwenden - nicht nur in Gini Split. Die aktuelle R-Implementierung - die nur die Gewichtung bei Split verwendet
funktioniert