[PYTHON] Zufällige Wälder zu verstehen

Einführung

Ich habe den Algorithmus für zufällige Gesamtstrukturen zusammengefasst, damit Sie ihn in Punkten verstehen können. Es wird keine Formel verwendet. Die Beschreibung basiert auf der Annahme, dass Sie den Entscheidungsbaum verstehen. Wenn Sie also den Algorithmus des Entscheidungsbaums kennen möchten, lesen Sie bitte hier.

Referenz

Um den zufälligen Wald zu verstehen, bezog ich mich auf Folgendes. Obwohl es auf Englisch ist, wird es auf leicht verständliche Weise ausführlich erklärt. Wenn Sie mehr über Random Forest erfahren möchten, lesen Sie es bitte.

Wie Random Forest funktioniert

Zufällige Waldmerkmale

Random Forest ist einfach ein Algorithmus, der viele Entscheidungsbäume erstellt und die Mehrheit erhält. Es hat die folgenden Eigenschaften und ist sehr gut.

In diesem Artikel werde ich die Punkte des Random Forest-Algorithmus erläutern, einschließlich der Gründe, warum er solche Eigenschaften aufweist.

4 grundlegende Punkte des zufälligen Waldes

Es gibt vier Hauptpunkte im Algorithmus für zufällige Gesamtstrukturen. Wenn Sie diese vier kennen, können Sie sagen, dass Sie die Umrisse des zufälligen Waldes verstehen können.

--Boot Strapping

Punkt ①-Boot Strapping

Zufälliger Wald ist eine Sammlung von entscheidenden Bäumen. Wir treffen viele Entscheidungsbäume, um einen Wald zu machen, aber es gibt einen Punkt, wie man jeden Baum macht. Zunächst, wie Sie Trainingsdaten beim Erstellen eines Entscheidungsbaums auswählen. Ermöglichen Sie in der zufälligen Gesamtstruktur beim Erstellen jedes Entscheidungsbaums ** das Duplizieren und Abtasten ** aller Daten und verwenden Sie diese Daten als Trainingsdaten beim Erstellen des Entscheidungsbaums. Diese Technik wird als ** Bootstrapping ** bezeichnet.

サンプル1.png

Natürlich können dieselben Daten in den Trainingsdaten enthalten sein, da die Probenahme mit zulässiger Duplizierung durchgeführt wird.

Punkt ②-Grenzen Sie die zu verwendenden Variablen ein

Es ist auch wichtig, die Variablen einzugrenzen, die beim Erstellen von Knoten (Verzweigungspunkten) in jedem Entscheidungsbaum verwendet werden. Wenn die Gesamtdatenmenge $ p $ -Variablen enthält, werden $ m $ -Variablen zufällig ausgewählt und verwendet, anstatt alle zum Erstellen jedes Knotens zu verwenden. Als Zahl wird häufig eine Zahl von ungefähr $ m = \ sqrt {p} $ verwendet.

サンプル3.png

Wir werden eine große Anzahl von Entscheidungsbäumen erstellen, indem wir den Vorgang von "① → ②" wiederholen. Normalerweise erstellen Sie 100 oder mehr Bäume. (Der Standardwert für den zufälligen Wald von sklearn ist 100) Durch Wiederholen des Vorgangs von "① → ②" werden verschiedene Bäume erstellt, und die Sorte macht den zufälligen Wald effektiver.

Punkt ③-Absacken

** In einer zufälligen Gesamtstruktur ist die endgültige Ausgabe das Ergebnis einer Mehrheitsentscheidung jedes Baums **. Die Methode zum Auswählen der Trainingsdaten, die für jedes Lerngerät verwendet werden sollen, durch Bootstrapping, Verwenden des Lerngeräts zur Vorhersage und schließlich zum Zusammenstellen, heißt ** Bagging **, und zufällige Gesamtstruktur ist eine davon. (Bagging steht für Bootstrap Aggregation)

Das Absacken selbst hat den Effekt, dass die Streuung verringert und eine Überanpassung vermieden wird. Daher wird es an vielen anderen Orten als in zufälligen Wäldern verwendet.

Punkt ④-OOB-Überprüfung (Out-of-Bag)

Wenn Daten mit der Bootstrapping-Methode abgetastet werden, werden immer ** Daten generiert, die dort nicht ausgewählt sind **. Ungefähr 1/3 der Originaldaten verbleiben, aber diese Daten werden als ** OOB-Daten (Out-of-Bag) ** bezeichnet.

サンプル2.png

Es ist auch ein großer Punkt, dass diese OOB-Daten ** die Genauigkeit unbekannter Daten ohne Kreuzvalidierung oder separate Testdaten ** abschätzen können.

Klassifizieren Sie die OOB-Daten anhand der erstellten zufälligen Gesamtstruktur und überprüfen Sie den Klassifizierungsfehler der Klassifizierung (im Falle einer Regression überprüfen Sie den Index, z. B. den minimalen quadratischen Fehler). Im Falle einer Klassifizierung wird der Prozentsatz solcher falsch klassifizierten OOB-Daten als OOB-Fehler (Out-of-Bag-Fehler) bezeichnet.

Wir möchten die Genauigkeit maximieren, indem wir die Anzahl der verwendeten Variablen (Punkt ②) entsprechend der Rate dieses ** OOB-Fehlers anpassen. ** **.

Weitere Punkte des zufälligen Waldes

Das Folgende wird auch als Punkte einer zufälligen Gesamtstruktur eingeführt.

