Quando ho scritto Esplorazione del modello di rete neurale LSTM per le serie temporali nel gennaio 2022, il mio obiettivo era mostrare con quanta facilità la rete neurale avanzata potesse essere implementata in Python utilizzando scalauna libreria di serie temporali che ho sviluppato per facilitare il mio lavoro e i miei progetti. Non pensavo che sarebbe stato visualizzato più di decine di migliaia di volte e sarebbe apparso come il primo risultato su Google durante la ricerca di “lstm Forecasting Python” per oltre un anno dopo averlo pubblicato (quando ho controllato oggi, era ancora il numero due) .
Non ho cercato di richiamare molta attenzione su quell’articolo perché non avevo mai pensato, e continuo a non pensare, che fosse molto bello. Non è mai stato pensato come una guida sul modo migliore per implementare il modello LSTM, ma piuttosto come una semplice esplorazione della sua utilità per la previsione delle serie temporali. Ho provato a rispondere a domande come: cosa succede quando esegui il modello con parametri predefiniti, cosa succede quando regoli i suoi parametri in questo o quello, con quanta facilità può essere battuto da altri modelli su determinati set di dati, ecc. Tuttavia, a giudicare dai post del blog, dai taccuini Kaggle e persino dal Corso Udemy che continuo a vedere apparire con il codice di quell’articolo copiato alla lettera, è chiaro che molte persone prendevano il pezzo per il primo valore, non per il secondo. Ora capisco che non ho espresso chiaramente le mie intenzioni.
Oggi, per approfondire quell’articolo, voglio mostrare come si dovrebbe applicare il modello di rete neurale LSTM, o almeno come lo applicherei io, per realizzare appieno il suo valore per i problemi di previsione delle serie temporali. Da quando ho scritto il primo articolo, siamo stati in grado di aggiungere molte funzionalità nuove e innovative alla libreria scalecast che rendono l’utilizzo del modello LSTM molto più semplice e utilizzerò questo spazio per esplorare alcuni dei miei preferiti. Esistono cinque applicazioni per LSTM che penso funzioneranno tutte in modo fantastico utilizzando la libreria: previsione univariata, previsione multivariata, previsione probabilistica, previsione probabilistica dinamica e trasferimento di apprendimento.
Prima di iniziare, assicurati di eseguire sul terminale o sulla riga di comando:
pip install --upgrade scalecast
Si trova il taccuino completo sviluppato per questo articolo Qui.
Un’ultima nota: in ogni esempio, potrei usare i termini “RNN” e “LSTM” in modo intercambiabile. In alternativa, l’RNN può essere visualizzato su un dato grafico di una previsione LSTM. La rete neurale della memoria a breve termine (LSTM) è un tipo di rete neurale ricorrente (RNN), con parametri aggiuntivi relativi alla memoria. In scala, il rnn
La classe del modello può essere utilizzata per adattare sia semplici celle RNN che LSTM nei modelli portati da tensoreflusso.
Il modo più comune e ovvio per utilizzare il modello LSTM è quando si affronta un semplice problema di previsione univariata. Sebbene il modello si adatti a molti parametri che dovrebbero renderlo abbastanza sofisticato da apprendere in modo efficace tendenze, stagionalità e dinamiche a breve termine in una determinata serie temporale, ho scoperto che funziona molto meglio con i dati stazionari (dati che non mostrano tendenze o stagionalità). Quindi, con il set di dati sui passeggeri aerei, disponibile su Kaggle con una licenza Open Database: possiamo facilmente creare una previsione accurata e affidabile utilizzando iperparametri abbastanza semplici, se semplicemente detrendiamo e destagioniamo i dati:
transformer = Transformer(
transformers = (
('DetrendTransform',{'poly_order':2}),
'DeseasonTransform',
),
)
Vogliamo anche assicurarci di ripristinare i risultati al livello originale una volta terminato:
reverter = Reverter(
reverters = (
'DeseasonRevert',
'DetrendRevert',
),
base_transformer = transformer,
)
Ora possiamo specificare i parametri di rete. Per questo esempio utilizzeremo 18 ritardi, uno strato, una funzione di attivazione tanh e 200 epoche. Sentiti libero di esplorare i tuoi parametri migliori!
def forecaster(f):
f.set_estimator('rnn')
f.manual_forecast(
lags = 18,
layers_struct = (
('LSTM',{'units':36,'activation':'tanh'}),
),
epochs=200,
call_me = 'lstm',
)
Combina tutto in una pipeline, esegui il modello e visualizza visivamente i risultati:
pipeline = Pipeline(
steps = (
('Transform',transformer),
('Forecast',forecaster),
('Revert',reverter),
)
)f = pipeline.fit_predict(f)
f.plot()
plt.show()
Fonte: towardsdatascience.com