Il modello sequenziale di Keras: un esempio di utilizzo.

Il modello sequenziale di Keras: un esempio di utilizzo.

Aprile 6, 2022 1 Di Ruggero Grando

VALUTAZIONE DEL MODELLO KERAS

Dopo aver addestrato la rete neurale possiamo valutarne le performance. Per far questo, dobbiamo utilizzare il metodo evaluate della classe Sequential passandogli come argomenti il nostro dataset XScaler e il dataset dei risultati Y. Questo metodo restituirà due valori, il valore loss del modello e il valore accuracy del modello. Ecco le righe di codice per ottenere la valutazione del modello.


33 _,accuracy = model.evaluate(XScaler, Y)
34 print(str(accuracy))

Il valore accuracy si risolve con la prima riga, mentre la seconda lo visualizza nella riga di comando.

PREDIZIONE DEL MODELLO

Ora, non ci resta che utilizzare il metodo predict della classe Sequential di Keras per ottenere una “predizione” dei dati XScaler e quindi un risultato 0 o 1 e confrontarli con quelli reali (il dataset degli Output Y).

Per far questo utilizziamo la seguente parte di codice.

35 # costruire Y  ossia predictions con il modello della rete neurale
36 predictions = model.predict(XScaler)

Il dataset predictions conterrà i valori “predetti” dal modello di rete neurale che abbiamo costruito. Infine, aggiungiamo il seguente codice.

37 # questo mi serve per arrotondare a 0 o 1 (essendo una classificazione)
38 Ypredictions = [round(x[0]) for x in predictions]
39 for i in range(10):
40	print('%s => %d (expected %d)' % (XScaler[i].tolist(), Ypredictions[i], Y[i]))

Eseguiamo un ciclo for per iterare i primi dieci valori dei dataset e confrontiamo i valori predetti con i valori reali come mostrato nella seguente immagine.

Fig.19
(Confronto tra i valori reali Y e i valori predetti calcolati con la rete neurale).

Con il codice seguente andiamo a realizzare un grafico con Seaborn che ci permette di vedere la differenza tra valore reale e valore predetto.

41 IndexValues = []
42 RealValues = []
43 PredictValues = []
44 TotalValues = []
45 Ypredictions = [round(x[0]) for x in predictions]
46 for i in range(30):
47	#print('%s => %d (expected %d)' % (XScaler[i].tolist(), Ypredictions[i], Y[i]))
48	IndexValues.append(i)
49	RealValues.append(Y[i])
50	PredictValues.append(Ypredictions[i])
51	TotalValues.append([i,Y[i],Ypredictions[i]])
52 df = pd.DataFrame(TotalValues, columns =['Nr', 'RealValue','PredicValue'])
53 df2= df.melt('Nr', var_name='cols', value_name='vals')
54 sea.lineplot(x="Nr", y="vals", hue="cols", data=df2,alpha=.5)
55 plt.savefig("sea_1_.png")

La riga 52 crea il dataframe df sulla base dei dati reali e predetti contenuti nella lista TotalValues valorizzato con l’aiuto del ciclo for. La riga 54 visualizza il grafico lineplot.Infine la riga 55 salva il risultato del grafico nell’immagine sea_1.png.

I risultati della rete neurale, per i primi dieci campioni, possono essere riassunti nella seguente immagine.

Differenza tra i valori reali e valori calcolati dal modello di rete neurale.
Fig. 20
(Differenza tra valori reali e valori calcolati dal modello di rete neurale).

L’immagine precedente mostra come nei primi dieci valori, sei casi sono stati calcolati correttamente dalla rete neurale (il valore predetto = al valore reale) e cioè, il 60% dei casi. L’uguaglianza del valore reale con il valore predetto è mostrata nel grafico con il colore marrone.

Prendendo come riferimento trenta casi invece di dieci, notiamo la seguente differenza.

Differenza tra valori reali e valori calcolati dal modello di rete neurale.
Fig 21.
(Differenza tra valori reali e valori calcolati dal modello di rete neurale)

Nell’immagine ventuno la rete neurale ha calcolato ventiquattro volte il valore calcolato uguale al valore reale su trenta valori complessivi. Il risultato è un 80% dei valori predetti in modo corretto, e si avvicina a quanto calcolato nei test eseguiti precedentemente.

Da quanto è emerso, bisogna capire quanto questo tipo di rete neurale possa essere adattata a dei valori che non ha mai visto prima, e su questi, calcolarne l’effettiva accuratezza. In questo momento, stiamo lavorando sui dati di training e quindi non sappiamo quanto effettivamente l’algoritmo funzioni su dati nuovi con valori differenti delle caratteristiche di Input.

CONCLUSIONI

Per ora non abbiamo parlato di dati di test o di cross validation, in una seconda parte di questo articolo lo faremo e cercheremo di applicare il modello di rete neurale costruito a nuovi campioni e ne valuteremo i risultati. Sarà in grado il nostro modello di rete neurale a determinare se il soggetto è diabetico o meno? E quanto sarà precisa la risposta?

Il codice sorgente in Python è presente in Github al seguente indirizzo https://github.com/Megalinux/ML_Keras_example_1

Come al solito, per  eventuali domande e integrazioni inviate un e-mail a webmaster@megalinux.cloud. Aiutate a sostenere The Megalinux, l’unico sito nel Web senza pubblicità inviando Bitcoin al seguente indirizzo.

3LpoukFpvDHTZPn5qGbLwUzve3rX9zsSq6

RIFERIMENTI E ARTICOLI CORRELATI

Smith, J.W., Everhart, J.E., Dickson, W.C., Knowler, W.C., & Johannes, R.S. (1988). Using the ADAP learning algorithm to forecast the onset of diabetes mellitusIn Proceedings of the Symposium on Computer Applications and Medical Care (pp. 261–265). IEEE Computer Society Press.

Vipul Gandhi – 2020 – How to Develop Deep Learning Models with Keras – https://www.kaggle.com/code/vipulgandhi/how-to-develop-deep-learning-models-with-keras/notebook

John D. Kelleher, Brian Mac Namee, Aoife D’Arcy – Fundamentals of Machine Learning for Predictive Data Analytics: Algorithms, Worked Examples, and Case Studies.

Kaggle, Dataset e Pima Indians database: https://www.kaggle.com/uciml/pima-indians-diabetes-database

Grando Ruggero – 2021 – Appunti di Machine Learning in ambito finanziario I parte. Appunti di Machine Learning in ambito finanziario I parte.

Keras Website – https://keras.io/

Pagina Precedente

No votes yet.
Please wait...

Pagine: 1 2 3 4 5 6 7 8 9 10