Multivariate tidsserieprognoser med LSTM i Keras

Multivariate tidsserieprognoser med LSTM i Keras

Nevrale nettverk som tilbakevendende nevrale nettverk som Long Short-Term Memory (LSTM) er i stand til nesten sømløst å modellere problemer med flere inngangsvariabler.

Dette er en stor fordel i prognoser for tidsserier, hvor klassiske lineære metoder kan være vanskelige å tilpasse til multivariate eller flere inputprognoser.

I denne veiledningen vil du oppdage hvordan du kan utvikle en LSTM-modell for multivariate tidsserieprognoser med Keras deep learning-biblioteket.

Etter å ha fullført denne opplæringen, vil du vite:

  • Hvordan transformere et rått datasett til noe vi kan bruke til prognoser for tidsserier.
  • Hvordan forberede data og tilpasse en LSTM for et multivariat tidsserieprognoseproblem.
  • Hvordan lage en prognose og omskalere resultatet tilbake til de opprinnelige enhetene.

Start prosjektet ditt med min nye bok Deep Learning for Time Series Forecasting, inkludert trinnvise veiledninger og Python kildekode filer for alle eksemplene.

La oss komme i gang.

  • Oppdater Aug / 2017: Løst en feil der yhat ble sammenlignet med obs i forrige tidstrinn ved beregning av den endelige RMSE. Takk, Songbin Xu og David Righart.
  • Oppdater oktober / 2017: Lagt til et nytt eksempel som viser hvordan du kan trene på flere trinn før tid på grunn av populær etterspørsel.
  • Oppdater Sep / 2018: Oppdatert lenke til datasettet.
  • Oppdater juni / 2020: Fast manglende import for LSTM-data prep eksempel.

Opplæringsoversikt

Denne opplæringen er delt inn i 4 deler; de er:

  1. Prognoser for luftforurensning
  2. Grunnleggende data forberedelse
  3. Multivariat LSTM-prognosemodell
    1. Forberedelse av LSTM-data
    2. Definer og tilpass modell
    3. Evaluer modell
    4. Komplett eksempel
  4. Tren på trinn med flere forsinkelser

Python-miljø

Denne opplæringen forutsetter at du har et Python SciPy-miljø installert. Jeg anbefaler at du bruker Python 3 med denne veiledningen.

Du må ha Keras (2.0 eller høyere) installert med enten TensorFlow eller Theano backend, ideelt sett Keras 2.3 og TensorFlow 2.2, eller høyere.

Opplæringen forutsetter også at du har scikit-learning, Pandas, NumPy og Matplotlib installert.

Hvis du trenger hjelp med miljøet ditt, kan du se dette innlegget:

Trenger du hjelp med Deep Learning for Time Series?

Ta mitt gratis 7-dagers kollisjonskurs på e-post nå (med eksempelkode).

Klikk for å registrere deg og få også en gratis PDF-bokversjon av kurset.

Last ned GRATIS minikurs

1. Prognoser for luftforurensning

I denne opplæringen skal vi bruke datasettet for luftkvalitet.

Dette er et datasett som rapporterer om været og forurensningsnivået hver time i fem år ved den amerikanske ambassaden i Beijing, Kina.

Dataene inkluderer dato og klokkeslett, forurensningen kalt PM2.5-konsentrasjon, og værinformasjonen, inkludert duggpunkt, temperatur, trykk, vindretning, vindhastighet og det kumulative antall timer med snø og regn. Den komplette funksjonslisten i rådataene er som følger:

  1. Nei: radnummer
  2. år: år med data i denne raden
  3. måned: måned med data i denne raden
  4. dag: dag med data i denne raden
  5. time: time med data i denne raden
  6. pm2.5: PM2,5 konsentrasjon
  7. DEWP: Duggpunkt
  8. TEMP: Temperatur
  9. PRES: Press
  10. cbwd: Kombinert vindretning
  11. Iws: Kumulert vindhastighet
  12. Er: Kumulerte timer med snø
  13. Ir: Kumulerte timer med regn

Vi kan bruke disse dataene og ramme et prognoseproblem der vi, med tanke på værforholdene og forurensningen for tidligere timer, forutser forurensningen neste time.

Dette datasettet kan brukes til å ramme inn andre prognoseproblemer.
Har du gode ideer? Gi meg beskjed i kommentarene nedenfor.

Du kan laste ned datasettet fra UCI Machine Learning Repository.

Oppdater, Jeg har speilet datasettet her fordi UCI har blitt upålitelig:

Last ned datasettet og legg det i din nåværende arbeidskatalog med filnavnet “raw.csv“.

2. Forberedelse av grunnleggende data

Dataene er ikke klare til bruk. Vi må forberede det først.

Nedenfor er de første radene i det rå datasettet.

Det første trinnet er å konsolidere dato-klokkeslettinformasjonen til en enkelt dato-tid slik at vi kan bruke den som en indeks i Pandas.

En rask sjekk avslører NA-verdier for pm2.5 for det første døgnet. Vi må derfor fjerne den første dataraden. Det er også noen få spredte "NA" -verdier senere i datasettet; vi kan merke dem med 0 verdier for nå.

Skriptet nedenfor laster det rå datasettet og parser informasjon om dato og klokkeslett som Pandas DataFrame-indeks. “Nei” -kolonnen slippes, og deretter spesifiseres klarere navn for hver kolonne. Til slutt erstattes NA-verdiene med "0" -verdier, og de første 24 timene fjernes.

“Nei” -kolonnen slippes, og deretter spesifiseres klarere navn for hver kolonne. Til slutt erstattes NA-verdiene med "0" -verdier, og de første 24 timene fjernes.

Å kjøre eksemplet skriver ut de første 5 radene i det transformerte datasettet og lagrer datasettet i “forurensning.csv“.

Nå som vi har dataene i en brukervennlig form, kan vi lage et raskt plot av hver serie og se hva vi har.

Koden nedenfor laster inn den nye “forurensning.csv”-Fil og plotter hver serie som en egen delplott, unntatt vindhastighet dir, som er kategorisk.

Når du kjører eksemplet, opprettes et plot med 7 delplotter som viser 5 års data for hver variabel.

Linjeplott av tidsserie for luftforurensning

Linjeplott av tidsserie for luftforurensning

3. Multivariat LSTM-prognosemodell

I denne delen vil vi tilpasse en LSTM til problemet.

Forberedelse av LSTM-data

Det første trinnet er å forberede forurensningsdatasettet for LSTM.

Dette innebærer å innramme datasettet som et overvåket læringsproblem og normalisere inputvariablene.

Vi vil innramme det overvåkede læringsproblemet slik at det forutsier forurensning i den aktuelle timen

Denne formuleringen er grei og bare for denne demonstrasjonen. Noen alternative formuleringer du kan utforske inkluderer:

  • Forutsi forurensningen den neste timen basert på værforhold og forurensning det siste døgnet.
  • Forutsi forurensningen for den neste timen som ovenfor og gitt de "forventede" værforholdene for neste time.

Vi kan transformere datasettet ved hjelp av series_to_supervised () funksjon utviklet i blogginnlegget:

Først, “forurensning.csv”Datasettet er lastet. Vindretningsfunksjonen er merket kodet (heltall kodet). Dette kan ytterligere være kodet i fremtiden hvis du er interessert i å utforske det.

Deretter normaliseres alle funksjonene, og deretter blir datasettet forvandlet til et overvåket læringsproblem. Værvariablene for timen som skal forutsies

Den komplette kodelisten er gitt nedenfor.

Du kan også være interesseret i