vuoi
o PayPal
tutte le volte che vuoi
In questo caso dobbiamo caricare i dati eser4, che sono nel file.mat, e vediamo il caso con data2. Questi dataset
si differenziano tra di loro perché hanno una varianza dell’errore crescente. Innanzittutto specifico che il
numero di training data è 300, mentre quello di validazione sarà 500 – 300, quindi 200 dati di validazione.
Successivamente vado a definire l’ordine massimo. Andrò a ciclare da 1 a 30 per trovare quelle è l’n che è
l’ordine ottimo del mio sistema. L’ARX e l’ARMAX hanno 3 parametri che devo andare a definire, na, nb ed
nk. Poniamo nk = 1che è l’ordine del ritardo (delay).
Ma na ed nb come faccio a sceglierli? Come capisco qual è il miglior na ed nb?
È quello che facciamo proprio nel ciclo for seguente, sto considerando na ed nb che variano da 1 ad ordine
massimo, quindi 30. A questo punto vado a creare il mio modello, a simulare e mi definisco l’errore di
simulazione e l’errore di predizione. I due indici JPT e JPV sono INDICI DI ADERENZA che si basano
sull’errore di predizione. 86
Cosa succede con questi indici?
Nel piano io ho una corrispondenza tra n (numero dell’ordine) e J (indici), JT si basa sull’errore di predizione
calcolato sui dati di training, sarà una funzione monotona decrescente perché nei dati di training ho
un’incertezza, questa incertezza al crescere del numero dei dati verrà sempre più assimilata
dall’identificazione, perché crescendo il numero dei dati sto aumentando i gradi di libertà con cui il mio
modello identifica il sistema, la mia JT tenderà a 0.
Cosa succede all’indice che si riferisce all’errore di predizione calcolato sui dati di validazione?
In questo caso la mia funzione JV inizierà a decrescere ma poi, toccato un minimo, inizierà a crescere, questo
perché i miei dati di validazione non contengono l’incertezza che invece è contenuta nei dati di training. Mentre
i dati di training contengono questa incertezza e la danno nell’identificazione, i dati di validazione non la
contengono.
In questa esercitazione andiamo a trovare un intorno dove abbiamo il minimo di JV a cui corrisponderà un n*,
che è appunto l’ORDINE OTTIMO del mio modello. Se io faccio un’identificazione con un n > n* mi troverò
in una situazione di OVERTRAINING, sto abituando nell’identificazione più il mio modello ai dati di training
che ai dati di validazione, non ci sarà un buon fit. È importantissimo scegliere l’ordine ottimo del mio sistema
proprio perché in questa maniera capisco dove il fit è maggiore. In generale non abbiamo un n* preciso, avremo
un intorno di n*, un piccolo intervallo di n in cui sarà contenuto n* che ci porterà ad avere delle prestazioni
migliori.
Ritornando allo script, dopo aver calcolato gli indici JPT (k) e JPV (k), che si basano sull’errore di predizione,
e si calcolano come la covarianza dell’errore di predizione, vado a vedere gli indici di aderenza basati
sull’errore di simulazione. L’errore di simulazione differisce dall’errore di predizione. Quando abbiamo il
nostro sistema S che avrà in ingresso u(t -1) e ci calcola l’uscita y. Quando utilizzo il predittore, il mio predittore
87
prende in ingresso sia u(t -1), ma prende in ingresso anche l’uscita del sistema ma ritardata. Quindi l’uscita dal
predittore poi sarà y cappello che sarà data dagli ingressi u(t -1) e dall’uscita del mio sistema ma ritardata.
Vado a sottrarre queste due uscite e così ottengo l’errore di predizione che non è altro che la differenza tra y e
y cappello.
Vediamo invece come si calcoal l’errore di simulazione, abbiamo sempre il nostro sistema, in questo caso
avremo in ingresso u(t -1) e avrà uscita y. Invece il mio modello avrà come ingresso sia u(t -1) e produrrà
un’uscita che chiameremo y tilde. Il secondo ingresso del modello sarà la stessa uscita del modello ma ritardata
di un passo. Anche in questo caso la sottrazione dei due termini mi darà l’errore del sistema che sarà uguale a
y meno y tilde.
Quindi JST e JSV si basano sull’errore di simulazione.
Vediamo cosa succede a JPT e JPV, JPT dovrà convergere verso lo 0, JPV avrà un minimo e poi ritornerà a
crescere. Nell’immagine non è proprio evidente ma se si allarga si riesce a vedere che più o meno nell’intorno
di 20 JPV ha un minimo e poi torna a crescere. In questo caso posso dire che il mio intervallo dove si troverà
n*, quindi l’ordine ottimo sarà un intorno attorno a 20.
Per quanto riguarda JS per validazione e training, qui sarà un po’ più evidente dove sarà il minimo perché
entrambi decrescono e quindi già da un po’ prima di 20 la situazione si stabilizza. Quando vado a considerare
gli indici sulla simulazione non vado a considerare il minimo ma vado a considerare entro quale n i miei due
indici si vanno a stabilizzare. Quindi dopo 20 la situazione non cambia più di tanto, quindi posso dire che il
mio ordine ottimo si troverà nell’intorno di 20. 88
Nello script abbiamo altri 3 INDICI SURROGATI. Qui andiamo a calcolare i nostri indici surrogati sul set
di validazione, però al posto di usare JPV usiamo JPV perché utilizziamo l’indice sui dati di training. Questi
tre indici sono il final prediction error (FPE), l’information criterion (AIC) e il model description length
(MDL). Questi 3 parametri si basano proprio sull’indice di training solo che ci aggiungono delle
moltiplicazioni con delle funzioni che includono sia l’ordine n che stiamo trovando come ordine ottimo e sia
il numero di dati utilizzati N. per il primo e il secondo indice ci sono proprio delle funzioni Matlab che
calcolano questo indice. Per l’ultimo dobbiamo utilizzare la formula: Jmdl(k) = log(N1)*n/N1 + log(JPT(k))
C’è una dimostrazione matematica che ci dice che l’MDL è il miglior indice da considerare tra gli indici
surrogati perché visivamente ci dà un’informazione più diretta rispetto agli altri. In generale l’MDL utilizza i
BIT abbiamo quindi un’informazione più dettagliata e più precisa.
Infatti, nei tre grafici si capisce nell’MDL che nell’intorno di 20 c’è il minimo, anzi si vede che sta a 22. 89