Neuronale Netze - Seite 14

 
Ja, Training vs. Vorhersage. Ich habe ein neues Netzwerk mit den ersten 6-7 Jahren an Daten erstellt, die zum Trainieren, Testen und Kreuzvalidieren verwendet wurden. Dann fütterte ich es mit den verbleibenden 3 Jahren an Daten als Test ohne Lernen, um einen Live-Test zu simulieren. Die Trainingsregressionslinie hatte eine Steigung von 0,99995, und als ich sie mit etwa 3 Jahren zuvor ungesehener Daten fütterte, sank sie auf 0,9995. Ich bin mir nicht sicher, wie ich das interpretieren soll. Es scheint mir etwas zu genau für etwas, das ich in weniger als einer Stunde zusammengestellt habe.

Ich werde es Ihnen anhand eines Beispiels erklären.

Nehmen wir an, Sie wollen eine Variable vorhersagen, die Werte zwischen 100 und 250 annehmen kann (wie GBPJPY). Sie möchten sehr kleine Zeitschritte im Vergleich zu den Trainingsdaten vorhersagen (z. B. H1 oder H4). Für einen bestimmten Schritt ist der gewünschte Wert, sagen wir, 174,850, und die NN-Ausgabe ist 176,350. Der Fehler ist sehr gering (ca. 0,8 %), aber in Bezug auf den Devisenmarkt ist der Fehler groß - 150 Pips.

Es ist viel einfacher, normale oder logarithmische Renditen vorherzusagen. Selbst wenn Sie einen Fehler machen, ist die Ausgabe wahrscheinlich immer noch nützlich /wenn Sie einen Preisanstieg von 20 % vorhersagen und es sind tatsächlich 10 %, auch wenn der Fehler 50 % beträgt, ist das Ergebnis immer noch sehr gut/.

Wenn Sie die erste Population nach dem Zufallsprinzip erzeugen, besteht dann nicht die Möglichkeit, dass Sie eine Population erzeugen, in der kein Programm das Problem löst?

Das ist unmöglich.

Selbst wenn das NN eine sehr schlechte Vorhersage macht, ist es immer noch eine Lösung.

Mehr als der durchschnittliche Desktop-Computer bewältigen könnte.

Sie können einen Desktop-Computer verwenden. Die heutigen Computer sind viel besser als die, mit denen ich angefangen habe.

 

mrwobbles,

Würden Sie so freundlich sein und uns Ihre Inputs und Outputs für Ihre NN-Ergebnisse mitteilen? Ich würde sie gerne durch NeuroShell laufen lassen, um zu sehen, ob ich ein R-Korrelationsniveau mit der gleichen Enge erzeugen kann. Vielen Dank im Voraus.

 
Kazam:
Ich werde es Ihnen anhand eines Beispiels erklären.

Nehmen wir an, Sie wollen eine Variable vorhersagen, die Werte zwischen 100 und 250 annehmen kann (wie GBPJPY). Sie möchten sehr kleine Zeitschritte im Vergleich zu den Trainingsdaten vorhersagen (z. B. H1 oder H4). Für einen Schritt ist der gewünschte Wert, sagen wir, 174,850 und die NN-Ausgabe ist 176,350. Der Fehler ist sehr klein (ca. 0,8 %), aber in Bezug auf den Forex ist der Fehler groß - 150 Pips.

Es ist viel einfacher, normale oder logarithmische Renditen vorherzusagen. Selbst wenn Sie einen Fehler machen, ist die Ausgabe wahrscheinlich immer noch nützlich /wenn Sie einen Preisanstieg von 20 % vorhersagen, und es sind tatsächlich 10 %, obwohl der Fehler 50 % beträgt, ist das Ergebnis immer noch sehr gut/.

Ja, aber ich spreche von Fehlern, die um eine Größenordnung kleiner sind als das. Der durchschnittliche Fehler in Pips des von mir trainierten Netzwerks liegt bei etwa 10-20, was sich einem akzeptablen Niveau nähert. Dennoch gibt es einige anomale Ergebnisse, einige von über 100 Pips, was natürlich inakzeptabel ist.

Das ist unmöglich.

Selbst wenn das NN eine sehr schlechte Vorhersage liefert, ist es immer noch eine Lösung.

