Monimuuttujainen aikasarjaennuste LSTM-moduuleilla Kerasissa

Monimuuttujainen aikasarjaennuste LSTM-moduuleilla Kerasissa

Neuraaliverkot, kuten toistuvat pitkät lyhytaikaiset muistit (LSTM), pystyvät mallinnamaan ongelmat melkein saumattomasti useilla tulomuuttujilla.

Tästä on suuri etu aikasarjojen ennustamisessa, jossa klassisia lineaarisia menetelmiä voi olla vaikea mukauttaa monen muuttujan tai monen syötteen ennustamisongelmiin.

Tässä opetusohjelmassa huomaat, kuinka voit kehittää LSTM-malli monen muuttujan aikasarjojen ennustamiseen Keras-syväoppimiskirjaston kanssa.

Tämän opetusohjelman suorittamisen jälkeen tiedät:

  • Kuinka muuntaa raaka aineisto sellaiseksi, jota voimme käyttää aikasarjojen ennustamiseen.
  • Kuinka valmistella tietoja ja sovittaa LSTM monivaiheiseen aikasarjojen ennustusongelmaan.
  • Kuinka tehdä ennuste ja skaalata tulos takaisin alkuperäisiin yksiköihin.

Käynnistä projekti uuden kirjani kanssa Deep Learning for Time Series Forecasting, mukaan lukien vaiheittaiset oppaat ja Python-lähdekoodi tiedostot kaikille esimerkeille.

Aloitetaan.

  • Päivitä elokuu / 2017: Korjattu vika, jossa yhatia verrattiin obs: ään edellisessä aikavaiheessa laskettaessa lopullista RMSE: tä. Kiitos, Songbin Xu ja David Righart.
  • Päivitä lokakuu / 2017: Lisätty uusi esimerkki siitä, kuinka harjoitella useilla aikaisemmilla aikavaiheilla yleisen kysynnän vuoksi.
  • Päivitä syyskuu 2018: Päivitetty linkki tietojoukkoon.
  • Päivitä kesäkuu / 2020: Korjattu puuttuva tuonti LSTM-tietojen valmisteluesimerkille.

Opetusohjelman yleiskatsaus

Tämä opetusohjelma on jaettu 4 osaan; he ovat:

  1. Ilman pilaantumisen ennuste
  2. Perustietojen valmistelu
  3. Monimuuttujainen LSTM-ennustemalli
    1. LSTM-tietojen valmistelu
    2. Määritä ja sovi malli
    3. Arvioi malli
    4. Täydellinen esimerkki
  4. Juna useilla viiveillä

Python-ympäristö

Tässä opetusohjelmassa oletetaan, että sinulla on asennettuna Python SciPy -ympäristö. Suosittelen, että käytät Python 3: ta tämän opetusohjelman kanssa.

Sinulla on oltava asennettuna Keras (2.0 tai uudempi) joko TensorFlow- tai Theano-taustalla, Ideally Keras 2.3 ja TensorFlow 2.2 tai uudempi.

Opetusohjelmassa oletetaan myös, että scikit-learn, Pandas, NumPy ja Matplotlib on asennettu.

Jos tarvitset apua ympäristössäsi, katso tämä viesti:

Tarvitsetko apua taidon Deep Learning for Time Series kanssa?

Suorita ilmainen 7 päivän sähköpostin kaatumiskurssini nyt (esimerkkikoodilla).

Napsauta rekisteröityäksesi ja hanki myös ilmainen PDF Ebook -versio kurssista.

Lataa ILMAINEN minikurssi

1. Ilman pilaantumisen ennustaminen

Tässä opetusohjelmassa aiomme käyttää ilmanlaadun tietojoukkoa.

Tämä on tietojoukko, joka raportoi säästä ja pilaantumistasosta joka tunti viiden vuoden ajan Yhdysvaltain suurlähetystössä Pekingissä, Kiinassa.

Tiedot sisältävät päivämäärän ja kellonajan, PM2,5-pitoisuudeksi kutsuttu saaste ja säätiedot, mukaan lukien kastepiste, lämpötila, paine, tuulen suunta, tuulen nopeus sekä lumen ja sateen kumulatiivisen tuntimäärän. Raakatietojen täydellinen ominaisuuksien luettelo on seuraava:

  1. Ei: rivinumero
  2. vuosi: tämän rivin tietojen vuosi
  3. kuukausi: tämän kuukauden tietojen kuukausi
  4. päivä: tämän rivin tietojen päivä
  5. tunnin: tunti tietoja tällä rivillä
  6. pm2.5: PM2,5-pitoisuus
  7. DEWP: Kastepiste
  8. LÄMPÖTILA: Lämpötila
  9. PRES: Paine
  10. cbwd: Yhdistetty tuulen suunta
  11. Iws: Kumulatiivinen tuulen nopeus
  12. On: Laskutunnit lunta
  13. Ir: Sateen tuntimäärä yhteensä

