Kodowanie daty / godziny (dane cykliczne) dla sieci neuronowych

12

Jak zakodować datę i godzinę zdarzenia dla sieci neuronowej?

Nie mam ciągłych szeregów czasowych, ale niektóre wydarzenia z datą i godziną, i analizuję pewne zainteresowania. Zainteresowanie to różni się między porankami i wieczorami i różni się między dniami powszednimi oraz między latem a zimą, a także przed Bożym Narodzeniem i Wielkanocą i tak dalej. A same wydarzenia mają silną nierównomierną dystrybucję w czasie (więcej w dzień niż w nocy, niektóre rodzaje więcej w ciągu tygodnia, niektóre więcej w weekend).

Próbowałem zakodować go jako liczbę tygodni w roku, jako dni tygodnia 1-7 i godziny dnia. Ale bawienie się rzadkim autoencoderem dało mi wrażenie, że moje dane nie mają żadnego sensu dla sieci neuronowej, nie mogłyby nawet odtworzyć niczego w pobliżu wejścia nawet przy dużej ukrytej warstwie. Ani jako kategorialne 0-1, ani jako znormalizowane wartości.

Ale szukanie kodowania czasu dla sieci neuronowej daje głównie informacje o szeregach czasowych, więc jestem trochę zasłonięty przez las, ale szukam drzewa.

Oczywiście mogłem spojrzeć na dane i z grubsza podzielić je na mniej lub bardziej despotyczne. Ale koncepcja głębokiego uczenia się wydaje się zmieść wszystkie ręcznie wykonane ekstrakcje funkcji. A kategoryzacja wstawiłaby duże skoki do naturalnie ciągłej zmiennej wejściowej.

Moje „naturalne kodowanie” w moim mózgu przypomina bardziej rozmyte członkostwo w niektórych kategoriach, takich jak „noc”, „poranek”, „dzień powszedni” i tak dalej.

Aby uczynić całość bardziej interesującą, również zmienna zależna zawiera te dane daty / godziny, ale to inne pytanie.

EDYCJA: Jakoś związane z cyklicznym rodzajem danych są niektóre ostatnie pytania, takie jak

Które testy statystyczne są uzasadnione w przypadku zestawu danych o tej porze dnia?

flaschenpost
źródło

Odpowiedzi:

1

Możesz spróbować przedstawić czas jako dużą macierz, tj. 365 na 24, aby przedstawić dni roku i godziny dnia, a następnie „rozwinąć” go do wektora 1 na 8760. Czas odpowiadałby wówczas pozycji w tym wektorze, a wartość w tej pozycji jest wartością w tym czasie.

czytnik babelproofreader
źródło
2
Próbowałeś już takiego kodowania? Byłbym zaskoczony, gdyby sieć neuronowa „nauczyła się” dokładnych pozycji niedzielnego poranka w tym kodowaniu. Ale zaskoczenie naiwności jest jedną z zalet sieci neuronowych, więc nie postawiłbym przeciwko temu mojej szkockiej. ;-)
flaschenpost
Może to być przydatne, jeśli chcesz wykrywać zdarzenia cykliczne o tej samej godzinie w różnych latach, ale wydaje mi się, że korelacja będzie bardzo słaba. Widzę większe prawdopodobieństwo korelacji między tą samą godziną każdego tygodnia lub tą samą godziną każdego dnia w przypadku większości danych szeregów czasowych.
thekingoftruth
1

Sugerowałbym utworzenie wielu funkcji wprowadzania z szeregów czasowych przy użyciu relacji, o których wiesz (lub w których wierzysz), że istnieją już w danych. Na przykład stwierdzasz, że docelowe wyniki będą się różnić:

między porankami a wieczorami i różni się między dniami powszednimi oraz między latem a zimą ...

Dlaczego więc nie stworzyć zestawu funkcji opisujących każdy z tych „cykli”. Może to pomóc wyodrębnić zarówno warianty mikro, jak i makro, a nie jedną funkcję, która opisuje wszystko.

Na przykład...

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

CatsLoveJazz
źródło
Tak, to był mój pierwszy pomysł. Ale okrągła koncepcja czasu (po 23:59 następuje 00:00) jest następnie ukryta, a kolejną rzeczą, która mnie martwi, jest skok między pozornie całymi liczbami - zdarzenie o 09:55 jest bardzo podobne do 10:05, ale rano 06:10 różni się bardzo od 06:55. Mogę sobie wyobrazić przeszukiwanie centrów czasu (optyka lub tym podobne?), A następnie zmierzyć i podać odległość do tych centrów. Więc 04:30 to najgłębsza noc, podczas gdy 05:30 jest bardziej „rano”, ale zupełnie nie jak wieczór.
flaschenpost
1
Cóż, w takim przypadku możesz spróbować zakodować jako sinusoidę lub cosinus, a właściwie jedno i drugie.
CatsLoveJazz