top of page

Classificazione multiclasse con python e keras Deep Learning

Keras è una libreria Python per il deep learning che racchiude le efficienti librerie numeriche Theano e TensorFlow.

In questo tutorial scoprirai come utilizzare Keras per sviluppare e valutare modelli di reti neurali per problemi di classificazione multi-classe.

Dopo aver completato questo tutorial passo dopo passo, saprai:

  • Come caricare i dati da CSV e renderli disponibili a Keras

  • Come preparare dati di classificazione multiclasse per la modellazione con reti neurali

  • Come valutare i modelli di rete neurale Keras con scikit-learn



Classificazione multiclasse con python e keras Deep Learning
Classificazione multiclasse con python e keras Deep Learning


Cosa è la classificazione multiclasse ?

La classificazione multi classe è un algoritmo di apprendimento supervisionato che cerca di classificare un insieme di oggetti in una delle k classi. È un tipo di algoritmo di classificazione. L'algoritmo inizia con un elenco di oggetti da classificare, quindi inizia a confrontare ogni oggetto nell'elenco con ogni altro oggetto nell'elenco, cercando oggetti simili in qualche modo. Se due oggetti sono simili, l'algoritmo li assegnerà alla stessa classe.


Applicazioni della classificazione multiclasse

La classificazione multi-classe è una tecnica di apprendimento supervisionato che può essere utilizzata nel deep learning. Può essere una tecnica utile quando non si sta solo cercando di prevedere un risultato binario. Ad esempio :

  • Rilevamento del sentiment (Positivo o Neutro o Negativo).

  • Previsione stadio malattia (Stadio1 o Stadio2 o StadioFinale).

  • Previsione di conversione (Acquista o SiAbbona o LasciaRecensione).


Classificazione multiclasse con python 1.

Descrizione del problema

In questo tutorial utilizzerai il problema di machine learning standard chiamato iris flowers dataset . Questo set di dati è ben studiato e costituisce un buon problema per esercitarsi sulle reti neurali perché tutte e quattro le variabili di input sono numeriche e hanno la stessa scala in centimetri. Ogni istanza descrive le proprietà delle misurazioni di un fiore osservato e la variabile di output è una specifica specie di iris.


Questo è un problema di classificazione multi-classe, il che significa che ci sono più di due classi da prevedere. In effetti, ci sono tre specie di fiori. Questo è un problema importante per esercitarsi con le reti neurali perché i tre valori di classe richiedono una gestione specializzata.


Il set di dati del fiore di iris è un problema ben studiato e, in quanto tale, puoi aspettarti di ottenere una precisione del modello compresa tra il 95% e il 97%. Ciò fornisce un buon obiettivo a cui mirare durante lo sviluppo dei modelli.


È possibile scaricare il set di dati di iris flowers dal repository UCI Machine Learning e inserirlo nella directory di lavoro corrente con il nome del file " iris.csv ".



Classificazione multiclasse con python 2.

Importa classi e funzioni

Puoi iniziare importando tutte le classi e le funzioni di cui avrai bisogno in questo tutorial.

Ciò include sia la funzionalità richiesta da Keras che il caricamento dei dati da panda , nonché la preparazione dei dati e la valutazione del modello da scikit-learn .


import pandas
from keras.models import Sequential
from keras.layers import Dense
from keras.wrappers.scikit_learn import KerasClassifier
from keras.utils import np_utils
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import KFold
from sklearn.preprocessing import LabelEncoder
from sklearn.pipeline import Pipeline



Classificazione multiclasse con python 3.

Caricare il set di dati

Il set di dati può essere caricato direttamente. Poiché la variabile di output contiene stringhe, è più semplice caricare i dati utilizzando i panda. È quindi possibile suddividere gli attributi (colonne) in variabili di input (X) e variabili di output (Y).


# carichiamo il dataset
dataframe = pandas.read_csv("iris.csv", header=None)
dataset = dataframe.values
X = dataset[:,0:4].astype(float)
Y = dataset[:,4]



Classificazione multiclasse con python 4.

Codificare la variabile di output

