Meine Frage betrifft die binäre Klassifizierung, beispielsweise die Trennung von guten und schlechten Kunden, aber nicht die Regression oder nicht-binäre Klassifizierung. In diesem Zusammenhang ist ein zufälliger Wald ein Ensemble von Klassifizierungsbäumen. Für jede Beobachtung stimmt jeder Baum mit "Ja" oder "Nein", und die durchschnittliche Stimme aller Bäume ist die endgültige Waldwahrscheinlichkeit.
Meine Frage bezieht sich auf das Ändern des Verhaltens der zugrunde liegenden Bäume: Wie können wir die randomForest-Funktion (des randomForest-Pakets von R) so ändern, dass jeder Baum eine Dezimalzahl anstelle eines binären Ja / Nein stimmt. Um besser zu verstehen, was ich mit Dezimalstelle meine, lassen Sie uns darüber nachdenken, wie Entscheidungsbäume funktionieren.
Ein ausgewachsener Entscheidungsbaum hat 1 gute oder 1 schlechte Instanz in seinen Endknoten. Angenommen, ich beschränke die Größe des Terminalknotens auf 100. Dann sehen die Terminalknoten folgendermaßen aus:
Knoten1 = 80 schlecht, 20 gut
Knoten2 = 51 schlecht, 49 gut
Knoten3 = 10 schlecht, 90 gut
Beachten Sie, dass, obwohl Node1 und Node2 "schlecht" stimmen, ihre "Stärke der Schlechtigkeit" stark unterschiedlich ist. Das ist es, wonach ich suche. Anstatt 1 oder 0 zu erzeugen (was das Standardverhalten ist), kann man das R-Paket so ändern, dass sie 80/100, 51/100, 10/100 usw. wählen?
quelle
Antworten:
Dies ist ein subtiler Punkt, der von Software zu Software unterschiedlich ist. Es gibt zwei Hauptmethoden, die mir bekannt sind:
randomForest
funktioniert R auch bei Verwendungpredict(..., type="prob")
sklearn.ensemble.RandomForestClassifier.predict_proba
funktioniert es. In einer anderen Antwort weist @ usεr11852 darauf hin, dass dasranger
Paket von R auch diese Funktionalität bietet. Glücklicherweise kann ich bestätigen, dass meine begrenzte Nutzungranger
auch viel, viel schneller ist alsrandomForest
.Ich glaube nicht, dass es einen einfachen Weg gibt,
randomForest
die Proportional-Leaf-Methode anzuwenden, da die R-Software eigentlich nur ein Haken in ein C & FORTRAN-Programm ist. Sofern Sie nicht gerne den Code eines anderen ändern, müssen Sie entweder Ihren eigenen Code schreiben oder eine andere Softwareimplementierung finden.quelle
randomForest
geändert werden kann, um dies zu begleiten?randomForest
handelt es sich nur um eine R-Schnittstelle zum FORTRAN-Code, sodass möglicherweise erhebliche Ressourcen erforderlich sind, um dies zu erreichen.Es ist durchaus möglich, einen "Wahrscheinlichkeitswald" anzubauen. Die Methodik von Malley et al. (2012) " Wahrscheinlichkeitsmaschinen: Konsistente Wahrscheinlichkeitsschätzung unter Verwendung nichtparametrischer Lernmaschinen ", in der beschrieben wird, wie dies getan wird und wie es mit der Standardimplementierung zufälliger Gesamtstrukturen verglichen wird. Darüber hinaus implementiert der hervorragende R-Paket- Ranger diese Funktionalität bereits. Einfach
probability = TRUE
beim Funktionsaufruf einstellenranger
.quelle
Einfach benutzen
predict.randomForest(..., type="prob")
. Du machst eine gute Sache .quelle
predict.all
und dienorm.votes
Parameter zu betrachten, scheint dies nicht möglich zu sein. Wenn Sie dies wirklich wollen, müssen Sie wahrscheinlich Ihre eigene zufällige Gesamtstruktur codieren. Ich stimme @psarka zu, dass dies absolut sinnvoll ist. (Ich würde diese Antwort löschen, aber dann würden wir diese Diskussion in den Kommentaren verlieren.)