Wie kodiere ich ein Datum als Eingabe in ein neuronales Netzwerk?

12

Ich benutze neuronale Netze, um eine Zeitreihe vorherzusagen. Die Frage, mit der ich jetzt konfrontiert bin, ist, wie ich Datum / Uhrzeit / Seriennummer codiere. jedes Eingangssatzes als Eingang für das neuronale Netzwerk?

Soll ich 1 von C verwenden kodieren (verwendet für die Codierung von Kategorien) , wie hier ?

Oder soll ich es einfach mal füttern (in Millisekunden seit 1.1.1970)?

Oder ist das Füttern der Zeit unnötig, solange ich den Rest der Daten chronologisch füttere?

Shayan RC
quelle
Ich bin nicht sicher, warum Sie es für unnötig halten , die Zeit zu speisen, wenn Sie neuronale Netze verwenden, um eine Zeitreihe vorherzusagen .
Scaaahu
Es gibt viele Möglichkeiten, Datums- und Uhrzeitangaben zu kodieren. Es wäre hilfreich, die Art der Zeitreihen zu kennen. Es ist nicht a priori etwas, entweder auszuschließen oder
einzuordnen
@vzn Ich versuche generell, eine finanzielle Zeitreihe vorherzusagen. Wenn das hilfreich ist.
Shayan RC

Antworten:

17

Neuronale Netze sind keine Magie. Wenn Sie sie so behandeln, wie sie sind, und einfach Daten auf sie werfen, ohne zu denken, dass Sie eine sehr schlechte Zeit haben werden.

Sie müssen anhalten und sich fragen: "Werden Millisekunden seit 1970 tatsächlich Vorhersagen für das Ereignis sein, an dem ich interessiert bin?" Die Antwort, die Sie sofort erhalten sollten, lautet Nein. Warum? Für jede Instanz, die Sie wirklich interessieren (Ereignisse in der Zukunft, die Vergangenheit ist bereits passiert), nimmt die Zeitvariable einen Wert an, der größer ist als jeder Wert, den die Zeitvariable in Ihren Trainingsdaten annimmt. Es ist sehr unwahrscheinlich, dass eine solche Variable hilft. Noch schlimmer ist, dass es wahrscheinlich zu einer Überanpassung kommt (ein ernstes Problem für leistungsfähige nichtlineare Modelle wie neuronale Netze), wenn Sie nicht vorsichtig sind.

Was jetzt Sinn machen könnte, ist eine Variable wie die Woche des Jahres oder Monats, mit deren Hilfe Sie saisonale oder jährliche Effekte modellieren können. Ich habe einige Arbeiten zur Vorhersage landwirtschaftlicher Krankheiten durchgeführt, bei denen der Julianische Tag eine sehr wichtige Variable war. Aufgrund dieser Erfahrung vermute ich, dass Sie diese Art von Variable besser als kategoriale Variable als als Ordnungszahl codieren sollten, was Ihrer Erfahrung nach sehr wahrscheinlich ist. Beachten Sie, dass Monat oder Woche des Jahres wiederholbare Ereignisse sind, die wahrscheinlich viele Male in Ihren Trainingsdaten vorkommen, und es ist möglich zu erklären, warum sich eine solche Variable auf ein finanzielles Ergebnis auswirken könnte. Vergleichen Sie dies mit Millisekunden seit 1970, was nur ein monoton steigender Wert ist.

Zuletzt aus Ihrer Aussage "Oder ist es unnötig, die Zeit einzugeben, solange ich den Rest der Daten chronologisch einspeise?" Es hört sich so an, als ob Sie nicht sehr gut verstehen, wie neuronale Netze funktionieren. Bei einem standardmäßigen neuronalen Feedforward-Netzwerk hat die Reihenfolge, in der Sie das Netzwerk speisen, keine Auswirkungen auf die Vorhersagen. Die Reihenfolge kann sich auf das Training auswirken, wenn Sie einen stochastischen oder einen Minibatch-Gradientenabstieg verwenden. Dies ist jedoch nur ein Artefakt der iterativen (im Gegensatz zur Batch-) Trainingsmethode. Wenn Sie die zeitliche Abhängigkeit mit einem neuronalen Netzwerk modellieren möchten, müssen Sie so etwas wie ein Schiebefenster oder ein wiederkehrendes neuronales Netzwerk verwenden.

Alt
quelle
2

[-1,1][0,1]sichn(t)

f(t)f(t)dt=ft+GtGtft

vzn
quelle