Das randomForest-Paket in R von A. Liaw ist ein Port des Originalcodes, der eine Mischung aus C-Code (übersetzt), etwas verbleibendem Fortran-Code und R-Wrapper-Code ist. Um die bestmögliche Aufteilung über Haltepunkte und über mtry-Variablen zu bestimmen, verwendet der Code eine Bewertungsfunktion ähnlich der von gini-gain:
G i n i G a i n ( N, X) = G i n i ( N) - | N1|| N|G i n i ( N1) - | N2|| N|G i n i ( N2)
Wenn X ein gegebenes Merkmal ist, ist N der Knoten, an dem die Aufteilung erfolgen soll, und N1 und N2 sind die zwei untergeordneten Knoten, die durch Aufteilung von N . | . | ist die Anzahl der Elemente in einem Knoten.
Und G i n i ( N) = 1 - ∑Kk = 1p2k , wobei K die Anzahl der Kategorien im Knoten ist
Die angewendete Scoring-Funktion ist jedoch nicht exakt dieselbe, sondern eine gleichwertige, recheneffizientere Version. G i n i ( N) und | N | sind für alle verglichenen Splits konstant und werden daher weggelassen.
Untersuchen den Teil auch, wenn die Summe der Quadratprävalenz in einem Knoten (1) als| N2|| N|G i n i ( N2) ∝ | N2| Gini( N2) = | N2| (1- ∑Kk = 1p2k) = | N2| ∑ n c l a s s22 , k| N2|2
Dabei ist die Klassenanzahl der k im Tochterknoten 1. Hinweiswird sowohl im Nominator als auch im Nenner platziert. | N 2 |n c l a s s1 , k| N2|
Entfernen der Trivialkonstante aus der Gleichung, so dass die beste Aufteilungsentscheidung darin besteht, die knotengrößengewichtete Summe der quadratischen Klassenprävalenz zu maximieren ...1 -
score =
| N1| ∑Kk = 1p21 , k+ | N2| ∑Kk = 1p22 , k= | N1| ∑Kk = 1n c l a s s21 , k| N1|2+ | N2| ∑Kk = 1n c l a s s22 , k| N2|2
=∑Kk=1nclass22,k1|N1|−1+∑Kk=1nclass22,k1|N1|−2
=nominator1/denominator1+nominator2/denominator2
Die Implementierung ermöglicht auch das klassenspezifische Hoch- / Runtergewichten von Samples. Ebenfalls sehr wichtig, wenn die Implementierung diese modifizierte Gini-Verstärkung aktualisiert, ist das Verschieben eines einzelnen Samples von einem Knoten zum anderen sehr effizient. Die Stichprobe kann von den Nennern / Nennern eines Knotens subtrahiert und zu den anderen addiert werden. Ich habe vor einigen Monaten einen Prototyp-RF geschrieben, der ignorant für jeden Breakpoint den Gini-Gain von Grund auf neu berechnet und das war langsamer :)
Wenn mehrere Zwischenergebnisse am besten sind, wird ein zufälliger Gewinner ausgewählt.
Diese Antwort basierte auf der Überprüfung der Quelldatei "randomForest.xxtar.gz / src / classTree.c", Zeile 209-250