Come realizzare una rete neurale con scikit learn

Elaborare i dati con una rete neurale è molto semplice in python perché si può utilizzare uno degli algoritmi di scikit learn con poche righe di codice. E' molto utile se si lavora con il machine learning.

un esempio di rete neurale a due livelli

    Un esempio pratico

    Provo a costruire una rete naturale usando un dataset didattico di scikit-learn.

    Tra i tanti prendo il dataset composto dalle caratteristiche dei vini.

    from sklearn.datasets import load_wine
    dataset = load_wine()

    L'obiettivo è trovare un modello statistico di classificazione dei vini a partire dalle loro caratteristiche.

    In pratica, fornendo alcune caratteristiche di un vino, il modello riconosce di quale si tratta.

    Suddivido il dataset in una matrice delle caratteristiche X (features) e un vettore delle etichette y (target)

    X=dataset['data']
    y=dataset['target']

    Divido il dataset in due set, uno di training e l'altro di test.

    from sklearn.model_selection import train_test_split
    X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.3)

    A questo punto carico in memoria l'algoritmo di classificazione MLPClassifier che utilizza il principio della rete neurale (neural network)

    from sklearn.neural_network import MLPClassifier

    Nei parametri imposto a due il numero dei livelli nascosti ( hidden layers ), ciascuno composto da 200 nodi.

    Fisso il massimo delle iterazioni (epochs) a 200 e il margine di tolleranza (tol) a 0.000001.

    model = MLPClassifier(hidden_layer_sizes=[200,200], verbose=True, max_iter=200, tol=0.000001)

    Con il parametri verbose=True sto chiedendo all'algoritmo di mostrarmi i risultati di ogni iterazione.

    A questo punto elaboro il modello con la funzione fit().

    model.fit(X_train, y_train)

    Durante l'elaborazione l'algoritmo mostra l'avanzamento in tempo reale dopo ogni iterazione (epoch).

    Iteration 1, loss = 71.24516393
    Iteration 2, loss = 20.14575164
    Iteration 3, loss = 17.88382858
    Iteration 4, loss = 8.75269401
    Iteration 5, loss = 4.37436786
    Iteration 6, loss = 6.42863537
    Iteration 7, loss = 3.40341122
    Iteration 8, loss = 2.13589180
    Iteration 9, loss = 2.55737795
    Iteration 10, loss = 4.49112366
    Iteration 11, loss = 4.06346361
    Iteration 12, loss = 3.88750816
    Iteration 13, loss = 1.41540842
    Iteration 14, loss = 4.15214444
    Iteration 15, loss = 0.97863934
    Iteration 16, loss = 1.50975491
    Iteration 17, loss = 1.11187659
    Iteration 18, loss = 1.44429474
    Iteration 19, loss = 1.37661162
    Iteration 20, loss = 0.77559843
    Iteration 21, loss = 1.55805306
    Iteration 22, loss = 0.99328457
    Iteration 23, loss = 1.20419072
    Iteration 24, loss = 1.22393783
    Iteration 25, loss = 0.95327038
    Iteration 26, loss = 1.27795031
    Iteration 27, loss = 1.01864500
    Iteration 28, loss = 0.88321579
    Iteration 29, loss = 1.08282258
    Iteration 30, loss = 0.82398148
    Iteration 31, loss = 0.99960878
    Training loss did not improve more than tol=0.000001 for 10 consecutive epochs. Stopping.
    Process finished with exit code 0

    L'esecuzione si stoppa alla 31a iterazione, prima delle 200 previste, perché il margine di tolleranza (tol=0.000001) non migliora in dieci iterazioni (epochs) consecutive.

    Nota. Per non vedere i dettagli di ogni iterazione basta non inserire il parametro verbose=True nel metodo fit().

    Il modello è stato creato. A questo punto lo utilizzo per prevedere le etichette sul dataset di training e di test tramite la funzione predict().

    Salvo le previsioni rispettivamente nei vettori p_train e p_test.

    p_train = model.predict(X_train)
    p_test = model.predict(X_test)

    Infine, calcolo l'accuratezza del modello confrontando le previsioni con le risposte corrette.

    Per farlo carico in memoria il metodo accuracy_score

    from sklearn.metrics import accuracy_score

    e confronto le previsioni con le risposte corrette di training e di test

    acc_train = accuracy_score(y_train, p_train)
    acc_test = accuracy_score(y_test, p_test)

    Infine stampo i risultati dell'accuratezza

    print("acc. train : ", acc_train)
    print("acc. test : ", acc_test)

    Il modello restituisce un'accuratezza del 70% sui dati di training e del 74% sui dati di test

    acc. train : 0.7096774193548387
    acc. test : 0.7407407407407407

    Il modello di classificazione è stato realizzato con la rete neurale.

    E così via.

     


     

    Segnalami un errore, un refuso o un suggerimento per migliorare gli appunti

    FacebookTwitterLinkedinLinkedin
    knowledge base

    Libri di approfondimento

    Scikit-learn

    1. Cos'è sklearn
    2. Come installare sklearn
    3. Un esempio di machine learning
    4. Come usare i datasets didattici di scikit-learn
    5. Come creare un dataset con Excel
    6. Come rappresentare le regioni decisionali
    7. La vettorizzazione delle categorie
    8. StandardScaler ( riduzione di scala )
    9. L'analisi degli errori del classificatore
    10. L'analisi degli errori del regressore
    11. Perceptron
    12. La regressione lineare
    13. La regressione logistica
    14. Decision Tree Classifier
    15. k-NN (k Nearest Neighbors)
    16. MLPClassifier