Ja, ich denke, man könnte sie Lösungen nennen, aber würde der Start mit einer zufälligen Population nicht zu einer längeren Konvergenzzeit führen? In diesem Fall würde das Starten mit einer Population von vortrainierten Netzen sicherlich die Konvergenz des Netzes beschleunigen und hoffentlich zu genaueren Ergebnissen führen.

 
Ja, aber ich spreche von Fehlern, die um eine Größenordnung kleiner sind als das. Der durchschnittliche Fehler in Pips des Netzwerks, das ich trainiert habe, liegt bei 10-20, was sich einem akzeptablen Niveau nähert. Dennoch gibt es einige anomale Ergebnisse, einige von über 100 Pips, was natürlich inakzeptabel ist.

Aber Sie sehen sich ja immer noch die Trainingsdaten an. Ich habe ein schnelles Beispiel gemacht - siehe das Bild unten. Die Fehlermessungen sind gering, der Korrelationskoeffizient ist sehr hoch, aber sehen Sie sich an, was passiert, wenn Sie versuchen, die nächsten 10 Schritte vorherzusagen.

Ja, ich denke, man könnte sie Lösungen nennen, aber würde der Start mit einer zufälligen Population nicht zu einer längeren Konvergenzzeit führen? In diesem Fall würde das Starten mit einer Population von vortrainierten Netzen die Konvergenz des Netzes sicherlich beschleunigen und hoffentlich zu genaueren Ergebnissen führen.

Zufälligkeit ist der Schlüssel

Mit vielen Zufallsnetzen haben Sie eine größere Chance, am Ende die bestmögliche Lösung zu finden. Sehen Sie sich das zweite Bild an. Wenn Sie eine Vorauswahl von NNs treffen, bleiben Sie möglicherweise im lokalen Optimum stecken, aber wenn Sie zufällige NNs verwenden, haben Sie eine größere Chance, das globale Optimum zu finden.

Natürlich gibt es Möglichkeiten, das Problem des Hängenbleibens im lokalen Optimum zu umgehen.

Dateien:
 

Dieser Gedanke ist mir auch schon durch den Kopf gegangen. Ich meine, wenn die Population der vortrainierten NNs zu klein ist oder nicht genügend genetische Varianz aufweist, könnten einige Lösungen nicht berücksichtigt werden. Wie Sie schon sagten, besteht immer die Möglichkeit, dass 12 NNs ausgewählt werden, die alle an verschiedenen lokalen Minima festhängen, und das wäre nicht gut. Oder noch schlimmer: 12 NNs, die alle am gleichen lokalen Minimum festhängen. Obwohl man immer einige zufällige Genmutationen kodieren könnte, um zu versuchen, den genetischen Bestand zu erhöhen, etwa alle 10 Generationen. Wenn du mit einer völlig zufälligen Struktur beginnst, ist sichergestellt, dass die meisten Möglichkeiten berücksichtigt werden.

Ah, ich verstehe, okay, ich habe gerade herausgefunden, wie man das Netz nach dem Training benutzt, anscheinend mit der Simulationsfunktion... oh, die Freuden der Hilfedateien Sie müssen mir meine Unwissenheit verzeihen, ich bin ziemlich neu in der Arbeit mit NNs. Ich wäre enttäuscht gewesen, wenn ich es so einfach gelöst hätte. Das ist es, was ich in den Sommerferien machen werde. Nun, das und arbeiten

Edit: Ich habe das Netzwerk mit den Daten der ersten 7 Jahre trainiert und dann seine Leistung mit den Daten der letzten Jahre simuliert. Der mittlere Fehler in Pips war 40, aber wenn man sich die Grafik anschaut, liegt es die ersten 1500 ziemlich genau richtig, dann verliert es und fängt an, den Preis falsch einzuschätzen, aber die Richtung ist größtenteils richtig. Dann trifft es etwa 10000 und es nimmt es wieder auf (gerade rechtzeitig für den großen Absturz). Schauen Sie sich das an und sagen Sie mir, was Sie davon halten. Dunkelblau ist der Ausgang hellblau Ziel. Übrigens habe ich das Netzwerk nicht mit Zielen versorgt, die für die Analyse überlagert wurden.

Dateien:
gbpjpy60-4.jpg  40 kb
gbpjpy60-8.jpg  55 kb
 

