Próbowałem zrozumieć, w jaki sposób reprezentować i kształtować dane, aby tworzyć wielowymiarowe i wielowymiarowe prognozy szeregów czasowych za pomocą Keras (lub TensorFlow), ale nadal jestem bardzo niejasny po przeczytaniu wielu postów / samouczków / dokumentacji na blogu, w jaki sposób prezentować dane w poprawny kształt (większość przykładów jest nieco mniejsza
Mój zestaw danych:
- kilka miast
- dla których mam informacje o powiedzmy temperaturze, ruchu samochodowym, wilgotności
- na przykład ostatnie 2 lata (jeden rekord na każdy dzień)
Co chcę zrobić: chciałbym przewidzieć dla każdego miasta temperatury, których mogę się spodziewać w przyszłym roku, używając prawdopodobnie opóźnionej wersji temperatury, ruchu samochodowego i wilgotności (oczywiście byłoby jeszcze kilka innych funkcji, ale to tylko przykład dla myśli).
O czym się mylę: jeśli mam 2 miasta, dla których nagrałem 3 funkcje przez 365 dni. Jak powinienem kształtować dane wejściowe, aby model mógł generować prognozę na 365 dni dla tych dwóch miast (tj. 2 szeregi czasowe temperatur na 365 dni)?
Intuicyjnie kształt tensora trwałby (?, 365, 3)
365 dni i 3 funkcje. Ale nie jestem pewien, co trzymać w pierwszym wymiarze i, co najważniejsze, byłbym zaskoczony, gdyby miało to dotyczyć liczby miast. Ale jednocześnie nie mam pojęcia, jak określić w modelu, że ma poprawnie rozumieć wymiary.
Wszelkie wskazówki będą pomocne. Znam resztę problemu (tj. Jak zbudować sieć w Keras itp., Ponieważ zrobiłem to dla innych sieci neuronowych, ale dokładniej jak najlepiej zakodować sekwencję dla pożądanego wejścia).
No i wydaje mi się, że mógłbym trenować i przewidywać dla każdego miasta niezależnie, ale jestem pewien, że wszyscy zgodzą się, że prawdopodobnie należy nauczyć się rzeczy, które nie są specyficzne dla żadnego miasta, ale można to zobaczyć tylko w przypadku kilku z nich, dlatego uważam, że ważne jest zakodowanie go w modelu.
Odpowiedzi:
Kształt wejściowy dla LSTM musi mieć postać
(num_samples, num_time_steps, num_features)
. W twoim przykładzie połączenie obu miast jako danych wejściowychnum_features
wyniesie 2x3 = 6.Jeśli zrzucisz wszystkie swoje 365 kroków czasowych w jedną próbkę, wówczas pierwszym wymiarem będzie 1 - jedna pojedyncza próbka! Możesz także wykonać kontrolę poprawności przy użyciu całkowitej liczby punktów danych. Masz 2 miasta, każde z 365 przedziałami czasowymi i 3 funkcjami: 2x365x3 = 2190. Jest to oczywiście to samo, co 1x365x6 (jak powiedziałem powyżej) - więc byłoby to możliwe (Keras będzie działać) - ale oczywiście nie nauczy się generalizować w ogóle, dając tylko jedną próbkę.
Spójrz na to istotne pytanie , na które niedawno odpowiedziałem. Tam mówię trochę o korzystaniu z przesuwanego okna (sprawdź komentarze odpowiedzi, aby uzyskać więcej informacji). Dzięki temu kupisz więcej próbek, jeśli ich potrzebujesz.
Jeśli chcesz trenować pojedynczy model z danymi dla obu miast jako danych wejściowych, to przewidywanie dla obu miast na każdym etapie jest tak proste, jak zdefiniowanie końcowej
Dense
warstwy, która daje 2 jednostki. Twoje dane walidacyjne / testowe muszą oczywiście zawierać krotkę (miasto1, miasto2).Być może bardziej wyrafinowanym sposobem podejścia byłoby utworzenie zbiorów danych dla pojedynczego miasta, następnie szkolenie kilku podmodeli w każdym mieście indywidualnie (powiedzmy dla 5 warstw), a następnie
Merge
/Concatenate
ich i nałożenie kilku kolejnych warstw na wierzch. Oznacza to, że łączysz wyuczone cechy każdego miasta, które z kolei są łączone na wyższy poziom abstrakcji. Oto pierwsze zdjęcie, które dostałem z wyszukiwarki , która szkicuje ten pomysł.źródło