Maschinelles Lernen im Handel: Theorie, Modelle, Praxis und Algo-Trading - Seite 6

 
Dr. Trader:

Die "CSV-Datei" und der "R-Datensatz" auf der Registerkarte "Auswerten" sind einfach unterschiedliche Arten der Angabe der Datenquelle. Wenn Sie sie mit denselben Daten füttern, werden Sie beim Testen des Modells dasselbe Ergebnis erhalten.

Wenn vor dem Rasseln ausführen

dann ist dieses dataset_validate jetzt auf der Registerkarte evaluate als R-Datensatz verfügbar. Das Ergebnis der Modellprüfung wird jedoch dasselbe sein, wie wenn Sie nur die Option csv-Datei auswählen und die Datei C:/dummy_set_validation.csv angeben, da die Daten für den Test in beiden Fällen identisch sein werden.

Das Training selbst fand in einer anderen Datei, dummy_set_features.csv, statt, so dass ein Blick in die Zukunft hier nicht möglich ist, da die Daten in beiden Dateien unterschiedlich und überhaupt nicht zeitabhängig (sondern formelabhängig) sind. Ich denke, dass die Neuronen eine großartige Arbeit geleistet haben. Sie haben 6 Eingänge gefunden, die das Ergebnis bestimmen, den Einfluss anderer Eingänge reduziert und mit etwas neuronaler Logik die gewünschte Formel beschrieben.

Vorsichtshalber habe ich beide Dateien überprüft, um doppelte Zeichenfolgen zu finden, falls es welche gibt. Hier ist der Code in R:

Wenn dies vor dem Rattle geschieht, stehen die Tabellendataset_train unddataset_validate für das Training und die Modellprüfung zur Verfügung, und es gibt keine Duplikate. Ruhm R.

Die Modellvalidierungsdatei enthielt 23 Wiederholungen aus der Trainingsstichprobe, aber abgesehen davon enthält sie weitere 3000 eindeutige Zeilen, so dass die Modellbewertung nicht wesentlich beeinflusst werden konnte.

Offenbar bin ich nicht in der Lage zu erklären, was ich will.

1. Könnten Sie bitte das Anfangs- und Enddatum für beide Dateien angeben?

2. Aus der Dateidataset_validate kann nichts entfernt werden, da diese Datei das Eintreffen von Takt zu Takt simuliert.

 

Ich habe heute Morgen noch einmal darüber nachgedacht, es ist wirklich nicht so einfach.

Nach Ihrer Formel gibt es nur 2^6 = 64 Kombinationen von Eingängen, die verwendet werden. Wenn der Lernalgorithmus auf irgendeine Weise die Wichtigkeit dieser 6 Eingaben bestimmt, dann kann er sich durchaus alle 64 Kombinationen merken. Und dann spielt es keine Rolle, dass die Kombination aller Eingaben in der Validierungsstichprobe einzigartig ist, das Modell wird nur diese 6 signifikanten Eingaben nehmen und die bereits bekannte Antwort bestimmen. So hat es bei mir mit dem Neuron funktioniert. Ich habe nun einige Kombinationen von 1,3,5,7,9,11 Eingaben aus der Trainingsdatei entfernt, aber ähnliche Kombinationen in der Validierungsdatei belassen. Der Fehler beim Training blieb bei 0 %, aber bei der Validierung stieg er bei diesen neuen Kombinationen auf 50 %. Und das ist schlecht, denn beim Forex hätte der Spread die Einlage ins Minus gebracht. SanSanych hat recht, es geht um Umschulung, ich gebe zu, ich habe mich geirrt.

Das ist offenbar der Grund, warum viele Modelle im Devisenhandel nicht funktionieren, da sie sich nur an bestimmte Kombinationen erinnern, aber mit neuen nicht zurechtkommen.

 
SanSanych Fomenko:

Offenbar bin ich nicht in der Lage zu erklären, was ich will.

1. Könnten Sie bitte das Anfangs- und Enddatum für beide Dateien angeben?

2. Aus der Dateidataset_validate kann nichts entfernt werden, dadiese Datei den eingehenden Takt nach dem Takt simuliert.

Nein, das stimmt, ich verstehe schon. Was Sie sagen, gilt für den Devisenhandel, und ich stimme dem zu. Aber ich sprach von den Dateien von Alexey und dem Training des Modells auf ihnen.

https://c.mql5.com/3/96/dummy_set_features.zip - Ausbildung

https://c.mql5.com/3/96/dummy_set_validation.zip - Validierung

