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

 
Yuri, ich konnte ein vmr-Modell trainieren, aber ich kann keine neuen Daten darauf vorhersagen, können Sie mir sagen, was falsch ist? Ich wähle das Menü Modell laden, wähle die Datei train.vmr aus dem Anhang und klicke dann auf Modell verwenden. Ich sehe den Text "Geben Sie Daten ein und drücken Sie "OK" im Protokoll. Aber das war's, egal welche Daten ich eingebe, ich sehe immer noch eine graue, inaktive Ok-Schaltfläche und bekomme keine Antwort. Die Dateien "train.csv" und "test.csv" befinden sich ebenfalls in atache, es sind die Dateien, die Sie zuvor gepostet haben.
Dateien:
train.zip  38 kb
 
Dr. Trader:
Yuri, ich war in der Lage, ein vmr-Modell zu trainieren, aber ich kann nicht vorhersagen, neue Daten auf sie, können Sie mir bitte sagen, was falsch ist? Ich wähle das Menü Modell laden, wähle die Datei train.vmr aus der Anlage und klicke dann auf Modell verwenden. Ich sehe den Text "Geben Sie Daten ein und drücken Sie "OK" im Protokoll. Aber das war's, egal welche Daten ich eingebe, ich sehe immer noch eine graue, inaktive Ok-Schaltfläche und bekomme keine Antwort. Die Dateien train.csv und test.csv sind ebenfalls beigefügt, es sind die, die Sie zuvor gepostet haben.

Sie müssen etwas nicht-numerisches eingegeben haben? Dies löst einen Exception-Handler aus und deaktiviert die Schaltfläche OK. In diesem Fall müssen Sie jPrediction neu starten.

Ich werde mich in naher Zukunft damit befassen, um zumindest eine Art Warnmeldung auszugeben, wenn ein Benutzer nicht-numerische Daten eingegeben hat.

P/S Ich habe es bereits korrigiert.

Geben Sie zum Beispiel das Symbol "z" anstelle einer Zahl ein. Dies wird zu einer Fehlermeldung führen:

Um die OK-Taste jetzt zu aktivieren, wählen Sie den Menüpunkt Datei>Modell verwenden:


Ich habe die korrigierte Version auf meine Website hochgeladen

 

Ich habe es herausgefunden, der Fehler lag im falschen Datenformat. Ich habe die Daten so formatiert, wie Sie es in der PDF-Datei getan haben - ich habe eine zweite Zeile mit einer Erklärung hinzugefügt, die erste Spalte mit Indizes, und den Spaltennamen aus dem Prädiktor gelöscht. Alles funktioniert. Das Modell wird in beiden Fällen trainiert, sowohl mit den Originaldaten als auch mit den formatierten Daten. Die Vorhersage funktioniert jedoch nur, wenn speziell formatierte Daten zum Training eingespeist werden.

Aber leider hat Ihr Modell den Test mit Ihren eigenen Daten nicht bestanden. Sie haben bereits train.csv- und test.csv-Dateien gepostet und eine gute Vorhersageleistung erzielt. Ich habe es überprüft, der Vorhersagefehler beträgt 50 %, keine gute Leistung.

Schritte für den Test:

1) Formatieren Sie die Datei train.csv wie oben beschrieben. Dann teilen Sie die Datei physisch in zwei Teile auf - train_part1.csv und train_part2.csv. Die zweite Datei enthält die letzten 20 Zeilen von train.csv. Die erste Datei enthält alles außer den letzten 20 Zeilen, so dass sich die Daten in den beiden Dateien nicht überschneiden.

2) Trainieren Sie das Modell anhand der Datei train_part1.csv und wechseln Sie in den Prognosemodus. Geben Sie abwechselnd Zeilen aus train_part2.csv für die Vorhersage ein. Ich habe nur in 9 von 20 Fällen die richtige Antwort gefunden, kein Wunder.