Ich kann nichts sagen, wenn ich mir die Bilder ansehe, denn es könnte einen "Schatteneffekt" geben und die Bilder sind zu klein, um das zu erkennen.

Aber ich kann Ihnen sagen, wie Sie überprüfen können, ob das NN in Ordnung ist. Exportieren Sie /es gibt einen Export- und einen Import-Assistenten in Matlab/ die Testausgabe in eine XLS- oder CSV-Datei /Excel-Datei/. Legen Sie dann die realen Werte neben die NN-Ausgabe und fügen Sie in die nächste Spalte eine Formel ein, die prüft, ob das NN die korrekte Richtung der Kursbewegung vorhergesagt hat.

Indem Sie zählen, wie viele "1" Sie erhalten, können Sie die Genauigkeit des Netzwerks ermitteln.

Sie können auch eine Formel schreiben, die den Gewinn und Verlust für jeden Schritt berechnet. Schauen Sie sich das Bild unten an /Ich benutze die polnische Version von Excel, daher weiß ich nicht, ob ich die Formeln richtig verstanden habe /. Überspringen Sie den Spread für jetzt.

Dateien:
 

Hallo Kazam,

Ist es möglich, dieses NN-Paket in Metatrader zu implementieren?

Dateien:
example.zip  106 kb
 

Es sieht so aus, als ob es in Ordnung wäre. Ich habe die Formel durch Open Office Spreadsheet laufen lassen und es ergab eine Genauigkeit von 73 % bei der Handelsrichtung. Ich habe noch ein paar weitere Eingaben, um das Netzwerk, die ich denke, wird die Genauigkeit zu verbessern geben. Hier ist die Kalkulationstabelle, ich habe sie im xls-Format gespeichert, Sie sollten sie lesen können.

Dateien:
gj60.rar  831 kb
 

In der Probe, außerhalb der Probe

mrwobbles:
Sieht so aus, als ob es in Ordnung wäre. Ich habe die Formel durch Open Office Spreadsheet laufen lassen und sie ergab eine Genauigkeit von 73% bei der Handelsrichtung. Ich habe noch ein paar weitere Eingaben für das Netzwerk, die die Genauigkeit verbessern werden. Hier ist die Kalkulationstabelle, ich habe sie im xls-Format gespeichert, Sie sollten sie lesen können.

Gut...In der Stichprobe oder außerhalb der Stichprobe?

Das macht einen großen Unterschied für Ihr Konto aus, 73% in der Stichprobe ist ein Kontokiller, 73% außerhalb der Stichprobe ist ein Vielleicht...

Versuchen Sie, nur den Ergebnissen aus der Stichprobe Glauben zu schenken, und je weniger Inputs Sie haben, desto weniger Overfitting werden Sie bekommen... wenn Sie also neue Inputs hinzufügen, sollten Sie darüber nachdenken, einige der alten zu löschen... oder den Datensatz aus der Stichprobe zu erweitern, auf dem Sie Ihre Überzeugungen schmieden werden.

Als Faustregel gilt: Weniger Eingaben, weniger Verbindungen, mehr Punkte außerhalb der Stichprobe ... bessere Verallgemeinerung.

Mit freundlichen Grüßen

Simba

 

biddick

Es handelt sich um eine DLL, schauen Sie hier nach:

http://www.metatrader.info/node/150[/CODE]

There's an example of how to use DLL functions in Metatrader.

mrwobbles

It's either the training data or you got something wrong - the results are to good .

If one could get an accuracy of 73% with a simple back propagation network no one would give a shit about more complicated stuff

SIMBA

You're right. Choosing the proper input is a the most important thing in the process of creating a NN /there's a rule "trash goes in, trash comes out" /.

But you can always use data mining tools to analyze many different variables and choose those that affect the one you want to predict.

There's a nice book about data minig /and about genetic algorithms, Bayesian classification etc./ - "Data Mining Methods and Models." by Daniel T. Larose. It also shows how to use WEKA /a free, open source software for machine learning/.

My preferred way is to use GA - for the propose of time series prediction I usually allow them to choose from 15-40 previous steps.

PS

I've mentioned using Bayesian probability for the classification tasks but it can also be used for time series prediction

[CODE]http://www.cis.hut.fi/juha/papers/ESTSPfinal.pdf