Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
di
sistemi
intelligenti
Time
Series
Neural
Network
Fabio
Aiuto
Federico
Bianucci
Irene
Bont
Sommario
Corali
di
Bach
....................................................................................................................................................
3
Obiettivi
........................................................................................................................................................
3
Risoluzione
....................................................................................................................................................
4
Suddivisione
dei
dati
.....................................................................................................................................
7
Grafici
..........................................................................................................................................................
11
Advanced
Script
..........................................................................................................................................
15
Dati
significativi
...........................................................................................................................................
17
Osservazioni
................................................................................................................................................
18
Cosa
fare
perci?
........................................................................................................................................
19
Predizione
dei
picchi
di
ozono
nellaria
..........................................................................................................
20
Obiettivi
......................................................................................................................................................
20
Elaborazione
dei
dati
..................................................................................................................................
20
Addestramento
...........................................................................................................................................
23
Grafici
..........................................................................................................................................................
25
Osservazioni
................................................................................................................................................
27
Conclusioni
..................................................................................................................................................
42
Indice
delle
figure
Figura
1
-
Importazione
dati
..............................................................................................................................
4
Figura
2
-
Creazione
delle
variabili
....................................................................................................................
4
Figura
3
-
nnstart
...............................................................................................................................................
5
Figura
4
-
Rete
NAR
...........................................................................................................................................
5
Figura
5
-
Selezione
dei
dati
..............................................................................................................................
6
Figura
6
-
Suddivisione
dei
dati
.........................................................................................................................
8
Figura
7
-
Training
.............................................................................................................................................
9
Figura
8
-
Addestramento
della
rete
...............................................................................................................
10
Figura
9
-
Grafico
della
Performance
..............................................................................................................
11
Figura
10
-
Grafico
dell'autocorrelazione
dell'errore
......................................................................................
12
Figura
11
-
Grafico
della
risposta
della
serie
storica
.......................................................................................
13
Figura
12
-
Istogramma
dell'errore
.................................................................................................................
13
Figura
13
-
Grafico
della
regressione
..............................................................................................................
14
Figura
14
-
Rete
neurale
NAR
in
anello
chiuso
................................................................................................
16
Figura
15
-
Addestramento
della
nuova
rete
..................................................................................................
18
Figura
16
-
Grafico
della
performance
............................................................................................................
19
Figura
17
-
Rete
neurale
NARX
........................................................................................................................
23
Figura
18
-
Addestramento
della
rete
.............................................................................................................
24
Figura
19
-
Grafico
della
performance
............................................................................................................
25
Figura
20
-
Grafico
dell'autocorrelazione
dell'errore
......................................................................................
26
Figura
21
-
Grafico
della
correlazione
tra
input
e
errore
................................................................................
26
Figura
22
-
Addestramento
della
nuova
rete
..................................................................................................
29
Figura
23
-
Grafico
della
performance
............................................................................................................
30
Figura
24
-
Grafico
dell'autocorrelazione
dell'errore
......................................................................................
31
Figura
25
-
Grafico
della
regressione
..............................................................................................................
31
Figura
26
-
Grafico
della
correlazione
di
input
e
errore
..................................................................................
33
Figura
27
-
Addestramento
della
rete
finale
...................................................................................................
34
Figura
28
-
Grafico
della
performance
............................................................................................................
35
Figura
29
-
Grafico
dell'autocorrelazione
........................................................................................................
36
Figura
30
-
Grafico
della
correlazione
tra
input
e
errore
................................................................................
36
Figura
31
-
Rete
NARX
in
anello
chiuso
con
funzione
di
trasferimento
lineare
..............................................
39
Figura
32
-
Valori
reali
predetti
dalla
rete
.......................................................................................................
40
Figura
33
-
Rete
NARX
in
anello
chiuso
con
funzione
di
trasferimento
a
soglia
.............................................
41
Figura
34
-
Grafico
dei
valori
interi
predetti
dalla
rete
...................................................................................
42
Corali
di
Bach
Obiettivi
Lo scopo del progetto analizzare una serie storica e riuscire a creare una rete neurale, addestrarla e fare in modo che riesca a prevedere come tale serie debba continuare. Sul sito dellUCI Machine Learning Repository abbiamo deciso di analizzare un dataset delle corali di Bach. Una corale una serie di note in cui ogni nota presenta determinate caratteristiche. Il dataset in questione formato da 100 corali, di cui per semplicit stata codificata in formato Lisp la sola linea del soprano (originariamente le corali erano a 4 voci). Questo perch la singola linea melodica del soprano pu essere studiata indipendentemente dalle altre voci. Con la serie in questione dovremo riuscire a creare una rete neurale che abbia capito le propriet melodiche della corale e riesca a riprodurre note nuove che mantengono le caratteristiche musicali dellintera corale. Verificheremo poi se la rete opportunamente addestrata abbia generato lavori originali e accettabili. Ogni nota delle corali codificata con 6 attributi: a) b) c) d) Tempo di partenza, misurato in sedicesimi dallinizio della corale (tempo 0). Tono, numero MIDI (60 = C4, 61 = C#4, 72 = C5, etc.). Durata, misurata in sedicesimi di nota. Chiave, numero di diesis o bemolle, positiva se la chiave ha dei diesis, negativa se la chiave ha dei bemolle. e) Tempo, in sedicesimi per battuta. f) Corona, vero o falso, dipende se la nota sta sotto corona o no. Il dominio di ogni attributo il seguente: a) b) c) d) e) f) {0,1,2,...} {60,...,75} {1,...,16} {-4,...,+4} {12,16} {0,1}
Non ci sono attributi con valori mancanti. Le sezioni ripetute (|: :|) non sono state codificate (per es. |:A:|B stato codificato come AB).
Risoluzione
Per addestrare la nostra rete abbiamo scelto la corale numero 58 del dataset, composta da 86 elementi o note. Abbiamo importato la matrice 86x6 opportunamente costruita nel workspace di Matlab dal file chorales.txt. Il dataset originario era stato codificato in linguaggio Lisp, perci, per importare la struttura in Matlab, abbiamo suddiviso ogni nota per ogni riga della matrice, mentre le colonne rappresentano i relativi attributi.
Figura
1
-
Importazione
dati
Figura
2
-
Creazione
delle
variabili
Abbiamo quindi avviato il Neural Network Tool di Matlab con il comando nnstart.
Figura
3
-
nnstart
Di l si scelto di usare il Time Series mediante una rete neurale NAR (nonlinear autoregressive).
Figura
4
-
Rete
NAR
Il nostro obiettivo quello di predire valori futuri della serie utilizzando valori passati della serie stessa. Si utilizza una rete di tipo NAR, in quanto non sono presenti variabili esogene, per cui la predizione delluscita y(t) data da d (nel nostro caso, come vedremo pi avanti, 4) valori passati di y(t). Non esistono variabili esogene perch tutti gli attributi della serie in input sono attributi dei target e che quindi vogliamo necessariamente in uscita. Le variabili esogene, invece, sono per definizione variabili che influiscono sulluscita della rete ma che non fanno parte del target.
Figura
5
-
Selezione
dei
dati
Lerrore sul test set non viene usato durante laddestramento della rete, ma viene usato per confrontare modelli diversi con i pesi gi definiti. Se lerrore sul test set raggiunge un minimo ad un valore di iterazione significativamente diverso dallerrore sul validation set, questo pu indicare una cattiva divisione dei dati. Infatti i due set di dati sono generalmente simili nel caso in cui i campioni scelti sono significativi.
I dati per la validazione e il test sono stati settati entrambi al 15% dei dati originali. Con queste impostazioni, i vettori di ingresso e target saranno casualmente divisi in 3 set: Il 70% sar usato per il training Il 15% sar usato per validare la rete, ovvero per capire se la rete sta generalizzando e quindi fermare il training prima di un overfitting Il restante 15% sar usato per un test completamente indipendente sulla generalizzazione della rete.
Figura
6
-
Suddivisione
dei
dati
La rete NAR che abbiamo creato una rete a due livelli, con una funzione di trasferimento sigmoide nello strato nascosto e una funzione di trasferimento lineare nello strato di uscita. Il numero di default di neuroni nascosti di 10, mentre il numero di default di ritardi di 2, ma in questo caso lo abbiamo cambiato a 4 per migliorare le performance della rete. Cos facendo luscita y(t) dipender dei valori della y(t) nei 4 istanti precedenti. Tale scelta legata ad una motivazione strettamente musicale in quanto il tempo in chiave della corale 4/4 indicando quindi una periodicit di base di 4 note.
Figura
7
-
Training
A questo punto abbiamo addestrato la rete. Laddestramento durato 58 epoche dove unepoca rappresenta un ciclo di presentazione degli esempi del training set. Dallimmagine si vede che laddestramento andato avanti finch lerrore sulla validazione non ha smesso di diminuire dopo 6 iterazioni (validation stop).
Figura
8
-
Addestramento
della
rete
Grafici
Il primo grafico che ci viene presentato il grafico della performance del training, della validazione e del test.
Questo grafico ci consente di controllare un potenziale overfitting. Dallimmagine si vede che gli errori di addestramento, validazione e test diminuiscono tutti fino alliterazione 52, dopo la quale notiamo un incremento anche se minimo dellerrore sul validation set che indica che la rete non riesce, da quel momento in poi, a generalizzare. Vengono dunque congelati i pesi della rete ottenuti dal training set alla 52epoca. Con tale pesi la rete d un errore quadratico medio di 1,7544. Laumento dellerrore sul validation set e la contemporanea diminuzione dellerrore sul training set ci indica in presenza di un possibile overfitting. Dal validation stop in poi le prestazioni sui dati di allenamento aumentano mentre le prestazioni sui dati di test sono peggiori.
11
Interessante anche il grafico dellautocorrelazione dellerrore. Esso descrive come gli errori di predizione sono correlati nel tempo con se stessi. Per un modello di predizione perfetto, bisognerebbe che ci fosse un solo valore non nullo in corrispondenza dello 0 (questo lerrore quadratico medio). Vorrebbe dire che gli errori di predizione sono completamente scorrelati dagli altri. Il risultato ottenuto comunque molto buono in quanto le correlazioni, eccetto quella in corrispondenza dello 0, cadono approssimativamente nellintervallo di confidenza del 95%, tanto che si pu dire che il modello adeguato.
Figura
10
-
Grafico
dell'autocorrelazione
dell'errore
12
Il grafico, invece, della risposta della serie storica mostra gli input, i target e gli errori nel tempo. Esso indica anche quali punti e in quale momento sono stati selezionati per il training, il testing e la validazione.
C poi il grafico dellistogramma dellerrore che mostra il numero di volte in cui un certo valore dellerrore si presenta per i tre diversi tipi di set. Notiamo che con ci sono valori di errore significativamente lontani dallerrore nullo quindi tutte le epoche hanno prodotto un errore piuttosto basso.
13
Dal grafico emerge che il modello molto buono. Le rette di regressione hanno tutte un coefficiente prossimo a 1 quindi la retta ideale si sovrappone alla retta ottenuta ad ogni prova. Tale retta minimizza la somma dei quadrati degli scarti. Non essendoci pallini estremamente lontani dalla retta vuol dire che per tutte le epoche si sono registrati degli errori piuttosto bassi.
Advanced
Script
Di seguito abbiamo riportato lo script generato per addestrare e testare la nostra rete.
% % % % % % % Solve an Autoregression Time-Series Problem with a NAR Neural Network Script generated by NTSTOOL Created Mon Jan 10 23:45:58 CET 2011 This script assumes this variable is defined: chorales - feedback time series.
targetSeries = tonndata(chorales,false,false); % Create a Nonlinear Autoregressive Network feedbackDelays = 1:4; hiddenLayerSize = 10; net = narnet(feedbackDelays,hiddenLayerSize); % Choose Feedback Pre/Post-Processing Functions % Settings for feedback input are automatically applied to feedback output % For a list of all processing functions type: help nnprocess net.inputs{1}.processFcns = {'removeconstantrows','mapminmax'}; % Prepare the Data for Training and Simulation % The function PREPARETS prepares timeseries data for a particular network, % shifting time by the minimum amount to fill input states and layer states. % Using PREPARETS allows you to keep your original time series data unchanged, while % easily customizing it for networks with differing numbers of delays, with % open loop or closed loop feedback modes. [inputs,inputStates,layerStates,targets] = preparets(net,{},{},targetSeries); % Setup Division of Data for Training, Validation, Testing % For a list of all data division functions type: help nndivide net.divideFcn = 'dividerand'; % Divide data randomly net.divideMode = 'time'; % Divide up every value net.divideParam.trainRatio = 70/100; net.divideParam.valRatio = 15/100; net.divideParam.testRatio = 15/100; % Choose a Training Function % For a list of all training functions type: help nntrain net.trainFcn = 'trainlm'; % Levenberg-Marquardt % Choose a Performance Function % For a list of all performance functions type: help nnperformance net.performFcn = 'mse'; % Mean squared error % Choose Plot Functions % For a list of all plot functions type: help nnplot net.plotFcns = {'plotperform','plottrainstate','plotresponse', ... 'ploterrcorr', 'plotinerrcorr'};
15
% Test the Network outputs = net(inputs,inputStates,layerStates); errors = gsubtract(targets,outputs); performance = perform(net,targets,outputs) % Recalculate Training, Validation and Test Performance trainTargets = gmultiply(targets,tr.trainMask); valTargets = gmultiply(targets,tr.valMask); testTargets = gmultiply(targets,tr.testMask); trainPerformance = perform(net,trainTargets,outputs) valPerformance = perform(net,valTargets,outputs) testPerformance = perform(net,testTargets,outputs) % View the Network view(net) % Plots % Uncomment these lines to enable various plots. %figure, plotperform(tr) %figure, plottrainstate(tr) %figure, plotresponse(targets,outputs) %figure, ploterrcorr(errors) %figure, plotinerrcorr(inputs,errors) % Closed Loop Network % Use this network to do multi-step prediction. % The function CLOSELOOP replaces the feedback input with a direct % connection from the outout layer. netc = closeloop(net); [xc,xic,aic,tc] = preparets(netc,{},{},targetSeries); yc = netc(xc,xic,aic); perfc = perform(net,tc,yc)
view(netc)
16
Dati
significativi
Per trarre ulteriori conclusioni abbiamo riportato la struttura della nostra rete (net):
>> net net = Neural Network name: 'NAR Neural Network' efficiency: .cacheDelayedInputs, .flattenTime, .memoryReduction userdata: (your custom info) dimensions: numInputs: 1 numLayers: 2 numOutputs: 1 numInputDelays: 4 numLayerDelays: 0 numFeedbackDelays: 0 numWeightElements: 214 sampleTime: 1
17
Osservazioni
Abbiamo evidenziato come il numero di pesi di 214. Quando abbiamo costruito la rete sapevamo che fosse necessario dimensionare lo strato nascosto affinch il rapporto pesi/dati fosse accettabile ovvero che i dati fossero almeno 5 volte pi numerosi dei pesi.
A questo punto occorre considerare che la nostra serie composta da soltanto 86 elementi, troppo pochi per pretendere che la rete apprenda bene il comportamento da tenere. A riprova di ci ci viene incontro la struttura di yc, larray di celle contenente la serie predetta. La predizione viene fatta quando la rete termina laddestramento e vengono retroazionate le uscite. La rete a quel punto prevedr valori di y(t) solo in base a valori precedentemente predetti. Analizzando il contenuto dellarray si nota che dal punto di vista prettamente musicale esso non ha alcun senso. La rete presenta infatti grafici che evidenziano un corretto addestramento ma nonostante ci non riesce a generalizzare a causa delloverfitting. Si potrebbe pensare di ridurre i pesi della rete attraverso la riduzione dei neuroni e di ritardi ma in questo modo lerrore aumenterebbe considerevolmente. Verifichiamo quanto detto facendo una prova: lasciamo inalterato il delay e diminuiamo a 8 i neuroni dello strato nascosto:
Figura
15
-
Addestramento
della
nuova
rete
Figura
16
-
Grafico
della
performance
numWeightElements: 172
Il numero dei pesi diminuito, ma il grafico della performance ci conferma quanto ci aspettavamo, cio che i pesi della rete vengono congelati ad un'epoca in cui lerrore quadratico medio aumentato (3,5406). E banale intuire che continuare a diminuire i neuroni dello strato nascosto porta ad un incremento dellerrore ed invece aggiungere neuroni comporterebbe un peggioramento della tendenza di overfitting e dunque predizioni senza senso.
19
Il dataset originale presenta al suo interno valori nulli, che sono stati codificati con il carattere '?'. Per far s che tali valori potessero essere elaborati dalla nostra rete neurale, abbiamo scritto un semplice programma in C++ per sostituirli con la media tra il corrispondente valore precedente e valore successivo. Di seguito il codice:
#include <iostream> #include <fstream> #include <new> using namespace std; int main() { const int row=2000; const int col=73; char* a; double b=100000; ifstream is; is.open("dataset.txt"); if(is.fail()) { cerr<<"Impossibile aprire il file."; return 1; } ofstream os; os.open("dataset2.txt"); if(os.fail()) { cerr<<"Impossibile aprire il file."; return 1; } char* mat[row][col]; for(int i=0; i<row; i++) { for(int j=0; j<col; j++) { is>>a; if (!strcmp(a,"?")) sprintf(a,"%g",b); mat[i][j]=a; os<<mat[i][j]<<"\t"; } os<<"\n"; } is.close(); os.close(); is.open("dataset2.txt"); if(is.fail()) { cerr<<"Impossibile aprire il file."; return 1; } os.open("dataset3.txt"); if(os.fail()) { cerr<<"Impossibile aprire il file."; return 1; } double cella; double media=0; double mat2[row][col]; system("PAUSE"); cout<<"\n"<<"\n";
21
for(int i=0; i<row; i++) { for(int j=0; j<col; j++) { is>>cella; mat2[i][j]=cella; } } for(int i=0; i<row; i++) { for(int j=0; j<col; j++) { if (mat2[i][j]==100000) { int rigadown=i+1; while (mat2[rigadown][j]==100000) rigadown++; media=(mat2[i-1][j]+mat2[rigadown][j])/2; mat2[i][j]=media; } os<<mat2[i][j]<<"\t"; } os<<"\n"; } is.close(); os.close(); system("PAUSE"); return 0; }
Il programma apre in lettura il dataset originale (dataset.txt) e in scrittura un file temporaneo (dataset2.txt). Quindi riscrive il dataset originale nel file temporaneo, sostituendo al carattere '?' l'intero 100000 (valore non presente all'interno del dataset originale). A questo punto il programma apre il file temporaneo (dataset2.txt) in lettura e apre in scrittura il dataset definitivo (dataset3.txt), andando a sostituire ad ogni valore intero 100000 la media tra il corrispondente valore precedente e il corrispondente valore successivo, sempre che anche questo non sia un valore da modificare (in questo caso il programma scende al valore ancora successivo e cos via). Il dataset finale formato da 2000 elementi, ciascuno composto da 73 attributi. Ricordiamo che lultimo attributo di ciascuna rilevazione per lappunto il tasso di ozono presente nellaria dunque il target della nostra rete. Esso rappresenta ci che vogliamo prevedere e di conseguenza fondamentale durante laddestramento, perch i valori gi noti di ozono ci consentono di calcolare la differenza tra ci la rete produce e ci che gi conosciamo essere luscita desiderata. Abbiamo quindi stabilito che, tra tutti gli attributi, 72 (la data viene ignorata) influiscono indirettamente luscita della rete e perci sono le variabili esogene in ingresso e solo il 73 esimo attributo il target.
22
Addestramento
Per prima cosa scegliamo il tipo di rete che vogliamo creare: secondo quanto detto precedentemente la rete adatta al nostro caso la rete NARX.
La prima prova che abbiamo voluto effettuare di vedere il comportamento della rete secondo una struttura che prevede 10 neuroni nello strato nascosto e un delay pari a 2. Dunque durante laddestramento verranno prodotto uscite y(t) che dipenderanno da y(t-1), da y(t-2), da x(t-1) e da x(t-2). La y(t) ottenuta verr cos confrontata con il target y(t) e verr stabilito lerrore che la rete ha commesso. Terminato laddestramento la rete calcoler in maniera indipendente valori di y(t) che dipenderanno sempre da y(t-2), y(t-1), x(t-2) e x(t-1) ma stavolta le y non rappresentano i target bens predizioni della rete che vengono retroazionati in ingresso alla rete stessa.
Figura
17
-
Rete
neurale
NARX
23
Per quanto riguarda la suddivisione dei dati abbiamo lasciato inalterate le percentuali di default che prevedono lutilizzo del 75% per il training set, 15% per il validation set e il 15% per il test set.
Figura
18
-
Addestramento
della
rete
24
Grafici
Figura
19
-
Grafico
della
performance
Dallimmagine si vede che la rete completa velocemente il processo di addestramento. Gli errori di training, validazione e test diminuiscono tutti fino alliterazione 2, dopo la quale notiamo un incremento dellerrore sul validation set, che indica che la rete non riesce, da quel momento in poi, a generalizzare. Vengono dunque congelati i pesi della rete ottenuti dal training set alla 2epoca. Con tali pesi la rete d un errore quadratico medio di 0,0466. Essendo il target formato da valori zero oppure uno, lerrore ottenuto dellordine di grandezza del 5%, quindi concludiamo che molto basso. E importante notare come la curva del test set sembra che nel tempo raggiunga alti valori dellerrore quadratico medio: tale comportamento era da noi preventivato, in quanto la rete ha un elevato numero di neuroni nello strato nascosto, per cui non vi un buon rapporto tra dati e pesi della rete. Un sovradimensionamento della rete non implica necessariamente overfitting, ma in questo caso sembra proprio essersi verificato.
25
Figura
20
-
Grafico
dell'autocorrelazione
dell'errore
Interessante anche il grafico dellautocorrelazione dellerrore. Esso descrive come gli errori sono correlati nel tempo. Per un modello di predizione perfetto, bisognerebbe che ci fosse un solo valore non nullo in corrispondenza dello 0 (questo lerrore quadratico medio). Vorrebbe dire che gli errori di predizione sono completamente scorrelati dagli altri. Il risultato ottenuto comunque molto buono, in quanto le correlazioni, eccetto quella in corrispondenza dello 0, cadono approssimativamente nellintervallo di confidenza, tanto che si pu dire che il modello adeguato.
Figura
21
-
Grafico
della
correlazione
tra
input
e
errore
Questo grafico mostra come gli errori sono correlati con la sequenza di input x(t). Per un modello perfetto di predizioni tutte le correlazioni dovrebbero essere 0. Nel nostro caso linput correlato con lerrore ma comunque tutte le correlazioni cadono allinterno dellintervallo di confidenza.
26
Osservazioni
Laddestramento che abbiamo effettuato ci fornisce valutazioni positive in quanto la rete riesce ad imparare con un errore basso ed i grafici ci confermano che il modello abbastanza buono. Dal grafico della performance abbiamo per individuato delloverfitting suggeritoci dallerrore sul test set. Come precedentemente detto osserviamo che, con il numero di neuroni e delay scelti, la rete sovradimensionata cio abbiamo un rapporto pesi/dati troppo alto. I dati sono 2000, numWeightElements: 1481 quindi il rapporto inferiore a 5.
net = Neural Network name: 'NARX Neural Network' efficiency: .cacheDelayedInputs, .flattenTime, .memoryReduction userdata: (your custom info) dimensions: numInputs: numLayers: numOutputs: numInputDelays: numLayerDelays: numFeedbackDelays: numWeightElements: sampleTime: 2 2 1 2 0 0 1481 1
Detto ci decidiamo di ridimensionare la rete e valutare se questo comporter un miglioramento o peggioramento del processo di addestramento. Innanzitutto abbiamo deciso di aumentare il numero di neuroni nascosti da 10 a 12. Inoltre abbiamo pensato di diminuire il numero di variabili esogene, cercando di scegliere solamente quelle fondamentali. Ad ogni attributo infatti corrisponde una variabile esogena e ci sono alcuni attributi che influiscono maggiormente sulluscita della rete piuttosto che altri, che sono poco rilevanti e che semplicemente sovradimensionano la rete. Leggendo la documentazione sul dataset abbiamo trovato riscontro in questa nostra ipotesi, quando troviamo infatti scritto: only about 10 features among these 72 features have been verified by environmental scientists to be useful and relevant, and there is neither empirical nor theoretical information as of yet on the relevance of the other 60 features.
27
Sempre studiando la documentazione siamo riusciti a circoscrivere un numero ristretto di variabili ritenute da noi fondamentali, associandole a quelle contenute nella formula che il sistema di forecasting descritto utilizza. The following equation summarizes the parametric equation and the parameters involved.
EmFactor (Tmax Tb) SRd O3 = Upwind + --------------------------------------------WSa 0.1 +WSp 0.5+ 1
in which, O3 - Local ozone peak prediction Upwind - Upwind ozone background level EmFactor - Precursor emissions related factor Tmax - Maximum temperature in degrees F Tb - Base temperature where net ozone production begins (50 F) SRd - Solar radiation total for the day WSa - Wind speed near sunrise (using 09-12 UTC forecast mode) WSp - Wind speed mid-day (using 15-21 UTC forecast mode)
Descriviamo brevemente le associazioni: La variabile O3 la variabile di uscita dal nostro sistema; La variabile Upwind stata associata alla direzione del vento al livello pi vicino a quello del mare, perci con le variabile del dataset U85 e V85; La variabile EmFactor non altro che il livello di ozono del giorno precedente, perci la nostra variabile di uscita in anello chiuso; La variabile Tmax stata associata alla variabile del dataset con lo stesso significato T_PK; La variabile Tb stata associata alla variabile del dataset T_AV, che rappresenta la temperatura media giornaliera; La variabile SRd non ha trovato associazioni nel dataset; La variabile WSa stata associata alle variabili WSR9, WSR10, WSR11 e WSR12, che indicano la velocit del vento dalle ore 9 alle ore 12; La variabile WSp stata associata alle variabili WSR15, WSR16, WSR 17, WSR18, WSR19, WSR20 e WSR21, che indicano la velocit del vento dalle ore 15 alle ore 21. Abbiamo ridotto cosi il vettore delle variabili esogene da un vettore di dimensione 72 ad un vettore di dimensione 15.
28
Proseguiamo quindi con laddestramento della nuova rete neurale. I dati sono presi dal file ozono_final.mat che comprende gli input (dataset3) ed i target (ozoneTarget).
Figura
22
-
Addestramento
della
nuova
rete
29
Figura
23
-
Grafico
della
performance
In questo grafico notiamo che laddestramento durato 10 epoche ma la presenza del validation set ci permette di congelare i pesi della rete alla 4epoca per evitare loverfitting della rete. Lerrore quadratico medio ottenuto a tale epoca comunque abbastanza piccolo (0,060706) e ci ci fa pensare che la rete abbia imparato bene. In realt laumento dellerrore sul validation set e la contemporanea diminuzione dellerrore sul training set ci indica in presenza di un possibile overfitting. Dal validation stop in poi le prestazioni sui dati di allenamento aumentano mentre le prestazioni sui dati di test sono peggiori.
30
Anche in questo caso la rete d un grafico dellautocorrelazione abbastanza buono evidenziando la bont del modello.
Figura
24
-
Grafico
dell'autocorrelazione
dell'errore
Sarebbe importante valutare anche il grafico della regressione, ma in questo caso notiamo che non significativo in quanto le uscite sono numeri reali e manca quindi una classificazione che le identifichi come zero oppure uno.
Figura
25
-
Grafico
della
regressione
net = Neural Network name: 'NARX Neural Network' efficiency: .cacheDelayedInputs, .flattenTime, .memoryReduction userdata: (your custom info) dimensions: numInputs: numLayers: numOutputs: numInputDelays: numLayerDelays: numFeedbackDelays: numWeightElements: sampleTime: 2 2 1 2 0 0 409 1
La rete che abbiamo ottenuto sembra essere stata dimensionata in maniera opportuna. Abbiamo ottenuto un numero di pesi (409) allincirca cinque volte inferiore ai dati di ingresso (2000). Dai grafici che abbiamo analizzato abbiamo verificato la bont della rete che in poche epoche riesce ad apprendere con un errore quadratico medio piuttosto basso e con scarsa correlazione tra errori relativi a predizioni diverse.
Un aspetto fondamentale che ci rimane da valutare quello di capire se ci sono input x(t) che sono maggiormente correlati con lerrore della rete. In caso di forti correlazioni dovremo aggiustare la rete variando i ritardi, facendo dunque in modo che lerrore di una predizione dipenda da un numero maggiore di variabili esogene.
32
Figura
26
-
Grafico
della
correlazione
di
input
e
errore
Dal grafico si vede che ci sono intervalli per cui la correlazione tra input ed errore elevata, ben oltre il limite di confidenza. Nella nostra rete una predizione y(t) dipende dai target y(t-1),y(t-2) e dagli input x(t-1),x(t-2). La nostra idea quella di aumentare il numero di ritardi per cercare di far dipendere lerrore da una porzione pi ampia di ingressi e quindi scorrelare lerrore dai soli due ritardi.
33
Decidiamo perci di fare unulteriore prova di addestramento utilizzando sempre 12 neuroni nascosti ma stavolta 4 ritardi in questo modo luscita y(t) dipender da y(t-1), y(t2), y(t-3), y(t-4) e da x(t-1), x(t-2), x(t-3), x(t-4). Ci aspettiamo che la rete abbia un numero di pesi maggiore del caso precedente ma una minore correlazione tra input ed errore.
Figura
27
-
Addestramento
della
rete
finale
34
Figura
28
-
Grafico
della
performance
In questo caso notiamo un leggero aumento dellerrore quadratico medio (0.078395). Laddestramento dura 29 epoche ma alla 23 epoca vengono congelati i pesi perch da quel momento in poi vi un progressivo aumento dellerrore sul validation set quindi un possibile overfitting. Aspetto importante del grafico il test set che sembra essere stato positivo, cio ci dice che la rete in breve tempo raggiunge bassi errori di predizione e nel tempo si mantiene sempre con valori di errore piuttosto bassi. Dunque ci viene da pensare che il processo di addestramento riuscito ad insegnare alla rete a generalizzare per cui avremo una predizione molto accurata.
35
Figura
29
-
Grafico
dell'autocorrelazione
Anche in questo caso c scarsa correlazione tra lerrore di una predizione e gli errori su predizioni precedenti. Sono pochissimi gli istogrammi al di sopra della soglia di confidenza e perci possiamo ritenerli poco significativi.
Figura
30
-
Grafico
della
correlazione
tra
input
e
errore
Adesso il grafico della correlazione tra input ed errore decisamente migliore. Solo al valore di ascissa 0 abbiamo un picco della correlazione, ma quello che ci aspettavamo. Per il resto notiamo che la scelta del numero di ritardi sugli ingressi sembra sia stata ottima: tutti i valori di correlazione sono dentro lintervallo di confidenza.
36
net = Neural Network name: 'NARX Neural Network' efficiency: .cacheDelayedInputs, .flattenTime, .memoryReduction userdata: (your custom info) dimensions: numInputs: numLayers: numOutputs: numInputDelays: numLayerDelays: numFeedbackDelays: numWeightElements: sampleTime: 2 2 1 4 0 0 793 1
Con questa ultima prova di addestramento della nostra rete possiamo ritenerci soddisfatti. La rete ben dimensionata; riesce ad imparare con un errore quadratico medio abbastanza buono, anche se laddestramento si interrompe per un validation stop in realt vediamo che il test ci dimostra che la rete si mantiene su livelli di apprendimento buoni.
Di seguito riportiamo lo script che esegue Matlab per laddestramento e la predizione della nostra rete neurale:
% Solve an Autoregression Problem with External Input with a NARX Neural Network % Script generated by NTSTOOL % Created Tue Jan 11 10:13:16 CET 2011 % % This script assumes these variables are defined: % % dataset3 - input time series. % ozono - feedback time series. inputSeries = tonndata(dataset3,false,false); targetSeries = tonndata(ozono,false,false); % Create a Nonlinear Autoregressive Network with External Input inputDelays = 1:4; feedbackDelays = 1:4; hiddenLayerSize = 12; net = narxnet(inputDelays,feedbackDelays,hiddenLayerSize); % Choose Input and Feedback Pre/Post-Processing Functions
37
% Settings for feedback input are automatically applied to feedback output % For a list of all processing functions type: help nnprocess % Customize input parameters at: net.inputs{i}.processParam % Customize output parameters at: net.outputs{i}.processParam net.inputs{1}.processFcns = {'removeconstantrows','mapminmax'}; net.inputs{2}.processFcns = {'removeconstantrows','mapminmax'}; % Prepare the Data for Training and Simulation % The function PREPARETS prepares timeseries data for a particular network, % shifting time by the minimum amount to fill input states and layer states. % Using PREPARETS allows you to keep your original time series data unchanged, while % easily customizing it for networks with differing numbers of delays, with % open loop or closed loop feedback modes. [inputs,inputStates,layerStates,targets] = preparets(net,inputSeries,{},targetSeries); % Setup Division of Data for Training, Validation, Testing % The function DIVIDERAND randomly assigns target values to training, % validation and test sets during training. % For a list of all data division functions type: help nndivide net.divideFcn = 'dividerand'; % Divide data randomly % The property DIVIDEMODE set to TIMESTEP means that targets are divided % into training, validation and test sets according to timesteps. % For a list of data division modes type: help nntype_data_division_mode net.divideMode = 'value'; % Divide up every value net.divideParam.trainRatio = 70/100; net.divideParam.valRatio = 15/100; net.divideParam.testRatio = 15/100; % Choose a Training Function % For a list of all training functions type: help nntrain % Customize training parameters at: net.trainParam net.trainFcn = 'trainlm'; % Levenberg-Marquardt % Choose a Performance Function % For a list of all performance functions type: help nnperformance % Customize performance parameters at: net.performParam net.performFcn = 'mse'; % Mean squared error % Choose Plot Functions % For a list of all plot functions type: help nnplot % Customize plot parameters at: net.plotParam net.plotFcns = {'plotperform','plottrainstate','plotresponse', ... 'ploterrcorr', 'plotinerrcorr'}; % Train the Network [net,tr] = train(net,inputs,targets,inputStates,layerStates); % Test the Network outputs = net(inputs,inputStates,layerStates); errors = gsubtract(targets,outputs); performance = perform(net,targets,outputs) % Recalculate Training, Validation and Test Performance trainTargets = gmultiply(targets,tr.trainMask); valTargets = gmultiply(targets,tr.valMask); testTargets = gmultiply(targets,tr.testMask); trainPerformance = perform(net,trainTargets,outputs)
38
valPerformance = perform(net,valTargets,outputs) testPerformance = perform(net,testTargets,outputs) % View the Network view(net) % Plots % Uncomment these lines to enable various plots. %figure, plotperform(tr) %figure, plottrainstate(tr) %figure, plotregression(targets,outputs) %figure, plotresponse(targets,outputs) %figure, ploterrcorr(errors) %figure, plotinerrcorr(inputs,errors) % Closed Loop Network % Use this network to do multi-step prediction. % The function CLOSELOOP replaces the feedback input with a direct % connection from the outout layer. netc = closeloop(net); netc.name = [net.name ' - Closed Loop']; view(netc) [xc,xic,aic,tc] = preparets(netc,inputSeries,{},targetSeries); yc = netc(xc,xic,aic); closedLoopPerformance = perform(netc,tc,yc) plot(cell2mat(yc),'bo')
Figura
31
-
Rete
NARX
in
anello
chiuso
con
funzione
di
trasferimento
lineare
39
I valori predetti dalla rete, in questo caso, sono valori reali. Il grafico stampato dallo script il seguente:
Figura
32
-
Valori
reali
predetti
dalla
rete
Per ottenere in uscita dalla rete valori di ozono interi, abbiamo utilizzato nello strato di uscita la funzione a soglia hardlims, messa a disposizione dalla libreria di Matlab. Poich per tale funzione per la soglia di discriminazione 0, abbiamo modificato il bias (ovvero linverso della soglia) della rete in anello chiuso con il valore 0.3. In questo modo otteniamo in uscita dalla rete valori di ozono interi (0 o 1) discriminati da una soglia a 0.3. Abbiamo scelto 0.3 perch, come si vede dal grafico, la maggior parte dei valori sta sotto questa soglia, mentre i valori superiori sono picchi, ovvero valori non nella norma e quindi rappresentativi di unalta presenza di ozono nellaria.
40
La rete in anello chiuso con la nuova funzione a soglia si presenta in questo modo:
Figura
33
-
Rete
NARX
in
anello
chiuso
con
funzione
di
trasferimento
a
soglia
41
Conclusioni
A questo punto andiamo a valutare le previsioni fatte dalla nostra rete, plottando larray di celle yc, che contiene I valori di ozono presenti nellaria che la rete ha previsto.
Figura
34
-
Grafico
dei
valori
interi
predetti
dalla
rete
42
Figura
35
-
Grafico
della
serie
dei
target
Dallanalisi dei grafici possiamo dedurre che i valori predetti sono attendibili. La presenza di picchi di ozono nel grafico dei valori predetti molto simile a quella del grafico della serie dei target. Questo significa che la rete ha appreso bene e riesce a dare in fase di esecuzione gli stessi risultati forniti in fase di addestramento. In un futuro, se verranno presentati in ingresso alla rete nuovi valori, possiamo ragionevolmente pensare che la rete dar in uscita delle previsioni attendibili.
43