Wielowymiarowe prognozowanie szeregów czasowych z LSTM w Keras

Wielowymiarowe prognozowanie szeregów czasowych z LSTM w Keras

Sieci neuronowe, takie jak rekurencyjne sieci neuronowe typu Long-Short-Term Memory (LSTM), są w stanie niemal bezproblemowo modelować problemy z wieloma zmiennymi wejściowymi.

Jest to ogromna korzyść w prognozowaniu szeregów czasowych, gdzie klasyczne metody liniowe mogą być trudne do dostosowania do problemów z prognozowaniem wielowymiarowym lub wielowymiarowym.

W tym samouczku dowiesz się, jak opracować plik Model LSTM do prognozowania wielowymiarowych szeregów czasowych z biblioteką głębokiego uczenia Keras.

Po ukończeniu tego samouczka będziesz wiedział:

  • Jak przekształcić surowy zbiór danych w coś, czego możemy użyć do prognozowania szeregów czasowych.
  • Jak przygotować dane i dopasować LSTM do problemu z prognozowaniem wielowymiarowych szeregów czasowych.
  • Jak sporządzić prognozę i przeskalować wynik z powrotem do oryginalnych jednostek.

Rozpocznij swój projekt z moją nową książką Deep Learning for Time Series Forecasting, w tym samouczki krok po kroku i Kod źródłowy Pythona pliki dla wszystkich przykładów.

Zacznijmy.

  • Zaktualizuj sierpień / 2017: Naprawiono błąd, w którym podczas obliczania końcowego RMSE porównywano to z obs w poprzednim kroku czasowym. Dzięki, Songbin Xu i David Righart.
  • Aktualizacja październik / 2017: Dodano nowy przykład pokazujący, jak trenować na wielu wcześniejszych etapach ze względu na popularne zapotrzebowanie.
  • Aktualizacja wrzesień / 2018: Zaktualizowany link do zbioru danych.
  • Zaktualizuj czerwiec / 2020: Naprawiono brakujące importy dla przykładu przygotowania danych LSTM.

Omówienie samouczka

Ten samouczek jest podzielony na 4 części; oni są:

  1. Prognozowanie zanieczyszczenia powietrza
  2. Podstawowe przygotowanie danych
  3. Wielowymiarowy model prognozowania LSTM
    1. Przygotowanie danych LSTM
    2. Zdefiniuj i dopasuj model
    3. Oceń model
    4. Kompletny przykład
  4. Przykład pociągu z wieloma opóźnieniami

Środowisko Pythona

W tym samouczku założono, że masz zainstalowane środowisko Python SciPy. Zalecam używanie Pythona 3 w tym samouczku.

Musisz mieć zainstalowany Keras (2.0 lub nowszy) z zapleczem TensorFlow lub Theano, Ideally Keras 2.3 i TensorFlow 2.2 lub nowszym.

Samouczek zakłada również, że masz zainstalowane programy scikit-learn, Pandas, NumPy i Matplotlib.

Jeśli potrzebujesz pomocy ze swoim środowiskiem, zobacz ten post:

Potrzebujesz pomocy z Deep Learning for Time Series?

Weź udział w moim bezpłatnym 7-dniowym kursie e-mailowym (z przykładowym kodem).

Kliknij, aby się zarejestrować i otrzymać bezpłatną wersję kursu w formacie PDF Ebook.

Pobierz DARMOWY mini-kurs

1. Prognozowanie zanieczyszczenia powietrza

W tym samouczku będziemy używać zestawu danych dotyczących jakości powietrza.

Jest to zbiór danych przedstawiający pogodę i poziom zanieczyszczenia co godzinę przez pięć lat w ambasadzie USA w Pekinie w Chinach.

Dane obejmują datę i godzinę, zanieczyszczenie zwane stężeniem PM2,5 oraz informacje pogodowe, w tym punkt rosy, temperaturę, ciśnienie, kierunek wiatru, prędkość wiatru i łączną liczbę godzin śniegu i deszczu. Pełna lista funkcji w surowych danych jest następująca:

  1. Nie: Numer wiersza
  2. rok: rok danych w tym wierszu
  3. miesiąc: miesiąc danych w tym wierszu
  4. dzień: dzień danych w tym wierszu
  5. godzina: godzina danych w tym wierszu
  6. pm2.5: Stężenie PM2,5
  7. DEWP: Punkt rosy
  8. TEMP: Temperatura
  9. PRES: Nacisk
  10. cbwd: Połączony kierunek wiatru
  11. Iws: Skumulowana prędkość wiatru
  12. Jest: Łączna liczba godzin śniegu
  13. Ir: Łączna liczba godzin deszczu

