Forecast/ Outputs exportieren/ outofsampel outputs/ rolliere

Sie haben ein bestimmtes Projekt zu bearbeiten und wissen nicht, wie Sie an die Aufgabe heran gehen sollen? Sie sind sich nicht sicher, ob Ihr Netzentwurf zu Ihrem Problem passt oder ob es da Optimierungsmöglichkeiten gibt? Ist es überhaupt sinnvoll an Ihre Daten mit einem NN basierten Ansatz heranzugehen? Ist MemBrain das richtige Werkzeug für Ihr Problem und Ihre Infrastruktur?

Hier ist der richtige Platz für diese Art von Fragen.
OJBVB
Posts: 7
Joined: Wed 22. Oct 2014, 14:54

Forecast/ Outputs exportieren/ outofsampel outputs/ rolliere

Post by OJBVB »

Hallo liebe Membrain Pros,

ich befinde mich leider derzeit auf komplettem Neuland und bräuchte eure Hilfe:

Kurz zu meinem Projekt. Ich möchte aus einer Datenreihe (stündliche Aktiendaten ) einen Forecast bauen. Ich habe dafür ein Rekurrentes Netz mit 28 Input- und einer Output Unit.
Ich bin jetzt soweit, dass ich das Netz trainiert habe und durch „klicken“ des buttons „think on Net“ meine Outputs anschauen kann. Derzeit schreibe ich diese an und arbeite damit weiter 

Deshalb jetzt zu meinen Problemen:
-Ich würde gerne die Outputs der Lesson (in sample) irgendwie exportieren.
-Ich würde gerne das trainierte Netz auf neue Daten loslassen (outofsample).
- Optimaler Weise gäbe es eine Möglichkeit das Membrain rollierend ein Netz trainiert (insample) dann mir drei oder vier outputs kreiert (outofsample) und sich dann wieder neu trainiert und so weiter.
Ich habe leider keine Ahnung von dem scripting bzw. c++. Könnt ihr mir einen Tipp geben wo ich das am besten lerne ( tutorial?)

Vielen Dank und Beste Grüße
OJBVB
User avatar
TJetter
Posts: 346
Joined: Sat 13. Oct 2012, 12:04

Re: Forecast/ Outputs exportieren/ outofsampel outputs/ roll

Post by TJetter »

Hallo,

da zeitvariante Netze sehr aufwändig im Handling sind, ist hier ganz dringend der Einsatz eines Skripts angeraten.
Eine solches gibt es z.B. hier im Forum bereits:

viewtopic.php?f=13&t=326

Das Skript erledigt bereits fast alles aus der Wunschliste. Am besten mal ausprobieren und dann wieder mit konkreten Fragen melden.

Grüße und viel Erfolg
Thomas Jetter
OJBVB
Posts: 7
Joined: Wed 22. Oct 2014, 14:54

Re: Forecast/ Outputs exportieren/ outofsampel outputs/ roll

Post by OJBVB »

Hallo,

erstmal vielen Dank, dass Sie das Programm kostenfrei zur Verfügung stellen und es so benutzerfreundlich ist, sodass sogar Neulinge -wie ich- auf dem Gebiet der Neuronalen Netze guten Zugang bekommen! Ich benutze es für eine Seminararbeit und hoffe, dass ich über die Zeit meines Studiums immer tiefer in die Welt der Neuronalen-Netze einsteigen kann.

Vielen Dank für den Tipp, das Script ist -soweit ich es verstehe- fast genau das was ich brauche. Ich habe versucht zu verstehen was es macht. ich tue mich allerdings sehr schwer es umzuschreiben. Konkret die Stelle mit dem X1 t+1

Mein Projekt sieht der Zeit so aus:
--------------------------------------------------------------------------------------------------------------------------------------------------------------

1) Ich habe 5 Netze und weiß nicht welches das Beste ist und ob es valide ist
---> Wird vom script übernommen !!!Check!!!
--------------------------------------------------------------------------------------------------------------------------------------------------------------