Ich verstehe nicht, warum Ihr Modell selbst die ursprüngliche Trainingsdatei in zwei Teile für Training und Validierung unterteilt, dann einen Out-of-Sample-Test durchführt und am Ende eine Vorhersagegenauigkeit von 100 erreicht? Und wenn Sie die Trainingsdatei physisch aufteilen und den Test außerhalb der Stichprobe manuell durchführen, ist die Vorhersage dann nicht besser als das Werfen einer Münze? Wenn ich beliebige Proben aus der Trainingsstichprobe für die Vorhersage verwende, funktioniert die Vorhersage korrekt, d. h. die Vorhersagefunktion scheint in Ordnung zu sein. Das ist alles sehr schlecht und falsch, Sie haben einige schwere Fehler in Ihrem Code.

Dateien:
vmr_test.zip  44 kb
 
SanSanych Fomenko:

Nur eine sehr oberflächliche Vertrautheit mit R würde es einem erlauben, von "Gäulen" zu sprechen.

Natürlich setzen wir R ein und sehen einen Zeichenketteninterpreter. Wenn Sie tiefer gehen, können Sie den Bytecode sehen, aber er löst keines der Probleme des Interpreters im Hinblick auf die Effizienz. Es gibt nicht einmal etwas zu diskutieren - nörgeln.

Aber wenn man sich ein wenig mit R-Paketen beschäftigt, stellt man schnell fest, dass der R-Code auf anderen Code verweist. Und wenn Sie anfangen zu recherchieren, werden Sie sehen, dass R für rechenintensive Algorithmen immer Pakete von Drittanbietern verwendet, die nach dem Prinzip der maximalen Effizienz ausgewählt wurden. Dies sind in der Regel C- oder Fortran-Bibliotheken.

Oder, zum Beispiel, Matrixoperationen. In Anbetracht der Tatsache, dass es in R keinen Begriff für Skalare gibt und alles mit Vektoren beginnt und die Matrixarithmetik für R völlig natürlich ist, ist die Frage der Verwendung einer geeigneten Bibliothek, die NICHT in R geschrieben ist, eine grundsätzliche Frage. Die Intel Math Kernel Library wird verwendet.

Hinzu kommt, dass die Parallelisierung von Berechnungen nicht nur auf allen Kernen des eigenen Rechners, sondern auch auf benachbarten Rechnern ein gängiger Vorgang in R ist.

Es ist also eine große Frage, was "Nörgeln" ist und was nicht.

PS.

Sie brauchen nichts nach R zu portieren, Sie müssen nur die Mathematik lernen. R hat alles, was Sie brauchen, und noch viel mehr als das.

Ich stimme mit SanSanych überein. Alles, was Sie für Ihre Ideen brauchen, ist bereits in R/ vorhanden.

Die arrogante Bemerkung von Reshetov ist nicht überraschend. Es ist eine solche Weltanschauung.

Es gibt keinen Grund, Ihre Meinung zu ändern. Das macht keinen Sinn.

 
Dr. Trader:

Ich verstehe nicht, warum Ihr Modell selbst die ursprüngliche Trainingsdatei in zwei Teile für Training und Validierung unterteilt, dann einen Out-of-Sample-Test durchführt und am Ende eine Vorhersagegenauigkeit von 100 erreicht? Und wenn Sie die Trainingsdatei physisch aufteilen und den Test außerhalb der Stichprobe manuell durchführen, ist die Vorhersage dann nicht besser als das Werfen einer Münze? Wenn ich beliebige Proben aus der Trainingsstichprobe für die Vorhersage verwende, funktioniert die Vorhersage korrekt, d. h. die Vorhersagefunktion scheint in Ordnung zu sein. Das ist alles sehr schlecht und falsch, Sie haben einige schwere Fehler in Ihrem Code.

Sie haben Recht, es gibt einen Fehler im Code. Ich werde es korrigieren.
 
Vladimir Perervenko:

Ich unterstütze SanSanych. Alles, was Sie für Ihre Ideen brauchen, ist bereits in der R/.

Ich werde hier argumentieren, wenn ich darf, nag ist in Bezug auf die Geschwindigkeit gemeint und ich stimme absolut mit Yuri überein...