Voimme käyttää näitä tietoja ja kehittää ennusteongelman, jossa ennustamme edeltävien tuntien sääolosuhteet ja pilaantumisen seuraavaan tuntiin.

Tätä tietoaineistoa voidaan käyttää muiden ennusteongelmien muodostamiseen.
Onko sinulla hyviä ideoita? Kerro minulle alla olevissa kommenteissa.

Voit ladata tietojoukon UCI Machine Learning -tietovarastosta.

Päivittää, Olen peilannut tietojoukon täällä, koska UCI on tullut epäluotettavaksi:

Lataa tietojoukko ja aseta se nykyiseen työhakemistoon tiedostonimellä “raw.csv“.

2. Perustietojen valmistelu

Tiedot eivät ole käyttövalmiita. Meidän on valmisteltava se ensin.

Alla ovat muutamat ensimmäiset rivit raakatiedostosta.

Ensimmäinen vaihe on yhdistää päivämäärä-aika-tiedot yhdeksi päivämäärä-kelloksi, jotta voimme käyttää sitä indeksinä Pandassa.

Nopea tarkistus paljastaa pm2,5: n NA-arvot ensimmäisten 24 tunnin aikana. Siksi meidän on poistettava ensimmäinen tietorivi. Tietojoukossa on myös muutama hajallaan oleva NA-arvo; voimme merkitä ne nyt 0 arvolla.

Alla oleva komentosarja lataa raaka-aineiston ja jäsentää päivämäärä- ja aikatiedot Pandas DataFrame -hakemistona. ”Ei” -sarake pudotetaan ja kullekin sarakkeelle määritetään selkeämmät nimet. Lopuksi NA-arvot korvataan 0-arvoilla ja ensimmäiset 24 tuntia poistetaan.

”Ei” -sarake pudotetaan ja kullekin sarakkeelle määritetään selkeämmät nimet. Lopuksi NA-arvot korvataan 0-arvoilla ja ensimmäiset 24 tuntia poistetaan.

Esimerkin suorittaminen tulostaa muunnetun tietojoukon 5 ensimmäistä riviä ja tallentaa tietojoukonsaastuminen.csv“.

Nyt kun meillä on tiedot helppokäyttöisessä muodossa, voimme luoda jokaisesta sarjasta nopean kuvan ja nähdä, mitä meillä on.

Alla oleva koodi lataa uudensaastuminen.csv”Tiedosto ja piirtää jokaisen sarjan erillisenä osajohtona, paitsi tuulen nopeuden dir, joka on kategorinen.

Esimerkin suorittaminen luo kaavion, jossa on 7 alakäyrää, jotka näyttävät kunkin muuttujan 5 vuoden tiedot.

Viivakaaviot ilmansaasteiden aikasarjoista

Viivakaaviot ilmansaasteiden aikasarjoista

3. Monimuuttujainen LSTM-ennustemalli

Tässä osassa sovitamme ongelmaan LSTM: n.

LSTM-tietojen valmistelu

Ensimmäinen vaihe on valmistaa saastumistietojoukko LSTM: ää varten.

Tähän sisältyy tietojoukon muotoilu valvotuksi oppimisongelmaksi ja syötemuuttujien normalisointi.

Kehitämme valvotun oppimisongelman ennustamalla pilaantumisen kuluvalla tunnilla

Tämä muotoilu on yksinkertainen ja vain tätä esittelyä varten. Joitakin vaihtoehtoisia formulaatioita, joita voit tutkia, ovat:

  • Ennusta saaste seuraavalle tunnille sääolosuhteiden ja viimeisen 24 tunnin pilaantumisen perusteella.
  • Ennusta pilaantuminen seuraavalle tunnille kuten yllä ja ottaen huomioon seuraavan tunnin "odotetut" sääolosuhteet.

Voimme muuntaa tietojoukon käyttämällä sarjan_valvottu () blogikirjoituksessa kehitetty toiminto:

Ensinnäkinsaastuminen.csv”Tietojoukko ladataan. Tuulen suuntaominaisuus on koodattu etiketillä (koodattu kokonaisluku). Tämä voi olla koodattu myös jatkossa, jos olet kiinnostunut tutkimaan sitä.

Seuraavaksi kaikki ominaisuudet normalisoidaan, sitten aineisto muutetaan valvotuksi oppimisongelmaksi. Sen jälkeen ennustettavan tunnin

Täydellinen koodiluettelo on alla.

Saatat myös olla kiinnostunut