2) Ich habe 28 Inputs und 1 Output die ich für erste Versuche mit einem Netz derart angeordnet habe:

|1 ... 28| 35 |
|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i| O | 1
|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i| O | .
.
. .
.
|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i| O | .
|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i| O | 1200


Die Inputs sind stundlich Asset-Daten der letzten 2 Tage (7 Trading-Stunden pro Tag) von zwei Assets.
Der Output ist der Opening Price vom Tag 3 des ersten Assets.
--------------------------------------------------------------------------------------------------------------------------------------------------------------


3) Was ich jetzt bräuchte ist, dass das Script das Beste Netzt mit 510 (kann auch weniger oder mehr sein, dass mit der % Zahl bekomme ich schon hin) von den 1200 Datenzeilen trainiert. Danach soll es die Inputs aus Zeile 511 und 512 Einlesen und mir die Outputs geben die das Netz Erstellt.
Danach soll es das Netz wieder neu trainieren mit 510 Datenzeilen um 2 verschoben, also von Zeile 3 bis 512 und wieder die Inputs der Zeilen 513 und 514 einlesen und die Outputs ausspucken. Meine Hoffnung ist, dass der Datensatz Derart Rollierend abgearbeitet werden kann.


|1 ... 28| 35 |
|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i| O | 1
|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i| O | .
.
. .
.
|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i| O | .
|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i| O | 510
|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i| ? | 511
|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i| ? | 512





|1 ... 28| 35 |
|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i| O |
|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i| O |
|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i| O | 3
|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i| O | .
.
. .
.
|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i| O | .
|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i| O | 512
|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i| ? | 513
|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i| ? | 514


.
.
.


Ich habe versucht meine Daten so umzustellen, dass der Output = X1(t+1) ist. Allerdings war das scheinbar ein realtiv verzweifelter Versuch. Vieleicht kann mir jemand sagen, an welcher Stelle ich das Script umschreiben muss! Bzw. vieleicht muss ich ja meine Daten wirklich nur umstellen...

Ich habe mal meinen Datensatz einfach Angehängt

Ganz vielen Dank für eure Hilfe!

VG
OJBVB
Attachments
InputData.csv
(191.63 KiB) Downloaded 530 times
OJBVB
Posts: 7
Joined: Wed 22. Oct 2014, 14:54

Re: Forecast/ Outputs exportieren/ outofsampel outputs/ roll

Post by OJBVB »

Ach noch eine kleine Ergänzung:

t |1 ...15... 28 |35|
1|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i15|i|i|i|i|i|i|i|i|i|i|i|i|i| O | 1
2|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i15|i|i|i|i|i|i|i|i|i|i|i|i|i| O | .
.
. .
.
1199|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i15|i|i|i|i|i|i|i|i|i|i|i|i|i| O | .
1200|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i15|i|i|i|i|i|i|i|i|i|i|i|i|i| O | 1200


i15 (t+1) = O t

Danke nochmal
User avatar
TJetter
Posts: 346
Joined: Sat 13. Oct 2012, 12:04

Re: Forecast/ Outputs exportieren/ outofsampel outputs/ roll

Post by TJetter »

