Diskussion zum Artikel "Tiefe Neuronale Netzwerke (Teil VI). Gruppen von Klassifikatoren von Neuronalen Netzen: Bagging"
Danke, interessant, elmNN scheint ein würdiger Ersatz für nnet zu sein, besonders im Ensemble. Ich habe auch über rBayesianOptimization gelernt, ich werde versuchen, es in Zukunft zu verwenden.
Interessanter Artikel!
Es war unerwartet, 500 Netze auf einmal zu lernen. Ich hätte nicht gedacht, dass man das so schnell machen kann. Mit DNN wird es Stunden dauern...
1) Anstelle des zusätzlichen Zufallszahlengenerators setRNG(rng[[k]]) könnte man die eingebaute holdout(Ytrain, ratio = r/10, mode = "random", seed = i ) # verwenden, wobei i die Iterationszahl der Schleife ist.
Auf diese Weise erhalten wir auch bei jeder Iteration einen neuen gemischten Satz von Eingabedaten, der bei Neustarts wiederholt wird.
2) Im Allgemeinen ist holdout eine großartige Funktion, sie mischt die Daten sehr gut, viel besser als die selbst geschriebene Funktion in MT5, bei der jede Zeile durch eine zufällige andere Zeile ersetzt wird.
Wenn man den Seed ändert, kann man ein sehr gutes Lernergebnis erzielen. Ich habe versucht, manuell mit darch zu ändern - ich bekam einen Fehler von 50% auf 30% und die Anzahl der Trades von Einheiten auf Hunderte - und das ist nur nach dem Ändern des Schlüssels für das Mischen. Eine automatische Überprüfung in einer Schleife ist wahrscheinlich zuverlässiger.
3) elmNN - ähnelt einem normalen NS mit einer Trainingsepoche. Bei 500 Stücken (von denen wir das beste auswählen) erhalten wir ein Analogon von 1 NS mit 500 Trainingsepochen (von denen wir ebenfalls die beste Epoche auswählen). Dies ist jedoch nur eine Assoziation, keine Aussage.
Ich denke aber, dass die Mittelung mehrerer bester Netzwerke besser ist als 1 bestes Ergebnis nach 500 Epochen. Ich würde gerne Ensemble mit DNN machen, aber ich befürchte, dass es eine sehr lange Lernkurve sein wird. Ich werde experimentieren)
Danke für den Artikel!
Interessanter Artikel!
Es war unerwartet, 500 Netze auf einmal zu lernen. Ich hätte nicht gedacht, dass man das so schnell machen kann. Mit DNN wird es Stunden dauern...
1) Anstelle eines zusätzlichen Zufallszahlengenerators setRNG(rng[[k]]) könnten wir den eingebauten holdout(Ytrain, ratio = r/10, mode = "random", seed = i ) # verwenden, wobei i die Iterationszahl der Schleife ist.
Auf diese Weise erhalten wir auch bei jeder Iteration einen neuen gemischten Satz von Eingabedaten, der bei Neustarts wiederholt wird.
2) Im Allgemeinen ist holdout eine großartige Funktion, sie mischt die Daten sehr gut, viel besser als die selbst geschriebene Funktion in MT5, bei der jede Zeile durch eine zufällige andere Zeile ersetzt wird.
Wenn man den Seed ändert, kann man ein sehr gutes Lernergebnis erzielen. Ich habe versucht, manuell mit darch zu ändern - ich bekam einen Fehler von 50% auf 30% und die Anzahl der Trades von Einheiten auf Hunderte - und das ist nur nach dem Ändern des Schlüssels für das Mischen. Die automatische Überprüfung in einer Schleife ist wahrscheinlich zuverlässiger.
3) elmNN - ähnelt einem normalen NS mit einer Trainingsepoche. Bei 500 Stücken (von denen wir das beste auswählen) erhalten wir ein Analogon von 1 NS mit 500 Trainingsepochen (von denen wir ebenfalls die beste Epoche auswählen). Dies ist jedoch nur eine Assoziation, keine Aussage.
Ich denke aber, dass die Mittelung mehrerer bester Netzwerke besser ist als 1 bestes Ergebnis nach 500 Epochen. Ich würde gerne Ensemble mit DNN machen, aber ich befürchte, dass es eine sehr lange Lernkurve sein wird. Ich werde experimentieren)
Danke für den Artikel!
1. Das kann man nicht. Die Hauptaufgabe des RNG ist es, sicherzustellen, dass die Gewichte der neuronalen Netze im Ensemble durch konstante Zufallsvariablen initialisiert werden. durch konstante Zufallsvariablen initialisiert werden. Um die Hyperparameter zu optimieren, wird ein Ensemble mit konstanter Qualität benötigt.
(3) Es handelt sich um ein einschichtiges NN, jedoch ohne Backpropagation-Lernen. Lesen Sie die Beschreibung in den Links. Es gibt dort einen ganzen Zoo von ihnen. Und wie die Entwickler behaupten, arbeiten sie recht erfolgreich.
Die Ergebnisse des Ensembles mit ELM waren für mich ehrlich gesagt eine große Überraschung und Bestätigung der Aussage: "Nicht alles, was schwierig ist, ist genial". Im nächsten Teil werden wir verschiedene Methoden ausprobieren, um die Qualität der Klassifizierung durch Mittelwertbildung zu verbessern.
Viel Erfolg
1. Das kann man nicht. Die Hauptaufgabe des RNG besteht darin, sicherzustellen, dass die Gewichte der neuronalen Netze im Ensemble mit konstanten Zufallsvariablen initialisiert werden. durch konstante Zufallsvariablen initialisiert werden. Um die Hyperparameter zu optimieren, ist ein Ensemble mit konstanter Qualität erforderlich.
(3) Es handelt sich um ein einschichtiges NN, jedoch ohne Backpropagation-Lernen. Lesen Sie die Beschreibung in den Links. Es gibt dort einen ganzen Zoo von ihnen. Und wie die Entwickler behaupten, funktionieren sie recht erfolgreich.
Die Ergebnisse des Ensembles mit ELM waren für mich ehrlich gesagt eine große Überraschung und Bestätigung der Aussage: "Nicht alles, was schwierig ist, ist genial". Im nächsten Teil werden wir verschiedene Methoden ausprobieren, um die Qualität der Klassifizierung durch Mittelwertbildung zu verbessern.
Viel Glück
1) Ich hab's. Zusätzlich zur Initialisierung der Mischung initialisieren Sie auch die Gewichte des Netzes.
Und nur set.seed(i); wird nicht den gleichen Effekt haben?
1) Verstanden. Zusätzlich zur Initialisierung der Mischung werden auch die Gewichte des Netzes initialisiert.
Und einfach set.seed(i); hat nicht den gleichen Effekt?
Nein, das wird es nicht. Es wird den RNG einmal auf einen Zustand setzen, aber wir haben 500 Iterationen von foreach und wir brauchen bei jeder Iteration einen anderen Zustand des RNG. Sehen Sie sich die Beschreibung des doRNG-Pakets an.
Viel Glück
Nein, das wird es nicht. Es wird den RNG einmal auf einen Zustand setzen, aber wir haben 500 foreach-Iterationen und wir brauchen einen anderen Zustand des RNG bei jeder Iteration. Sehen Sie sich die Beschreibung des doRNG-Pakets an.
Viel Glück
Es wird innerhalb der Schleife sein
Ens <- foreach(i = 1:n, .packages = "elmNN") %do% { set.seed(i); idx <- rminer::holdout(Ytrain, ratio = r/10, mode = "random")$tr elmtrain(x = Xtrain[idx, ], y = Ytrain[idx], nhid = nh, actfun = "sin") }d.h. es wird set.seed(1); dann set.seed(2); set.seed(3); ..... set.seed(500) sein;
Es wird innerhalb der Schleife sein
Versuchen Sie es. Es könnte funktionieren.
Versuchen Sie es. Es könnte funktionieren.
Das sollte es.
Und ich denke, es ist möglich, Multithreading in diesem Fall nicht abzuschalten.
Das muss so sein.
Und ich denke, es ist möglich, das Multithreading in diesem Fall nicht abzuschalten.
Testen Sie es einfach praktisch. Wenn Sie das gleiche oder ein besseres Ergebnis erhalten, dann können Sie es so machen. Die Sprache R erlaubt es, dieselbe Aktion auf unterschiedliche Weise auszuführen.
Viel Erfolg!
Testen Sie es einfach praktisch. Wenn Sie das gleiche oder ein besseres Ergebnis erhalten, können Sie es so machen. Die Sprache R ermöglicht es Ihnen, dieselbe Aktion auf verschiedene Arten durchzuführen.
Viel Glück!
Die Version
Ens <- foreach(i = 1:n, .packages = "elmNN") %do% { set.seed(i); idx <- rminer::holdout(Ytrain, ratio = r/10, mode = "random")$tr elmtrain(x = Xtrain[idx, ], y = Ytrain[idx], nhid = nh, actfun = "sin") }
funktioniert. Sie liefert bei jedem Durchlauf die gleichen Netzgewichte. Ich habe mit dem zweiten Netz verglichen. Ich habe env$Ens[2] ausgegeben und dann per Plugin in notepad++ verglichen.
Es funktionierte nicht mit Multithreading:
Fehler in setMKLthreads(2) :can't find function "setMKLthreads"
Was ist diese Funktion? Sie ist nicht im Code der Artikel 4 und 6 enthalten. Wie kann man sie einbinden?
PS: Es wäre bequemer, wenn Sie die R-Sitzung mit allen Funktionen und Quelldaten posten könnten.
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Neuer Artikel Tiefe Neuronale Netzwerke (Teil VI). Gruppen von Klassifikatoren von Neuronalen Netzen: Bagging :
Der Artikel beschreibt die Methoden des Aufbaus und Trainings von Gruppen von Neuronalen Netzen mit einer Struktur für das Bagging, einer Methode, um Vorhersagen aus verschiedenen Regressions- oder Klassifikationsmodellen zu kombinieren. Es bestimmt auch die Besonderheiten der Hyperparameter-Optimierung für einzelne Neuronale Netzwerk-Klassifikatoren, aus denen sich das Ensemble zusammensetzt. Die Qualität des optimierten Neuronalen Netzes, das im vorherigen Artikel der Serie erhalten wurde, wird mit der Qualität des erzeugten Ensembles Neuronaler Netze verglichen. Möglichkeiten, die Qualität der Klassifizierung des Ensembles weiter zu verbessern, werden geprüft.
Trotz der Tatsache, dass die Hyperparameter der einzelnen Klassifikatoren im Ensemble intuitiv gewählt wurden und offensichtlich nicht optimal sind, wurde eine hohe und stabile Qualität der Klassifikation erreicht, sowohl durch Mittelung als auch durch einfache Mehrheitsabstimmung.
Fassen wir alles zusammen. Schematisch lässt sich der gesamte Prozess der Erstellung und Erprobung eines Ensembles Neuronaler Netze in 4 Phasen unterteilen:
Abb. 3. Struktur des Trainings und des Testens des Ensembles von Neuronalen Netzen mit den Kombinator Mittelung/Abstimmung
Autor: Vladimir Perervenko