Wahrscheinlich kann man für fast jedes Problem eine fertige Lösung für R finden, aber manchmal kann man nicht auf der Stelle treten.

Ich erinnere mich, dass ich eine sehr schwierige Suche nach vielen Parametern durch die Korrelationsfunktion durchführte, zuerst benutzte ich eine eingebaute R-Funktion (übrigens in C++ geschrieben), aber weil sie mit verschiedenen Methoden überladen war, dauerte die Berechnung einer Runde meines Zyklus etwa 3,9 Minuten oder 230 Sekunden, diese Zeit war nicht akzeptabel, der zweite Schritt war, meine eigene Funktion in R ohne alles andere zu schreiben, meine Funktion funktionierte mit 30 Sekunden, aber sie befriedigte mich nicht, weil R meine erste und einzige Sprache war, ich bat meinen Freund, für mich eine Funktion corr zu schreiben Vergleichen wir also

Die Standardkorrelationsfunktion in R beträgt 230 Sekunden.

selbst geschriebene R-Korrelationsfunktion - 30 Sek.

Funktion geschrieben in C++ - 0,33 sec

Also ja, Yuri hat recht, R ist ein Trottel in einem Kontext, in dem er es meinte, aber dieses Problem kann gelöst werden, und was die Bequemlichkeit und die Geschwindigkeit beim Schreiben von Code angeht, denke ich, dass R weit von allen Sprachen entfernt ist, da ich nichts schreiben muss, alles ist vorgefertigt, deshalb mag ich R ...

 
mytarmailS:

Ich werde hier argumentieren, wenn ich darf, ist die Nervensäge in Bezug auf die Geschwindigkeit gemeint und ich stimme Yuri absolut zu...

Für fast jedes Problem lässt sich eine fertige Lösung finden, aber manchmal muss es eben schnell gehen.

Ich erinnere mich, dass ich eine sehr schwierige Suche nach vielen Parametern durch die Korrelationsfunktion durchführte, zuerst benutzte ich eine eingebaute R-Funktion (übrigens in C++ geschrieben), aber weil sie mit verschiedenen Methoden überladen war, dauerte die Berechnung einer Runde meines Zyklus etwa 3,9 Minuten oder 230 Sekunden, diese Zeit war nicht akzeptabel, der zweite Schritt war, meine eigene Funktion in R ohne alles andere zu schreiben, meine Funktion funktionierte mit 30 Sekunden, aber sie befriedigte mich nicht, weil R meine erste und einzige Sprache war, ich bat meinen Freund, für mich eine Funktion corr zu schreiben Vergleichen wir also

Die Standardkorrelationsfunktion in R beträgt 230 Sekunden.

selbst geschriebene R-Korrelationsfunktion - 30 Sek.

Funktion geschrieben in C++ - 0,33 sec

Also ja, Juri hat Recht, R ist eine Nervensäge in einem Kontext, in dem er es meint, aber dieses Problem ist gelöst, und was die Bequemlichkeit und Geschwindigkeit der Programmierung angeht, denke ich, dass R weit von allen Sprachen entfernt ist, da ich fast nichts schreiben muss, alles ist vorgefertigt, deshalb mag ich R ...

Was hat das nun mit R zu tun?

Auch hier bietet R alles, was Sie zur Umsetzung Ihrer Ideen brauchen, einschließlich der Geschwindigkeit.

Hinzu kommt, dass nicht jeder und nicht alles weiß, wie man sie benutzt.

Dies ist jedoch kein Problem der Sprache.

Übrigens ist die Bequemlichkeit und Einfachheit der Inline-Funktionen in Srr erstaunlich.

Viel Glück!

 
mytarmailS:

Ich werde hier argumentieren, wenn ich darf, ist die Nervensäge in Bezug auf die Geschwindigkeit gemeint und ich stimme Yuri absolut zu...

Für fast jedes Problem lässt sich eine fertige Lösung finden, aber manchmal muss es eben schnell gehen.