das Ergebnis in den Dateien wird durch die Formel "1-mod(Summe(Eingabe_1 ; Eingabe_3 ; Eingabe_5 ; Eingabe_7 ; Eingabe_9 ; Eingabe_11);2)" definiert

Bitte geben Sie mir einen Link zu den Dateien, die Sie erwähnt haben, und ich werde versuchen, das Neuron mit ihnen zu trainieren.

 
Leute,

Ich habe die Idee richtig verstanden, dass der Wald auf allen Daten übertrainiert ist, obwohl ich die wichtigen Merkmale hervorgehoben habe. Er muss die Daten löschen und erneut trainieren.

Hat der NS ohne Datenbereinigung gut gelernt?

Dankeschön
 
Dr. Trader:

Nein, das stimmt, ich verstehe schon. Was Sie sagen, gilt für den Devisenhandel, und ich stimme dem zu. Aber ich sprach von den Dateien von Alexej und der Modellschulung mit ihnen.

https://c.mql5.com/3/96/dummy_set_features.zip - Ausbildung

https://c.mql5.com/3/96/dummy_set_validation.zip - Validierung

das Ergebnis in den Dateien wird durch die Formel "1-mod(Summe(Eingabe_1 ; Eingabe_3 ; Eingabe_5 ; Eingabe_7 ; Eingabe_9 ; Eingabe_11);2)" definiert

Bitte geben Sie mir einen Link zu den von Ihnen erwähnten Dateien, ich werde versuchen, Neuronics darauf zu trainieren.

Bitte sehr, hier im Archiv.

Dies ist RData. Öffnen Sie R, laden Sie Rattle, und schon sind die Datenrahmen verfügbar

"R1.F1" "R1.F3" "R1.F4" "R1.F5" "R1.F6" - dies ist für das Training, hat verschiedene Zielvariablen, die mit Fi gekennzeichnet sind

"R2.F1" "R2.F3" "R2.F4" "R2.F5" "R2.F6" dient der Prüfung

"Rat_DF1" "Rat_DF2" "Rat_DF3" ist die Datei, die alle Zielvariablen enthält

Dateien:
ALL_cod.zip  3281 kb
 
Alexey Burnakov:
Leute,

Ich habe die Idee richtig verstanden, dass der Wald auf allen Daten übertrainiert ist, obwohl ich die wichtigen Merkmale hervorgehoben habe. Er muss die Daten löschen und erneut trainieren.

Hat der NS ohne Datenbereinigung gut gelernt?

Dankeschön
Ja, bei dieser Aufgabe aus dem ersten Beitrag ist es so. Aber wenn man NS für Devisen anwendet, dann wird NS auf Müll auch übertrainieren und bei neuen Daten schlechter funktionieren, also ist die Auswahl der Eingabedaten auch hier relevant.
 
Dr.Trader:
Ja, bei dieser Aufgabe aus dem ersten Beitrag ist es so. Aber wenn man NS auf Forex anwendet, wird NS auf Müll auch übertrainieren und bei neuen Daten schlechter abschneiden, so dass die Auswahl der Eingabedaten auch hier relevant ist.

d Die Testdaten sind sauber. Es gibt also an allen Standorten ein Muster. Bei realen Daten kommt man nicht umhin, die Trainingsstichprobe in mehrere Teile aufzuteilen und die Leistung auf einer Unterstichprobe oder mehreren Unterstichproben beim Training des Modells zu kontrollieren. Dies ist ausdrücklich eine Faustregel.

Aber um die Retrainierbarkeit von "out of the box"-Modellen wie Random Forests zu testen, war es einfach nützlich zu sehen, dass sie stumpfsinnig Rauschen lernen - bei der Validierung ein völliges Chaos. Allerdings wählen sie die wichtigen Prädiktoren richtig aus.

Aber selbst bei sauberen Daten, bei denen 14 Prädiktoren reines Rauschen sind (zufällig eingegebene Zahlen ohne Zusammenhang und Output), begann der Wald, sie für das Training zu verwenden. und das ist etwas, das ich selbst schon einmal erlebt habe.

Und noch ein weiterer Aspekt, ein sehr wichtiger. Das Testbeispiel enthält voneinander unabhängige Beobachtungen. Die einzelnen Zeilen sind in keiner Weise von den anderen abhängig. In der Realität sind benachbarte Beobachtungen in einer Zeitreihe voneinander abhängig. So sind beispielsweise zwei benachbarte Werte eines winkenden Balls stark korreliert. Und so wird jede - ich betone, JEDE - Methode bei realen Rohdaten versagen. Die richtige Art und Weise, reale Daten für das Training vorzubereiten, besteht idealerweise darin, sie so auszuwählen, dass benachbarte Beobachtungen nicht physisch miteinander verbunden sind. Für Zeitreihen bedeutet dies, dass, wenn Sie Indikatoren mit einem Fenster von 20 nehmen, die benachbarten Beobachtungen in der Trainingsstichprobe mindestens 20 Schritte voneinander entfernt sein sollten. Sie sind also nicht miteinander verbunden. Dann beginnt die Statistik und das richtige Lernen von Mustern zu funktionieren und nicht die zufällige Anhäufung ähnlicher Daten. Ich hoffe, Sie verstehen, was ich meine.