Es wird oft nicht in der Beschreibung von zufälligen Wäldern erwähnt (ich wusste es zuerst nicht einmal), aber ich denke, es ist ein großer Faktor, um zufällige Wälder zu einem effektiven Algorithmus zu machen.

Umgang mit fehlenden Werten

Ein Hauptmerkmal von Random Forest ist, dass es fehlende Werte problemlos verarbeiten kann. Wenn die Trainingsdaten fehlende Werte haben, werden die fehlenden Werte in den folgenden Schritten geschätzt.

(1) Verwenden Sie vorerst den Durchschnittswert anderer Daten als Schätzwert des fehlenden Wertes. ↓ ② Erstellen Sie ein Modell einer zufälligen Gesamtstruktur ↓ ③ ** Schätzen Sie fehlende Werte mithilfe der Näherungsmatrix neu **

Näherungsmatrix

Die Proximity-Matrix ist etwas verwirrend, wird jedoch wie folgt erstellt. Wenden Sie nach dem Erstellen der zufälligen Gesamtstruktur alle Daten (einschließlich der Trainingsdaten und OOB-Daten) auf die zufällige Gesamtstruktur an. In jedem Entscheidungsbaum in der zufälligen Gesamtstruktur wird die Ausgabe des Klassifizierungs- (oder Regressions-) Ergebnisses ausgegeben, aber die Daten, bei denen sich die Endknoten an derselben Stelle befinden, werden auf Nähe +1 gesetzt. Fügen Sie sie der Matrix aus der Anzahl der Daten x der Anzahl der Daten hinzu, um eine Proximity-Matrix zu erstellen.

サンプル4.png

Die Nähe wird für jeden bestimmten Baum in der zufälligen Gesamtstruktur berechnet, durch die Anzahl der zuletzt erstellten Bäume geteilt und als Näherungsmatrix standardisiert, die zur Schätzung des fehlenden Werts verwendet wird.

サンプル5.png

Schätzen fehlender Werte mithilfe der Näherungsmatrix

Random Forest verwendet diese Proximity-Matrix, um fehlende Werte zu schätzen. Erstellen Sie zunächst eine zufällige Gesamtstruktur mit Daten, die im Durchschnitt mit fehlenden Werten gefüllt sind. Der fehlende Wert wird unter Verwendung der dort erhaltenen Näherungsmatrix erneut geschätzt.

サンプル6.png

Der fehlende Wert wird unter Verwendung dieser Nähe als Gewicht erneut geschätzt.

サンプル7.png

Schätzen Sie den fehlenden Wert genauer, indem Sie die obigen Schritte wiederholen.

Diese ** Näherungsmatrix kann nicht nur verwendet werden, um fehlende Werte zu schätzen, sondern auch um Beziehungen zwischen Daten darzustellen. ** (1-Näherungsmatrix) kann als Matrix bezeichnet werden, die den Abstand zwischen Daten ausdrückt. Sie können also die Beziehung zwischen Daten ausdrücken, indem Sie sie in eine Wärmekarte oder ein zweidimensionales Diagramm umwandeln. (Beachten Sie, dass die zufällige Gesamtstruktur in der sklearn-Bibliothek keine Funktion zum Ausgeben der Proximity-Matrix hat.)

Führe einen zufälligen Wald aus

Im Folgenden werden wir versuchen, eine zufällige Gesamtstruktur mit sklearn auszuführen. Detaillierte Parametererklärungen werden nicht gegeben. Wenn Sie interessiert sind, überprüfen Sie bitte die Referenz.

Zufälliger Wald mit sklearn

Erstellen wir eine zufällige Gesamtstruktur mit dem Iris-Dataset. Trennen Sie die Daten von Trainingsdaten und Testdaten und erstellen Sie anhand der Trainingsdaten eine zufällige Gesamtstruktur. Die Testdaten werden zur Überprüfung der Genauigkeit verwendet. Wir werden die Genauigkeit auch mithilfe von OOB-Daten ausgeben und prüfen, ob sie nahe an der Genauigkeit für unbekannte Daten liegt, wie in den oben genannten Merkmalen der zufälligen Gesamtstruktur beschrieben.

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
iris = load_iris()
data = iris['data']
target = iris['target']

X_train, X_test ,Y_train, Y_test = train_test_split(data, target, test_size = 0.7, shuffle = True, random_state = 42)

rf = RandomForestClassifier(oob_score =True)

rf.fit(X_train, Y_train)

print('test_data_accuracy:' + str(rf.score(X_test, Y_test)))
print('oob_data_accuracy:' + str(rf.score(X_train, rf.oob_decision_function_.argmax(axis = 1))))

Das Ausgabeergebnis ist hier.

test_data_accuracy:0.9428571428571428
oob_data_accuracy:0.9555555555555556

Die Genauigkeit war höher, als die OOB-Daten überprüft wurden, aber die Testdaten sind nicht das Ergebnis einer Gegenüberprüfung, sodass sie möglicherweise innerhalb des Fehlerbereichs liegen. Wenn die Gesamtdatenmenge gering ist, scheint die Zuverlässigkeit der Genauigkeit bei der Überprüfung mit OOB-Daten gering zu sein.

Next Als nächstes möchte ich einen Artikel veröffentlichen, der die Gradientenverstärkung zusammenfasst.

Recommended Posts

Zufällige Wälder zu verstehen
Zusammenfassung der Zufallszahlengenerierung durch Numpy