Ich erinnere mich, dass ich eine sehr schwierige Suche nach vielen Parametern durch die Korrelationsfunktion durchführte, zuerst benutzte ich eine eingebaute R-Funktion (übrigens in C++ geschrieben), aber weil sie mit verschiedenen Methoden überladen war, dauerte die Berechnung einer Runde meines Zyklus etwa 3,9 Minuten oder 230 Sekunden, diese Zeit war nicht akzeptabel, der zweite Schritt war, meine eigene Funktion in R ohne alles andere zu schreiben, meine Funktion funktionierte mit 30 Sekunden, aber sie befriedigte mich nicht, weil R meine erste und einzige Sprache war, ich bat meinen Freund, für mich eine Funktion corr zu schreiben Vergleichen wir also

Die Standardkorrelationsfunktion in R beträgt 230 Sekunden.

selbst geschriebene R-Korrelationsfunktion - 30 Sek.

Funktion geschrieben in C++ - 0,33 sec

Also ja, Juri hat Recht, R ist ein Trottel in einem Kontext, wo er meint, aber dieses Problem ist gelöst, und was die Bequemlichkeit und Geschwindigkeit der Programmierung betrifft, denke ich, dass R weit weg von allen Sprachen ist, da ich fast nichts schreiben muss, alles ist vorgefertigt, deshalb mag ich R ...

Wir sollten allgemeine Fragen nicht durch ein spezielles Beispiel ersetzen.

Wenn wir ganz allgemein über die Effizienz von Code im R-Programmiersystem sprechen, habe ich über die Grundlagen der Effizienz geschrieben. Im Gegensatz zu den meisten Programmiersystemen werden rechenintensive Algorithmen in R indirekt verwendet und werden bei der Programmierung im Allgemeinen am effizientesten innerhalb einiger Inhaltsfunktionen eingesetzt, obwohl es auch die Möglichkeit gibt, sie direkt zu verwenden, z.B. bei der Optimierung oder GA.

Das deutlichste Beispiel für diese Effizienz sind Matrixoperationen, die zu den rechenintensivsten Operationen gehören. Ein Programmierer ist sich der verwendeten Bibliothek möglicherweise gar nicht bewusst, weil eine Matrixoperation nur eine einfache Codezeile ist.

Außerdem habe ich in meinem Beitrag über die Effizienz nicht geschrieben, worüber Sie geschrieben haben. Es ist die Fähigkeit, ein kleines Stück Code zu schreiben, mit der Betonung, dass die Struktur von R so ist, dass diese Einfügung eine organische Ergänzung zum Hauptcode sein wird. Und das von Ihnen genannte Beispiel ist sehr typisch für R.

 
OK, ich schlage vor, das Thema Effizienz R zu schließen, denn wir fangen bereits an, das Offensichtliche zu wiederholen, und die Bedeutung ist "Öl, der Himmel ist blau, das Gras ist grün".
 

Hallo!

Ich habe ein Paket mit rekurrenten neuronalen Netzen gefunden https://cran.r-project.org/web/packages/rnn/rnn.pdf, es war interessant, es an meinen Daten zu testen (vielleicht ist ja noch jemand daran interessiert ;) ) Aber ich stieß auf etwas, das ich noch nie konfrontiert, da die rekurrente Netzwerk, die Daten zu ihm in einer besonderen Art und Weise in Form eines 3D-Array zugeführt wird, trotz der Tatsache, dass es ein Beispiel, kann ich immer noch nicht verstehen, wie es funktioniert

wie der Code in der "X"-Variablen aussehen sollte, wenn ich nicht 2 Prädiktoren, sondern 100 habe, hier ein Teil des Beispiels:

#  create training numbers
X1 = sample(0:127, 7000, replace=TRUE)
X2 = sample(0:127, 7000, replace=TRUE)
#  create training response numbers
Y <- X1 + X2
#  convert to binary
X1 <- int2bin(X1)
X2 <- int2bin(X2)
Y <- int2bin(Y)
#  Create 3 d array: dim 1: samples; dim 2: time; dim 3: variables.
X <- array( c(X1,X2), dim=c(dim(X1),2) )