La variabile di output contiene tre diversi valori di stringa.

Quando si modellano problemi di classificazione multiclasse utilizzando le reti neurali, è buona norma rimodellare l'attributo di output da un vettore che contiene valori per ogni valore di classe a una matrice con un booleano per ogni valore di classe e se una determinata istanza ha quel valore di classe o non.

Questo è chiamato codifica one-hot o creazione di variabili fittizie da una variabile categoriale.


Ad esempio, in questo problema, tre valori di classe sono Iris-setosa, Iris-versicolor e Iris-virginica. Se avessi le osservazioni:


Iris-setosa
Iris-versicolor
Iris-virginica


Puoi trasformarlo in una matrice binaria codificata a caldo per ogni istanza di dati che sarebbe simile a questa:


Iris-setosa,	Iris-versicolor,	   Iris-virginica
1,		                0,   			0
0,		                1,    			0
0, 		                0, 	    		1


Puoi prima codificare le stringhe in modo coerente in numeri interi usando la classe di scikit-learn LabelEncoder. Quindi converti il ​​vettore di interi in una codifica one-hot usando la funzione Keras to_categorical().


# trasformiamoo le variabili categoriche in interi
encoder = LabelEncoder()
encoder.fit(Y)
encoded_Y = encoder.transform(Y)
dummy_y = np_utils.to_categorical(encoded_Y)


Classificazione multiclasse con python 5.

Definire il modello di rete neurale

La libreria Keras fornisce classi wrapper per consentire di utilizzare modelli di rete neurale sviluppati con Keras in scikit-learn.


Esiste una classe KerasClassifier in Keras che può essere utilizzata come Estimator in scikit-learn, il tipo base di modello nella libreria. Il KerasClassifier prende il nome di una funzione come argomento. Questa funzione deve restituire il modello di rete neurale costruito, pronto per l'addestramento.


Di seguito è riportata una funzione che creerà una rete neurale di base per il problema di classificazione dell'iride. Crea una rete semplice e completamente connessa con uno strato nascosto che contiene otto neuroni.


Lo strato nascosto utilizza una funzione di attivazione del raddrizzatore che è una buona pratica. Poiché è stata utilizzata una codifica one-hot per il set di dati dell'iride, il livello di output deve creare tre valori di output, uno per ciascuna classe. Il valore di output con il valore più grande verrà preso come classe prevista dal modello.

La topologia di rete di questa semplice rete neurale a uno strato può essere riassunta come segue:

4 inputs -> [8 hidden nodes] -> 3 outputs


Si noti che una funzione di attivazione " softmax " è stata utilizzata nel livello di output. Ciò garantisce che i valori di output siano compresi nell'intervallo 0 e 1 e possano essere utilizzati come probabilità previste.

Infine, la rete utilizza l'efficiente algoritmo di ottimizzazione della discesa del gradiente di Adam con una funzione di perdita logaritmica, chiamata " crossentropia_categoriale " in Keras.


# definiamo un modello di base
def baseline_model():
	# creazione modello
	model = Sequential()
	model.add(Dense(8, input_dim=4, activation='relu'))
	model.add(Dense(3, activation='softmax'))
	# compilazione modello
	model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
	return model


Ora puoi creare il tuo KerasClassifier da utilizzare in scikit-learn.

Puoi anche passare argomenti nella costruzione della classe KerasClassifier che verranno passati alla funzione fit() utilizzata internamente per addestrare la rete neurale. Qui si passa il numero di epoche come 200 e la dimensione del batch come 5 da utilizzare durante l'addestramento del modello. Il debug viene disattivato anche durante l'allenamento impostando verbose su 0.


estimator = KerasClassifier(build_fn=baseline_model, epochs=200, batch_size=5, verbose=0)



Classificazione multiclasse con python 6.

Valutare il modello con la convalida incrociata k-Fold

Ora puoi valutare il modello di rete neurale sui nostri dati di addestramento.

Scikit-learn ha un'eccellente capacità di valutare i modelli utilizzando una suite di tecniche. Il gold standard per la valutazione dei modelli di machine learning è la convalida incrociata k-fold.