Możemy wykorzystać te dane i sformułować problem prognozowania, w którym biorąc pod uwagę warunki pogodowe i zanieczyszczenie w poprzednich godzinach, prognozujemy zanieczyszczenie na następną godzinę.

Ten zestaw danych może być używany do tworzenia ram innych problemów związanych z prognozowaniem.
Masz dobre pomysły? Daj mi znać w komentarzach poniżej.

Zestaw danych można pobrać z repozytorium UCI Machine Learning.

Aktualizacja, Wykonałem kopię lustrzaną zestawu danych, ponieważ UCI stał się niewiarygodny:

Pobierz zestaw danych i umieść go w swoim bieżącym katalogu roboczym z nazwą pliku „raw.csv„.

2. Przygotowanie podstawowych danych

Dane nie są gotowe do użycia. Najpierw musimy to przygotować.

Poniżej znajduje się kilka pierwszych wierszy nieprzetworzonego zbioru danych.

Pierwszym krokiem jest skonsolidowanie informacji o dacie i godzinie w jednej dacie i godzinie, abyśmy mogli użyć jej jako indeksu w Pandach.

Szybkie sprawdzenie ujawnia wartości NA dla pm2,5 przez pierwsze 24 godziny. Dlatego będziemy musieli usunąć pierwszy wiersz danych. Istnieje również kilka rozproszonych wartości „NA” w dalszej części zbioru danych; możemy na razie oznaczyć je wartościami 0.

Poniższy skrypt ładuje nieprzetworzony zestaw danych i analizuje informacje o dacie i godzinie jako indeks Pandas DataFrame. Kolumna „Nie” jest usuwana, a następnie dla każdej kolumny są określane jaśniejsze nazwy. Na koniec wartości NA są zastępowane wartościami „0”, a pierwsze 24 godziny są usuwane.

Kolumna „Nie” jest usuwana, a następnie dla każdej kolumny są określane jaśniejsze nazwy. Na koniec wartości NA są zastępowane wartościami „0”, a pierwsze 24 godziny są usuwane.

Uruchomienie przykładu powoduje wydrukowanie pierwszych 5 wierszy przekształconego zestawu danych i zapisanie zestawu danych w „zanieczyszczenie.csv„.

Teraz, gdy mamy dane w łatwej w użyciu formie, możemy stworzyć szybki wykres każdej serii i zobaczyć, co mamy.

Poniższy kod ładuje nowy „zanieczyszczenie.csv”I wykreśla każdą serię jako oddzielny wykres pomocniczy, z wyjątkiem kierunku prędkości wiatru, który jest kategoryczny.

Uruchomienie przykładu tworzy wykres z 7 wykresami podrzędnymi przedstawiającymi dane z 5 lat dla każdej zmiennej.

Wykresy liniowe szeregów czasowych zanieczyszczenia powietrza

Wykresy liniowe szeregów czasowych zanieczyszczenia powietrza

3. Wielowymiarowy model prognozowania LSTM

W tej sekcji dopasujemy LSTM do problemu.

Przygotowanie danych LSTM

Pierwszym krokiem jest przygotowanie zbioru danych o zanieczyszczeniach dla LSTM.

Obejmuje to sformułowanie zbioru danych jako nadzorowanego problemu uczenia się i normalizację zmiennych wejściowych.

Sformułujemy nadzorowany problem uczenia się jako przewidywanie zanieczyszczenia w bieżącej godzinie

To sformułowanie jest proste i przeznaczone tylko do tej demonstracji. Niektóre alternatywne sformułowania, które możesz zbadać, obejmują:

  • Przewiduj zanieczyszczenie na następną godzinę na podstawie warunków pogodowych i zanieczyszczenia w ciągu ostatnich 24 godzin.
  • Przewidzieć zanieczyszczenie na następną godzinę, jak wyżej, biorąc pod uwagę „spodziewane” warunki pogodowe na następną godzinę.

Możemy przekształcić zestaw danych za pomocą series_to_supervised () funkcja rozwinięta w poście na blogu:

Po pierwsze "zanieczyszczenie.csv”Zestaw danych jest ładowany. Funkcja kierunku wiatru jest kodowana za pomocą etykiety (kodowana w liczbach całkowitych). W przyszłości może to być zakodowane na gorąco, jeśli chcesz go zbadać.

Następnie wszystkie funkcje są normalizowane, a następnie zbiór danych jest przekształcany w nadzorowany problem uczenia się. Następnie usuwa się zmienne pogodowe dla przewidywanej godziny

Pełna lista kodów znajduje się poniżej.

Możesz być również zainteresowany