Codierung von Datum / Uhrzeit (zyklische Daten) für neuronale Netze


12

Wie codiere ich Datum und Uhrzeit eines Ereignisses für ein neuronales Netzwerk?

Ich habe keine fortlaufende Zeitreihe, sondern einige Ereignisse mit Datum und Uhrzeit, und ich analysiere eine Art von Interesse. Dieses Interesse unterscheidet sich zwischen Morgen und Abend und zwischen Wochentagen und zwischen Sommer und Winter sowie vor Weihnachten und Ostern und so weiter. Und die Ereignisse selbst haben eine starke ungleichmäßige Verteilung über die Zeit (mehr am Tag als in der Nacht, einige Arten mehr während der Woche, einige mehr am Wochenende).

Ich habe versucht, es als Anzahl der Wochen im Jahr, als Wochentag 1-7 und als Stunde des Tages zu codieren. Das Herumspielen mit einem spärlichen Autoencoder erweckte jedoch den Eindruck, dass meine Daten für ein neuronales Netzwerk keinen Sinn ergeben und selbst mit einer großen verborgenen Schicht nicht einmal etwas in der Nähe der Eingabe reproduzieren können. Weder als kategoriale 0-1 noch als normalisierte Werte.

Aber die Suche nach der Kodierung der Zeit für ein neuronales Netzwerk gibt meistens Informationen über Zeitreihen, also bin ich ein bisschen mit verbundenen Augen vom Wald, suche aber nach dem Baum.

Natürlich könnte ich mir die Daten ansehen und sie grob mehr oder weniger despotisch einordnen. Das Konzept des Deep Learning scheint jedoch die gesamte handgefertigte manuelle Merkmalsextraktion zu beseitigen. Und die Kategorisierung würde große Sprünge in eine natürlich kontinuierliche Eingabevariable einfügen.

Meine "natürliche Kodierung" in meinem Gehirn ähnelt eher einer unscharfen Zugehörigkeit zu einigen Kategorien wie "Nacht", "Morgen", "Wochentag" und so weiter.

Um das Ganze interessanter zu machen, enthält auch die abhängige Variable diese Datums- / Zeitdaten, aber das ist eine andere Frage.

EDIT: Irgendwie im Zusammenhang mit der zyklischen Art von Daten sind einige aktuelle Fragen, wie

Welche statistischen Tests sind mit diesem Tageszeitdatensatz sinnvoll?

Antworten:


7

Ich suchte nach einer Antwort auf ein ähnliches Problem und stolperte über diesen Thread. Die Idee der sinusförmigen Codierung wird in diesem Blog-Beitrag untersucht:

Codierung zyklischer kontinuierlicher Funktionen - 24-Stunden-Zeit

Ians Antwort ging voll und ganz auf meine Bedürfnisse ein, also dachte ich darüber nach, sie hier für zukünftige Erinnerungen zu veröffentlichen.


Ich frage mich, wie dies verwendet werden kann stackoverflow.com/questions/59653862/… - besonders wenn die Zeit Features sind.
user4581

1

Sie können versuchen, die Zeit als große Matrix darzustellen, dh 365 x 24, um die Tage des Jahres und die Stunden des Tages darzustellen, und diese dann in einen 1 x 8760-Vektor "abrollen". Die Zeit würde dann der Position innerhalb dieses Vektors entsprechen und der Wert an dieser Position ist der Wert zu diesem Zeitpunkt.


2
Haben Sie versucht, mit einer solchen Codierung Erfolg zu haben? Ich wäre überrascht, wenn ein Neuronales Netz die genauen Positionen des Sonntagmorgens in dieser Codierung "lernen" würde. Aber die Naivität zu überraschen, ist eine der Stärken neuronaler Netze, deshalb würde ich meinen Scotch nicht dagegen wetten. ;-)
flaschenpost

Dies könnte nützlich sein, wenn Sie Ereignisse, die in verschiedenen Jahren zur gleichen Stunde zyklisch sind, erkennen möchten, aber die Korrelation scheint mir sehr schwach zu sein. Ich kann für die meisten Zeitreihendaten eine höhere Wahrscheinlichkeit einer Korrelation zwischen derselben Stunde pro Woche oder derselben Stunde pro Tag feststellen.
thekingoftruth

1

Ich würde vorschlagen, mehrere Eingabefunktionen aus den Zeitreihen unter Verwendung von Beziehungen zu erstellen, von denen Sie wissen (oder glauben), dass sie bereits in den Daten vorhanden sind. Sie geben beispielsweise an, dass die Zielausgabe variieren wird:

zwischen morgens und abends und unterscheidet sich zwischen Wochentagen und zwischen Sommer und Winter, ...

Warum also nicht eine Reihe von Funktionen erstellen, die jeden dieser „Zyklen“ beschreiben? Dies kann dazu beitragen, sowohl Mikro- als auch Makrovariationen herauszufiltern und nicht nur eine einzige Funktion, die alle beschreibt.

Beispielsweise...

1..241..16812,36,60 ...


Ja, das war auch meine erste Idee. Aber das zirkuläre Konzept der Zeit (23:59, gefolgt von 00:00) ist dann verborgen, und eine andere Sache, die mich stört, ist der Sprung zwischen den scheinbar ganzen Zahlen - ein Ereignis um 09:55 ist 10:05 sehr ähnlich. aber am Morgen ist 06:10 ganz anders als 06:55. Ich könnte mir vorstellen, Zentren der Zeit (Optik oder ähnliches?) Zu durchsuchen und dann den Abstand zu diesen Zentren zu messen und anzugeben. 04:30 Uhr ist also die tiefste Nacht, während 05:30 eher "morgens" ist, aber völlig anders als abends.
Flaschenpost

1
In diesem Fall könnten Sie versuchen, als Sinus oder Cosinus oder tatsächlich als beides zu codieren.
CatsLoveJazz
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.