Zunächst gilt es hier ein Missverständnis bzw. wichtige Begrifflichkeiten zu klären:
Wenn bei NN von rekurrenten, oder - allgemeiner - von zeitvarianten Netzen gesprochen wird, dann ist das eine Aussage über die Architektur der Netze und (zunächst einmal nicht) über die Daten:
Ein zeitinvariantes Netz zeichnet sich dadurch aus, dass seine Ausgänge IMMER und AUSSCHLIESSLICH von seinen Eingängen abhängen. Der innere Zustand des Netzes geht also nicht in den nächsten Berechnungsschritt des Netzes ein. Oder anders formuliert: Egal, was das Netz in seiner Vergangenheit berechnet hat und welche Werte an seinen Inputs anlagen - es wird auf die selben Eingangsdaten immer die selben Outputs generieren (solange es nicht verändert wurde, z.B. durch Training).
Im Gegensatz dazu, besitzt ein zeitvariantes (z.B. rekurrentes) Netz eine Art 'inneres Gedächtnis', so dass sein momentaner Zustand, zusätzlich zu den angelegten Inputs, die Berechnung der nächsten Outputs bestimmt. Oder anders, ganz anschaulich formuliert: Wenn man an ein zeitvariantes Netz konstante Inputs anlegt und danach in MemBrain mehrmals hintereinander einen 'Think Step' aussführt, so wird das Netz (in der Regel) eine Serie sich verändernder Outputwerte ausgeben, bei jedem 'Think Step' einen anderen. Wobei das Netz sich meist nach wenigen Think Steps stabilisiert und einen konstanten Output produziert, das hängt aber sehr vom Netz und vom Trainingszustand ab.

Damit folgt auch, dass es bei einem zeitvarianten Netz nicht egal ist, in welcher Reihenfolge die Muster beim Training und bei der Anwendung des Netzes präsentiert werden. Vielmehr nutzt man zeitvariante Netze gerade dazu, aus Reihenfolgen (bzw. Abfolgen oder auch 'Zeit'folgen) von Mustern zu lernen.
Damit sind zeitvariante Netze EINE der Möglichkeiten, Zeitreihen mit NNs zu behandeln.
Eine ANDERE Möglichkeit, ist das, was offensichtlich in diesem Post vorliegt: Werte aus der Vergangenheit (nämlich Werte von 14 Zeitpunkten aus zwei möglicherweise wechselwirkenden Zeitreihen) GLEICHZEITIG an ein zeitINVARIANTES Netz anzulegen. Man verschiebt also die Problematik des 'Zeitgedächtnisses' aus dem Netz in die Datenrepräsentation, in dem man an den Inputs des Netzes einen 'Ringpuffer' der zeitlichen Vergangenheit der Datenreihe(n) vorhält. Damit kann das Netz selbst zeitinvariant bleiben, man muss nur den Ringpuffer immer aktuell halten.

Das stellt tatsächlich ein sehr viel einfacheres Vorgehen dar, als ein zeitvariantes Netz zu verwenden und ist - zumindest für die ersten Machbarkeitsstudien - unbedingt zu empfehlen, da um ein Vielfaches einfacher: Zeitvariante Netze sind extrem unbequem in der Handhabung, schwingen sich leicht auf (werden instabil) usw.
Damit ist aber der Link, den ich angegeben habe, der Falsche, da ich anhand der Beschreibung davon ausgegangen war, es handle sich um ein rekurrentes (und damit zeitvariantes) Netz.

Für zeitinvariante Netze gibt es ein anderes Skript als Basis:
viewtopic.php?f=13&t=232

Dieses Skript führt allerdings keine Zeitreihenprognose durch. Es geht vielmehr von vorbereiteten Trainings- und Validierungsdatensätzen aus.
Für die Vorgehensweise 'Zeitprognose mit zeitinvariantem Netz' gibt es also momentan noch kein Skript. Ich werde mich baldmöglichst daran machen, ein solches zu erstellen und dann als dritte Variante hier im Forum zu posten. Welches der bestehenden Skripte die Basis dafür sein kann, muss ich erst noch sehen.

Viele Grüße
Thomas Jetter
OJBVB
Posts: 7
Joined: Wed 22. Oct 2014, 14:54

Re: Forecast/ Outputs exportieren/ outofsampel outputs/ roll

Post by OJBVB »

Vielen Dank für diese Erklärung. Ich habe an der Stelle wohl die Begrifflichkeiten falsch verstanden.

Bei mir Handelt es sich um ein zeitinvariantes Netz mit einem Ringpuffer.

