[PYTHON] Zufälliger Wald

Leistungsbewertung von scikit-learn + Random Forest

Einführung

Normalerweise benutze ich SVM, aber ich habe ein Experiment in Random Forest durchgeführt, um den Lernenden zu untersuchen.

Referenzmaterial http://d.hatena.ne.jp/shakezo/20121221/1356089207 Wann Grundlagen des statistischen maschinellen Lernens (http://www.kyoritsu-pub.co.jp/bookdetail/9784320123625)

Über Random Forest

Erstellen Sie mehrere Testdaten durch Bootstrap-Sampling und erstellen Sie mehrere.

Schließlich werden die Klassen durch die Mehrheit jedes Entscheidungsbaums klassifiziert.

Wenn der Entscheidungsbaum ein Regressionsbaum ist, kann eine numerische Vorhersage gemacht werden.

Der Unterschied zum Absacken besteht darin, dass RandomForest gleichzeitig auch die Zielvariable abtastet.

Warum ist die Genauigkeit gut?

Generalisierungsfehler = Bias + Varianz + Rauschen

Wann

Ein Lernbaum wie ein Entscheidungsbaum ist ein schwacher Lernbaum mit einer hohen Varianz (das Vorhersageergebnis ist signifikant unterschiedlich, wenn die Daten geringfügig unterschiedlich sind).

Die Strategie besteht darin, die Varianz zu verringern, indem viele solche Lernbäume erstellt werden.

Hyperparameter sind hauptsächlich

num_trees: Wie viele Entscheidungsbäume müssen erstellt werden?

max_depth: Welcher Tiefenentscheidungsbaum erstellt werden soll

num_features: Wie viele Ziele sollen beim Abtasten von Zielen abgetastet werden?

Ist.

Das Buch sagt, dass random_forest nicht überlernt, so dass es nicht von max_depth abhängt, und dass num_features sqrt (Features) sein sollten. Ist das wahr? Also habe ich ein Experiment durchgeführt.

Experimentelle Bedingungen

Ich habe mnist für die Daten verwendet.

Ich hatte jedoch das Gefühl, dass die ursprüngliche Datenmenge groß war, und habe jede Nummer 2000 abgetastet.

10000 Testdaten wie sie sind

Experiment

num_trees

Wenn Sie num_trees in 10, 100, 1000, 10000 ändern,

max_depth ist bis zum Ende

num_features fest auf sqrt (Features)

random_trees.png

Immerhin scheint die Genauigkeit gering zu sein, wenn sie zu klein ist, aber es macht keinen Sinn, wenn sie zu groß ist, etwa 1000 scheinen angemessen zu sein

depth

Nächstes Mal ändern Sie die Tiefe

10 Arten von 2, 4, 6, 8, 10, 12, 14, 16, 18, 20

num_trees auf 1000 festgelegt, max_features auf sqrt festgelegt (Features)

random_depth.png

Selbst wenn Sie tief suchen, scheint es, dass kein Überlernen auftritt. Es ist in Ordnung, tief zu suchen

num_features

Wenn Sie num_features auf 10, 15, 20, 25, 30, 35, 40, 45, 50, 55,

Anzahl Bäume bis 1000, Tiefe bis max

random_features.png

Ist 35 oder 40 der Höhepunkt? Die rote Linie ist der Standard-Sprt

War es diesmal besser, etwas mehr als die Standardeinstellung zu haben?

Ausführungszeit

Zum Schluss noch zur Ausführungszeit

num_trees=1000 max_depth = max max_features = 40 n_jobs = 6

Experimentieren Sie nur mit der CPU von

Der Durchschnitt von 3 Mal beträgt 28,8 Sekunden

Vergleichsmethode

Als Benchmark klassifizierte SVM auch MNIST.

C = 1,0, gamma = 1/784 im rbf-Kernel

Keine Rastersuche

Mit zwei Typen, eins gegen eins und eins gegen Ruhe

Als Einschränkung wurden die Daten mit 0-1 normalisiert (ich konnte ohne Normalisierung nicht gut lernen, warum?)

F-value Time
one_versus_one 0.930 1 min 39 s
one_versus_rest 0.922 -

In spärlichen Fällen ist RandomForest genauer und schneller, wenn die Anzahl der Stichproben zwischen den Klassen nicht verzerrt ist! !!

Die Frage ist, One-vs-Rest war langsamer, warum? Paketproblem?

Fazit

Eindruck, dass ich RandomForest ausprobiert habe, schließlich ist es schnell! !!

Vielleicht, weil ich immer nur SVM benutze, fühlt es sich ziemlich schnell an als gewöhnlich ...

Es ist auch attraktiv, dass es nur wenige Parameter gibt. Ist es in Ordnung mit num_trees und max_features? ??

Als nächstes wird verstärkt ...

Recommended Posts

Zufälliger Wald (2)
Zufälliger Wald
Balanced Random Forest in Python
Ich habe versucht, RandomForest zu verwenden
[Maschinelles Lernen] Zufällige Gesamtstruktur verstehen
Entscheidungsbaum und zufälliger Wald
Verwenden Sie Random Forest mit Python
Maschinelles Lernen: Überwacht - Zufälliger Wald
Zufälliger Vergleich von Waldgröße und Verarbeitungszeit
Random Forest (Klassifizierung) und Hyperparameter-Tuning
Vergleich von Regressionsmodellen - ARMA vs. Random Forest Regression
[Maschinelles Lernen] Versuchen Sie, zufällige Wälder zu studieren
Multi-Label-Klassifizierung nach Random Forest mit Scikit-Learn
Krankheitsklassifizierung durch Random Forest mit Python
So richten Sie eine zufällige Gesamtstruktur mit Optuna ein
# Zufällige Zeichenfolgengenerierung
So richten Sie eine zufällige Gesamtstruktur mit Optuna ein