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

 
Dr. Trader:

können die Tabellen mit der Funktion rbind() zusammengefügt werden.
MLP1 <- rbind(Train1, Test)

Was ist Test(Train2)? Und warum sollten die Trainingstabelle und die Testtabelle kombiniert werden? Der Test sollte separat sein, um das trainierte Modell daran zu testen.

Es wird nicht alles so einfach und schnell gehen, wie Sie es sich wünschen. In Reshetovs Modell kann man einfach die Daten einspeisen, und das Modell selbst wird die Prädiktoren aussieben, die Gewichte und die Anzahl der Neuronen bestimmen und so weiter. Aber man kann das nicht mit einem normalen Neuron machen, man muss die Parameter für das Neuron durch Kreuzvalidierung auswählen, zum Beispiel wie in dem Beispiel, das ich heute hier geschrieben habe, oder wie in den Artikeln von Vladimir Perervenko.


Lesen Sie noch einmal, was ich dort geschrieben habe -https://www.mql5.com/ru/forum/86386/page753#comment_6821981
Fügen Sie einfach Ihre Daten wie beschrieben in diesen Code ein und führen Sie ihn aus. Wenn alle Prädiktoren einzeln genommen und nicht eliminiert werden, dann wird es beim ersten Mal wahrscheinlich zu schlecht sein. Nachdem Sie den Code ausgeführt haben, führen Sie zusätzlich den Befehlmax(gaResult@fitness) aus. Dieser zeigt den R2-Wert des besten durch die Genetik gefundenen Modells an. Wenn die Schätzung nahe bei 1 oder etwas darunter liegt, ist das gut, wenn sie nahe bei 0 oder sogar negativ ist, ist das schlecht.

Geben Sie dann inPREDICTOR_COLUMNS die genaue Anzahl der Spalten an, die Sie als gut identifiziert haben, und führen Sie den Code erneut aus, damit das Modell nur auf diese Prädiktoren trainiert wird. Idealerweise sollte die beste Modellbewertung durch die Genetik nahe bei 1 liegen und die Genauigkeit in der Trainings- und Testtabelle sollte 1,00 betragen.

Die Testtabelle sollte zeitlich genau nach den Trainingsdaten liegen, so als ob das Modell bereits auf dem Markt gehandelt würde.

Wenn mit diesem Code nichts Gutes passiert (auch nicht mitKFOLDS=10) - dann ist er nicht gut. Wenn es funktioniert, dann gibt es eine gute Alternative zu Reshetovs Modell und wir können uns weiter mit dem Code beschäftigen und das Modell auf mql portieren.

Tatsächlich gibt es nur zwei Abschnitte Train1 und Test1

NetzwerkA lernt von Train1 und wird von Test1 abgetastet

GridB lernt von Test1 und wird auf Train1 abgetastet

Wenn wir die beiden Grundstücke addieren. NetzwerkA lernt Test1, NetzwerkB lernt Trine1, wir erhalten die Lernergebnisse für die gesamte Lernkurve, aber diese Kurve wird eine Testkurve sein. Das ist der Punkt, den Reshetov anspricht. Ich weiß es nicht, wie Sie vorgeschlagen haben, schaue ich bei Ihnen nach..... kFold teilt die Parzellen irgendwie.... nicht klar.....

 

Ich möchte das Ergebnis von Reschetow nicht wiederholen, sondern die KI so organisieren wie er. Die Art und Weise, wie er den Ausschuss trainiert. Es ist klar, dass die Ausbildung selbst wird bereits Mittel zur Verfügung, aber die Organisation, kann eine wichtige Rolle spielen ....

Ich werde versuchen, Ihr Skript auf meine Daten anzuwenden, mal sehen, was dabei herauskommt...

 

Verstehe, das ist fast das Gleiche. In Reshetovs Beispiel werden die Zeilen einzeln genommen (Training auf den geraden Zeilen, Test auf den ungeraden Zeilen), aber in meinem Beispiel werden die Zeilen in Gruppen in einer Reihe aufgeteilt (Training auf den Zeilen 1-100, Test auf den Zeilen 101-200). Dies ist für Forex besser, da so zumindest überprüft werden kann, ob das Modell in einem anderen, ihm unbekannten Zeitintervall funktioniert.

Eine Partitionierung nach Reshetov kann auch durchgeführt werden, dann in der Funktionelemnn_kfold erase

split2 <- function(x,n) split(x, cut(seq_along(x), n, labels = FALSE)) #функция  которая поделит строки таблицы на число кусков согласно KFOLDS
folds <- split2(1:nrow(x), KFOLDS) #номера  строк для обучения в каждом фолде

und fügen stattdessen

folds <- list()
folds[[1]] <- c(which(y==1)[c(T,F)], which(y==0)[c(T,F)])
folds[[2]] <- c(which(y==1)[c(F,T)], which(y==0)[c(F,T)])

und vergewissern Sie sich, dass Sie die Anzahl der Faltungen auf 2 -KFOLDS=2- ändern, da sonst einige Fehler auftreten

 