Wenn ich von meiner Geschäftsreise zurückkomme, werde ich auch ein öffentliches Experiment mit echten Devisendaten durchführen. Und vielleicht tun sie es schon gemeinsam mit dem praktischen Ziel, von Mustern zu profitieren.

Alexej

 
Dr. Trader:

Da der NS aber wie eine Blackbox ist, ist es nicht möglich, die Logik der Lösung zu erkennen. Sie können sich die Gewichte ansehen, den durchschnittlichen absoluten Wert für jede Eingabe bestimmen und ein Diagramm zeichnen. Und finden Sie heraus, dass 1, 3, 5, 7, 9, 11 wichtiger sind als der Rest. Aus irgendeinem Grund werden jedoch auch die übrigen Eingaben verwendet; Nullgewichte sind nirgends zu finden. Mit anderen Worten, es ist genau umgekehrt: Erst lernen wir, und dann können wir die wichtigen Inputs identifizieren.

Versuchen Sie eine Art NS-Kontrastierungsalgorithmus. Der Algorithmus ist in der Lage, sowohl die Eingaben (Sie müssen sie nicht manuell durchsuchen) als auch die Verbindungen (und natürlich die Neuronen der verborgenen Schicht) selbst zu überprüfen. Die Ausgabe besteht aus einer kurzen Beschreibung der Logik des Vorgangs.
 
SanSanych Fomenko:

Bitte sehr, hier im Archiv.

Dies ist RData. Öffnen Sie R, laden Sie Rattle und schon sind Datenrahmen verfügbar

"R1.F1" "R1.F3" "R1.F4" "R1.F5" "R1.F6" - dies ist für das Training, hat verschiedene Zielvariablen, die mit Fi gekennzeichnet sind

"R2.F1" "R2.F3" "R2.F4" "R2.F5" "R2.F6" - dies ist für Tests gedacht

"Rat_DF1" "Rat_DF2" "Rat_DF3" ist die Datei, die alle Zielvariablen enthält

Danke, ich habe es versucht. Ich kann sehen, dass Sie viel getan haben, um Prädiktoren auszuwählen, für die Neuronen leicht zu trainieren, und das Ergebnis auch auf dem Prüfdatensatz zu speichern.

Die folgenden Ergebnisse beziehen sich auf die Ausbildung auf R1.F3

1) Es gibt ein lustiges Ergebnis mit Rattle. HH mit der Standardkonfiguration zeigte Zug/Validierung/Testfehler von 30%/29%/33%. Der Fehler bei R2.F3 beträgt 35 %. Aber das alles ist wirklich nur ein Glücksfall, in einer anderen Konfiguration wäre es leicht unter- oder übertrainiert gewesen, hier hatte es einfach Glück.

2) Dann habe ich einen einfachen Ansatz mit unüberwachtem Lernen gewählt, 200 versteckte Neuronen, das Netzwerk wurde trainiert, bis es sich nicht mehr verbesserte. Fehler trainieren/validieren/prüfen/R2.F3 - 2%/30%/27%/45%. Natürlich wird das Netz neu trainiert.

3) Überwachtes Lernen. Das ist etwas anderes als bei Bäumen, aber man sollte dies immer mit einem Neuron tun, um es nicht zu überfordern. Die Idee ist, das Training von Zeit zu Zeit zu unterbrechen und die Ergebnisse von Training/Validierung/Test zu überprüfen. Ich kenne die goldene Regel für die Zusammenstellung von Ergebnissen nicht, aber es ist ein ganz normaler Ansatz, mit einem Trainingsdatensatz zu trainieren, dann nach Fehlern in den Validierungs- und Testdatensätzen zu suchen und das Training zu beenden, wenn die Fehler in den Validierungs-/Testdatensätzen nicht mehr abnehmen. Dies bietet eine gewisse Garantie gegen Übertraining. R2.F3 wird während des gesamten Prozesses als nicht verfügbar betrachtet, und der Test wird erst nach dem Ende der Ausbildung durchgeführt. In diesem Fall betragen die Fehler von Train/Validate/Testing/R2.F3 27%/30%/31%/37%. Auch hier gibt es Übertraining, aber nicht viel. Sie hätten den Lernprozess frühzeitig stoppen können, nachdem der Zugfehler merklich kleiner geworden ist als der Validierungs-/Testfehler, aber das ist reine Spekulation... geholfen haben könnte oder auch nicht.

