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)
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.
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.
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
num_trees
Wenn Sie num_trees in 10, 100, 1000, 10000 ändern,
max_depth ist bis zum Ende
num_features fest auf sqrt (Features)
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)
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
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?
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
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?
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