Wir müssen nur verstehen, dass "Training" und "Test" innerhalb der Kreuzvalidierungs-Quadrate verschachtelte Prüfungen sind. Es gibt eine Trainingstabelle, die in mehrere Teile unterteilt ist, und diese Teile sind Training und Test, und Modelle in der Schleife lernen von einem Teil und sagen andere voraus, um sicherzustellen, dass das Modell in der Lage ist, etwas mit diesen Parametern auf neuen Daten zu lernen und vorauszusagen.

Und es gibt eine separate Testtabelle, die an dieser Kreuzvalidierung nicht mehr beteiligt ist. Es wird einfach gewartet, bis das Modell vollständig trainiert ist, um es zu überprüfen, wie ein Test in einem Walk-Forward, der den realen Handel simuliert.
Und wenn das Roll-Forward-Verfahren bei jedem Test normale Ergebnisse liefert, wenn die Trainings- und Testfenster zeitlich verschoben sind, dann wird das zuletzt trainierte Modell nicht auf einem separaten Testtisch getestet, sondern geht an das Terminal, um gehandelt zu werden.

 
Richtig, eine Kontrollprobe, die eine OOS-Stelle sein kann. Geschult, geprüft. Dem Handel zugeführt. Ich persönlich denke so......
 
Mihail Marchukajtes:
Richtig, eine Kontrollprobe, die ein OOS-Abschnitt sein kann. Geschult, geprüft. Sie wurden ausgebildet, getestet und dann in den Handel geschickt. Ich persönlich denke so......

Dies wirft jedoch die Frage auf. Wie wählt man ein Modell ohne Kontrolldiagramm? Trainiert, die Ergebnisse der Kreuzvalidierung erhalten, gesagt, dass dies das Modell ist, das punkten wird, es auf die reale!!!!! gestellt

Normalerweise mache ich ein Testmuster an einem Tag, es sind 3-4 Signale..... wenn man bedenkt, dass es zwei Wochen dauert, bis es funktioniert, kein großer Verlust......

 
Ich habe Ihr Skript mit den oben genannten Änderungen ausgeführt. Es gibt keine Fehlermeldungen und trainiert sogar etwas, aber es zeigt während des Trainings keine Graphen an. Wie auch immer, ich sehe das Ergebnis in Form eines Fehlers. Ich werde meine Modelle neu erstellen und dann zu diesem Skript zurückkehren. Sobald die Trainingssätze gebildet sind, werden wir dort weiter....
 

TO: Dr. Trader.

Ich habe mir nicht die Mühe gemacht, das Drehbuch im Detail zu analysieren, Sie schreiben es sehr "zackig". Nun, jeder hat seinen eigenen Stil. Aber es gibt ein paar wichtige Punkte. ELM verfügt über eine Reihe von Funktionen in der Anwendung:

  • je mehr Beispiele man ELM beim Training zuführt, desto unempfindlicher ist er gegenüber Rauschen (erfahrungsgemäß mindestens 2000)
  • in einem Ensemble neuronaler ELM-Netze muss man mehr als 100 haben, um ein vernünftiges Ergebnis zu erhalten (erfahrungsgemäß ist es besser, einige Redundanzen zu nehmen und sie später auszusieben)
  • Die von Ihnen vorgenommene Zusammenführung durch einfache Abstimmung führt zu einem schlechteren Ergebnis als die Mittelwertbildung. Dies liegt jedoch im Ermessen des Entwicklers.
  • seet.seed bietet nicht die notwendige Wiederholbarkeit und Vielfalt bei der Optimierung von Hyperparametern. Schauen Sie sich die Kommentare zu dem Artikel an. Dort testete Elibrarius diese Idee durch ein Experiment. Nur wenn man den RNG bei jeder Initialisierung eines neuronalen Netzes in einen kontrollierten Zustand zwingt, erhält man echte Optimierungsergebnisse. Für mich ist es besser, die Bayes'sche Optimierung zu verwenden. Bietet eine gute Auswahl an Hyperparametern.
Viel Glück!

 

Danke für die Kommentare, ich werde sie im Hinterkopf behalten.

Ich habe dort am Ende des Textes einen Link zu Ihrem letzten Artikel eingefügt, wer sich ernsthaft mit elmNN auseinandersetzen möchte, sollte besser gleich den Artikel lesen.


Vladimir Perervenko:

Die von Ihnen verwendete Zusammenführung durch einfache Abstimmung führt zu schlechteren Ergebnissen als die Mittelwertbildung. Es liegt jedoch im Ermessen des Entwicklers.

Es gibt eigentlich zwei Arten von Ensemble-Vorhersagen:

1) die Funktion elemnn_kfold_predict() - das arithmetische Mittel der Regressionsergebnisse der einzelnen Modelle wird berücksichtigt

2) function elemnn_kfold_predict_reshetovstyle() - Ich habe dies für Mikhail für seine Experimente hinzugefügt, diese Art der Kombination von Ensemble-Ergebnissen wird in der Reshetov-Neuronik verwendet. Nur Klassifizierung. Es vergleicht die Ergebnisse aller Modelle und gibt nur dann eine Antwort mit einer bestimmten Klasse, wenn alle Modelle dieselbe Vorhersage getroffen haben. Wenn mindestens ein Modell eine andere Vorhersage liefert als die anderen, gibt die Funktion eine Vorhersage von "weiß nicht" zurück.

 
Haben Sie schon ein Ergebnis? Wo ist der Berater?