Die Zielvariable "R1.F1" hat drei Werte, Rattle kann das nicht mit Neuronics machen und man muss seinen eigenen Code in R schreiben, ich habe diesen Datensatz übersprungen.

"R1.F4" "R1.F5" "R1.F6" ergab für alle 4 Fehler in Rattle neuronka annähernd die gleichen Ergebnisse, ich denke, ein angemessener Ansatz mit neuronka wird auch annähernd die gleichen Ergebnisse liefern, ich habe mich nicht weiter mit ihnen beschäftigt.

 

Über die Lehrmethode.

Hier habe ich eine Standardmethode beschrieben, die in der Regel anwendbar ist und gute Ergebnisse liefert: https://www.mql5.com/ru/blogs/post/661499

Lassen Sie mich kurz erklären: Teilen Sie alle Daten in 2 Teile - Training und Validierung. Die Validierung sollte so groß sein, wie Sie glauben, dass Sie sie brauchen. Ich habe Folgendes getan. Ich nehme 15 Jahre lang einminütige Zitate. Ich berechne die Ein- und Ausstiege, ich dünne die Daten aus, so dass die Beobachtungen physisch unterschiedlich sind (ich nehme sie über n Balken, wobei n nicht kleiner ist als das größte Fenster, das im Indikator verwendet wird, und nicht kleiner als die weiteste Verzögerung). Überlegen Sie, warum dies richtig ist. Die Daten werden voneinander unabhängig.

Als Nächstes nehme ich den Ausbildungsteil (den größten) - 10 Jahre am weitesten in der Vergangenheit. Ich erstelle Zeilenindizes für die Kreuzvalidierung. Das heißt, ich teile die Daten in 5 gleiche Abschnitte, die streng nach Datum getrennt sind. Während der Kreuzvalidierung durchläuft das Modell Trainingsparameter wie Tiefe, Anzahl der Iterationen usw., trainiert auf vier Spot-Trainingsblöcken und misst den Fehler auf einem Fünftel des Trainingsblocks. Dies geschieht 5 Mal, wobei jedes Mal ein anderes der fünf Testteile ausgewählt wird. Es erhält fünf Fehlermetriken (für einen Satz von Trainingsparametern). Sie werden gemittelt und als Testfehlerwert für die nicht am Training beteiligten Daten angegeben.

Das Modell führt diese Arbeit dann n * m * s * d Mal aus, wobei n,m,s,d die Trainingsparameter sind. Dies ist ein Brute-Force-Verfahren über das Raster. Sie kann Hunderte von Iterationen erreichen. Sie können eine Zufallssuche oder eine genetische Suche durchführen. Ez yu vish.

Dann erhalten wir eine Tabelle mit Kreuzvalidierungsfehlermetriken, die dem Satz von Lernparametern entsprechen. Wir sollten einfach das beste Ergebnis und diese Parameter nehmen. Und dann trainieren Sie die gesamte Trainingsstichprobe mit diesen Parametern. Für NS wird auch eine Begrenzung der Anzahl der Iterationen festgelegt, damit es nicht zu einem Übertraining kommt.

Und am Ende wird das Modell anhand von 5 Jahren an Angeboten validiert, um die Leistung außerhalb der Stichprobe zu bewerten.

Alles in allem ist die Kreuzvalidierung bisher die beste Wahl für ein effektives Modelltraining. Ich rate Ihnen, es auszuprobieren.

Das Paket in R heißt caret.

Wir sehen uns bald wieder.

Alexej

СОПРОВОЖДЕНИЕ ЭКСПЕРИМЕНТА ПО АНАЛИЗУ ДАННЫХ ФОРЕКСА: первое серьезное обучение модели и результаты
СОПРОВОЖДЕНИЕ ЭКСПЕРИМЕНТА ПО АНАЛИЗУ ДАННЫХ ФОРЕКСА: первое серьезное обучение модели и результаты
  • 2016.02.27
  • Alexey Burnakov
  • www.mql5.com
Начало по ссылкам: https://www.mql5.com/ru/blogs/post/659572 https://www.mql5.com/ru/blogs/post/659929 https://www.mql5.com/ru/blogs/post/660386 https://www.mql5.com/ru/blogs/post/661062