Hallo progi123,
ok - darum gehts dir. Habs anders aufgefasst (und deshalb ja nachgefragt).
Das Finden einer Korrelation ist immer von Vorteil - je kleiner der Eingabestimulus ist desto besser ist - bzw. die Eregebnisse werden weniger vom Rauschen verfälscht.
Eine Regressionsanalyse ist nicht unbedingt notwendig, denn das MLP kann als f(I) -> O, also als Funktion von Eingabe nach Ausgabe, verstanden werden bzw. exakter als Funktionsapproximator. Durch das Training wird die Regression durchgeführt.
Da du die Generalisierungsfähigkeit erwähnt hast gebe ich noch den Hinweis zur Technik von Pruning, also dem entfernen von nicht/wenig aktiven Neuronen in der Hidden-Schicht. Damit kann die Generalisierungsfähigkeit teilweise um einiges verbessert werden ohne dass dabei die Ergebnisse schlechter werden.
Würde die Regressionsanalyse durchgeführt und ein funktionaler Zusammenhang beschrieben werden können dann erübrigst sich das Netz. Hier wäre es dann besser direkt mit den Resultaten der Analyse zu arbeiten.
Zitat |
Ich muss nur 3 Werte vorhersagen
|
Als Hinweis zur Vorhersage: oft ist auch besser wenn nicht die absoluten Werte verwenden werden, sondern die relative Änderung zum Vorgängerwert. Als Result kommt dann auch nicht zB 32°C raus, sondern -3°C.
Für Aktien ist es ja nach Anwendungsfall gar nicht notwendig den Zahlenwert zu Vorhersagen sondern es genügt eine Klassifizierung gem. Kaufen/Verkaufen/Halten.
Jedes Thema für sich ist sehr speziell und auch mit NN kann nicht alles erschlagen werden. Das Thema Vorhersage wurde im Forum auch schon ein paar mal behandelt. Suche mal danach - da gibts interessante Infos.
Zitat |
Die wichtigste Bedingung ist Simulierbarkeit d.h. Millionen von Zugriffen sollten nicht länger als ein paar Sekunden dauern.
|
Das (trainierte) MLP selbst ist nix anderes als ein Berechner von Skalarprodukten. Also Matrix-Operationen und diese lassen sich hier sogar sehr gut parallelisieren. Noch besser parallelisieren lässt sich das Ganze indem pro CPU ein MLP werkt. Hierzu kann ein Producer/Consumer erstellt werden (zB mittels BlockingCollection<T> ab .net 4.0 oder vorher mittels
SyncQueue <T> - Eine praktische Job-Queue). Wichtig dabei ist nur dass jeder Thread sein eigenes MLP instanziiert damit gemeinsame Zugriffe vermieden werden können.
Aber wir sollten darauf achten dass wir beim Thema Datenaufbereitung bleiben.
Dafür gibt es sowieso keine Experten, auch wenn es richtig geschrieben worden wäre :-)
mfG Gü