Vielen Dank auch für den Link. Eventuell schaffe ich es ja dieses Script weiterzubearbeiten. Sollte ich irgendwelche sinnvollen Ergebnisse erziehlen werde ich sie hier Posten.
Ansonsten warte ich auf ihr Script. ;)


Vielen Dank nochmal für die schnelle Antwort und die ausführliche Erklärung.

VG
OJBVB
User avatar
TJetter
Posts: 346
Joined: Sat 13. Oct 2012, 12:04

Re: Forecast/ Outputs exportieren/ outofsampel outputs/ roll

Post by TJetter »

Hallo nochmal,

an dem Skript bin ich dran, auf Basis des ersten Links, also der Vorlage für zeitabhängige Netze. Mein Hoffnung ist, ein einziges Skript zu generieren, das dann für Zeitreihenprognose sowohl mit zeitabhängigen als auch mit zeitunabhängigen Netzen verwendet werden kann. Es soll dann die Möglichkeit bieten, für jede Zeitreihe einstellbar zu machen, wie viele Werte der Vergangenheit als Input verwendet werden sollen, so dass die Daten dann automatisch entsprechend aufbereitet werden. Dann könnte man auch einen 'gemischten Ansatz' fahren: Mehrere Werte aus der Vergangenheit als Eingänge und zusätzlich wenn gewünscht ein zeitabhängiges Netz.
Das bisherige Skript verwendet lediglich einen einzigen Wert aus der Vergangenheit (nämlich x(t)), um x(t+1) vorherzusagen. Das Skript muss nun eigentlich lediglich dahingehend erweitert werden, dass es die Daten so aufbereitet, dass für die Zeitreihen eine jeweils beliebig einstellbare Anzahl an Vergangenheits-Punkten einbezogen wird (also x(t-n), x(t-n+1), ..., x(t), y(t-m), y(t-m+1), ..., y(t), usw.
Sobald ich eine erste Version des Skripts beisammen habe, werde ich es hier posten bzw. verlinken.

Noch eine Anmerkung zum 'rollierenden' Lernansatz oben: Dieser macht m.E. nach so keinen Sinn: Wenn das Netz nach dem Training der ersten 510 Pattern die Pattern 511 und 512 vorhersagt, dann macht es keinen Sinn, das Netz danach mit diesen zusätzlichen Pattern neu zu trainieren. Und zwar deshalb, weil diese Pattern ja schon exakt in dieser Weise durch das Netz erzeugt wurden, Das Netz ist ja schon genau so trainiert worden, dass es genau diese Pattern 511 und 512 erzeugt. Sie nochmals zusammen mit den anderen Mustern zu trainieren ist nicht notwendig.

Viele Grüße
Thomas Jetter
User avatar
TJetter
Posts: 346
Joined: Sat 13. Oct 2012, 12:04

Re: Forecast/ Outputs exportieren/ outofsampel outputs/ roll

Post by TJetter »

So, das Skript zur Zeitreihenprognose im Forum ist jetzt so erweitert worden, dass es sowohl mit zeitvarianten, als auch mit zeitinvarianten Netzen verwendet werden kann:
viewtopic.php?f=13&t=326
Das Skript erwartet Netzkandidaten, die für jede Zeitreihe eine bestimmte Anzahl Vergangenheits-Inputs sowie einen Output (=zukünftiger Wert der jeweiligen Zeitreihe) enthalten.
Rechts von diesen Inputs können noch weitere Inputs stehen, die keine Zeitreihen darstellen. Details dazu sind im Kommentarheader des Skriptes enthalten.
Für jede Zeitreihe kann die 'Vergangenheitstiefe' im Skript in einem Array konfiguriert werden. Die Netzkandidaten müssen natürlich zu diesem Datenlayout passen.
Als Input wird eine CSV-Datei erwartet, die für jede Zeitreihe sowie für jeden optionalen zusätzlichen Input (die es für den Fall dieses Posts nicht gibt) genau eine Spalte aufweist.
Für jede Zeitreihe muss das Netz genau ein Outputneuron besitzen. Das ist notwendig weil:
- Das Skript an der Anzahl Output-Neuronen die Anzahl der zu analysierenden Zeitreihen festmacht
- Bei der Extrapolation in die Zukunft für jede Zeitreihe genau ein Outputwert vorliegen muss, der als Teil der Input-Daten für den nächsten Rechenschritt zurückgeführt werden kann.

Viel Erfolg und bitte bei Fragen einfach wieder melden, dann bitte am besten gleich mit Netz-Dateien und CSV Files zur Analyse.
Thomas Jetter
OJBVB
Posts: 7
Joined: Wed 22. Oct 2014, 14:54

Re: Forecast/ Outputs exportieren/ outofsampel outputs/ roll

Post by OJBVB »

Hallo und Frohe Weihnachten,
ich war leider etwas eingespannt und konnte mich mit dem Thema im letzten Monat nur wenig beschäftigen.
Also erste einmal vielen Dank, dass Sie dieses mächtige Skript zur Verfügung stellen. Ich habe es jetzt schon an vielen Datensätzen ausprobiert und werde es auch an anderen Netzwerkarchitekturen testen.
Zu dem Rollierenden-Ansatz:
Ich glaube, dass ich den Rollierenden-Ansatz, den ich mir vorgestellt habe, falsch erklärt habe:
Meine Idee war das Netz mit einem Datensatz von 500 (1-500) Pattern zu trainieren und einen Forecast für den 501‘ wert zu erstellen. Danach würde das Netz mit dem Wert der tatsächlich der 501 war neu trainiert werden (2-501) um den 502‘ zu erklären. Und so weiter…
Ergebnis wäre eine Grafische Gegenüberstellung wie die tatsächlichen Werte waren (500-600) und wie demgegenüber meine Forecast-Werte abgeschnitten haben welche ich out-of-sample erstellt habe (500‘-600‘). Also eine Trennung von in-sample erstellten Forecast x(t+1) und out-of-sample erstellten Forecast x(t+1), wie sie oft in Papern vorgenommen wird.
Konkret würde ich gerne mit einem DAX-Datensatz probieren wie die Forecasts sich verhalten, wenn ich zum Beispiel einen Datensatz von 2000 bis 2010 nutze und dann rollierend von 2002 bis 2010 die Forecast mit den tatsächlichen Werten gegenüberstelle..
Ich habe jetzt probiert eine Schleife in das Skript einzubauen, welche am Ende des Skriptes wieder in das Training des Netzwerkes einsteigt und dafür aus meinen Daten einen um 1 verschobenen Daten -Array nutzt. Allerdings bin ich damit nicht weit gekommen. Händisch ist dieses Unterfangen nahezu unmöglich.

In dem Zusammenhang würde ich auch gerne ein Skript für ein einfaches zeitlich zeitINVARIANTES Netz mit einem Ringpuffer schreiben. Allerdings tue ich mich mit dem Schreiben des Skriptes sehr schwer. Wenn Sie also hier schon mal etwas geschrieben haben auf dem ich aufbauen kann, wäre ich sehr dankbar.


Vielen Dank und viele Grüße
User avatar
TJetter
Posts: 346
Joined: Sat 13. Oct 2012, 12:04

Re: Forecast/ Outputs exportieren/ outofsampel outputs/ roll

Post by TJetter »

Hallo und ein Frohes Neues Jahr!

so erklärt macht der rollierende Ansatz natürlich Sinn: Rein zum Zweck der Validierung im Hinblick auf ein sich verschiebendes Zeitfenster für das Training.
Sobald ich Zeit dazu finde, werde ich versuchen, das Skript in dieser Richtung zu erweitern bzw. eine neue Variante des Skripts zu generieren, die dieses Vorgehen unterstützt.

Grüße
Thomas Jetter
Post Reply