In primo luogo, definire la procedura di valutazione del modello. Qui, imposti il ​​numero di pieghe su 10 (un'eccellente impostazione predefinita) e mescoli i dati prima di partizionarli.


kfold = KFold(n_splits=10, shuffle=True)

Ora puoi valutare il tuo modello (stimatore) sul tuo set di dati (X e dummy_y) utilizzando una procedura di convalida incrociata di 10 volte (k-fold).

La valutazione del modello richiede solo circa 10 secondi e restituisce un oggetto che descrive la valutazione dei dieci modelli costruiti per ciascuna delle suddivisioni del set di dati.


results = cross_val_score(estimator, X, dummy_y, cv=kfold)
print("Baseline: %.2f%% (%.2f%%)" % (results.mean()*100, results.std()*100))



Classificazione multiclasse con python 7.

Esempio completo di Classificazione multiclasse con Python

Puoi legare tutto questo insieme in un unico programma che puoi salvare ed eseguire come script:



import pandas
from keras.models import Sequential
from keras.layers import Dense
from keras.wrappers.scikit_learn import KerasClassifier
from keras.utils import np_utils
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import KFold
from sklearn.preprocessing import LabelEncoder
from sklearn.pipeline import Pipeline

dataframe = pandas.read_csv("iris.data", header=None)
dataset = dataframe.values
X = dataset[:,0:4].astype(float)
Y = dataset[:,4]

encoder = LabelEncoder()
encoder.fit(Y)
encoded_Y = encoder.transform(Y)
dummy_y = np_utils.to_categorical(encoded_Y)
 

def baseline_model():
	model = Sequential()
	model.add(Dense(8, input_dim=4, activation='relu'))
	model.add(Dense(3, activation='softmax'))
	model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
	return model
 
estimator = KerasClassifier(build_fn=baseline_model, epochs=200, batch_size=5, verbose=0)
kfold = KFold(n_splits=10, shuffle=True)
results = cross_val_score(estimator, X, dummy_y, cv=kfold)
print("Baseline: %.2f%% (%.2f%%)" % (results.mean()*100, results.std()*100))


I risultati sono riassunti sia come media che come deviazione standard dell'accuratezza del modello sul set di dati.


Nota : i risultati possono variare a causa della natura stocastica dell'algoritmo o della procedura di valutazione, o delle differenze nella precisione numerica. Considera di eseguire l'esempio alcune volte e confrontare il risultato medio.

Questa è una stima ragionevole delle prestazioni del modello su dati invisibili. È anche nel regno dei risultati migliori noti per questo problema.


Accuracy: 97.33% (4.42%)


Riepilogo

In questo post, hai scoperto come sviluppare e valutare una rete neurale utilizzando la libreria Keras Python per il deep learning.

Completando questo tutorial, hai imparato:

  • Come caricare i dati e renderli disponibili a Keras

  • Come preparare i dati di classificazione multiclasse per la modellazione utilizzando la codifica one-hot

  • Come utilizzare i modelli di rete neurale Keras con scikit-learn

  • Come definire una rete neurale utilizzando Keras per la classificazione multiclasse

  • Come valutare un modello di rete neurale Keras utilizzando scikit-learn con convalida incrociata k-fold

Hai domande sul deep learning con Keras o su questo post?



Comments

Rated 0 out of 5 stars.
No ratings yet

Add a rating
PCR (5).gif
PCR (4).gif
PCR.gif
PCR.gif
PCR.gif
PCR.gif
PCR (5).gif
3.gif
Vediamo se riesci a cliccarmi ! Nascondo una Sorpresa... (2).png

Ciao 

🤗 Articoli consigliati dalla nostra
Intelligenza Artificiale in base ai tuoi interessi

Correlazione Alta

Correlazione Media

Correlazione Bassa

Iscriviti

VUOI DIVENTARE UN MEMBRO DI INTELLIGENZA ARTIFICIALE ITALIA GRATUITAMENTE E TRARNE I SEGUENTI BENEFICI?

Corsi Gratis

più di 150 lezioni online

Dataset Gratis

più di 150o dataset