Categorie
Sistemi informativi

Perceptron: MachineLearning con supervisione e funzione di attivazione

In questo paragrafo spiegheremo come utilizzare l’algoritmo perceptron implementato con Python a partire da un dataset di dati utilizzati principalmente per la studio del machineLearning: l’insieme di caratteristiche che definiscono delle tipologie di fiori Iris.

Iniziamo con l’implementazione del perceptron.py (l’algoritmo spiegato nell’articolo precedente) definendo i metodi fit (per l’apprendimento) e prediction (per la previsione dei nuovi dati)

il dataset iris è una serie di dati, solitamente a matrice, che come righe si ha il numero dei campioni e sulle colonne le caratteristiche per ogni campione.

esempio:
0 5.1 3.5 1.4 0.2 Iris-setosa
1 4.9 3.0 1.4 0.2 Iris-setosa
2 4.7 3.2 1.3 0.2 Iris-setosa
3 4.6 3.1 1.5 0.2 Iris-setosa
4 5.0 3.6 1.4 0.2 Iris-setosa
.. … … … … …
145 6.7 3.0 5.2 2.3 Iris-virginica
146 6.3 2.5 5.0 1.9 Iris-virginica
147 6.5 3.0 5.2 2.0 Iris-virginica
148 6.2 3.4 5.4 2.3 Iris-virginica
149 5.9 3.0 5.1 1.8 Iris-virginica

Il problema che vogliamo risolvere è: dato un campione di dati con determinate caratteristiche, a quale classe corrisponde? Iris-setosa oppure Iris-virginica?

la prima cosa da fare è inputare all’algoritmo perceptron il set di dati.

from perceptron import Perceptron

pn = Perceptron(0.1, 10)
pn.fit(X, y)

print(“dataset”,df)
print(“target”,y)
print(“training”,X)

print(“errors”,pn.errors)
print(“weight”,pn.weight)

Una volta importato l’algoritmo perceptron utilizziamo la funzione di apprendimento “fit” imputando il set di dati di training “X” ed il target “y” (classificazione attesa). Lanciamo il codice ed il risultato è il seguente:

target [-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
-1 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1]

Per comodità abbiamo classificato la prima tipologia di Iris in -1 e la seconda in 1. Il dataset. Come training dei dati prendiamo i primi 100 campioni.

Mostriamo il risultato sulle dashboard di nodered ed interpretiamo i risultati.

usiamo un grafico a dispersione per visualizzare il dataset inziale:

Come si vede nel grafico abbiamo una netta distinzione della classificazione binaria. La parte alta sono campioni relativi al target -1 mentre la parte bassa sono campioni relativi alla classe 1.

Proviamo ad importare questo dataset in modo da addestrare l’algoritmo. Per capire la precisione di classificazione dell’algoritmo dobbiamo osservare il grafico degli errori ad ogni step di apprendimento. L’algoritmo, inoltre, accetta due parametri in ingresso: il numero di iterazioni (i cicli nei quali si aggiornano i pesi) ed il tasso di apprendimento. Il risultato è il seguente:

Notiamo che dalla quinta iterazione l’errore si azzera, ciò vuol dire che già dalla quinta iterazione l’algoritmo è in grado di predire il risultato per ogni nuovo campione in ingresso.

Proviamo quindi la funzione predict con il campione: Y = np.array([4,1]), ovvero caratteristiche 4 e 1. L’algoritmo ci dovrà predire se sono caratteristiche di Iris-setosa oppure Iris-virginica.

  • print(“predict: ” perceptron.predict(Y))–> predict: -1
  • proviamo con Y = np.array([4,1]), predict: 1

Un altro grafico interessante è l’andamento dei pesi ad ogni iterazione. Con questo grafico visualizziamo passo passo la correzione che l’algoritmo esegue sui pesi per migliorare la predizione.

variazione dei pesi su tutti campioni

Categorie
Sistemi informativi

Machine Learning in teoria

apprendimento con supervisione

classificazione, esempio messaggi di spam (classificazione binaria) oppure la classificazione multiclasse (riconoscimento testo scritto a mano)

regressione, trovare la dipendenza tra variabili predittive discrete ed una variabile target continua

apprendimento di rafforzamento

agente che migliora le prestazioni grazie all’interazione con l’ambiente. Siccome nelle informazioni relative all’ambiente includono anche un segnale di ricompensa, allora, si può dire che l’apprendimento di rafforzamento è l’esempio di un apprendimento con supervisione. Il target non è l’etichetta ma la “ricompensa” che misura la qualità con cui la funzione è stata misurata. Esempio, motore del gioco scacchi. Con try-and-error per migliorare la qualità dell’apprendimento

apprendimento senza supervisione

dati non etichettati o dati dalla struttura ignota. Necessario osservare i dati per cercare di capire informazioni cariche di significato.

clustering: dati divisi su un determinato grado di similarità (popolazione delle malattie), marketing per classificare gruppi di clienti

compressione dati (riduzione dimensionale): si esegue nella preelaborazione dei dati per cercare di ridurre il numero di dimensioni e ridurre il carico di memoria usata. si usa la matrice e vettori. Ogni colonna della matrice rappresenta la caratteristica del campione.

Quali sono in generale gli step per la creazione di sistemi di apprendimento automatico?

PRE-ELABORAZIONE

questo step serve per dare una forma ai dati. Cercare di rendere le caratteristiche dei dati omogenei (grazie anche alle attività di normalizzazione), cancellazione delle ridondanze andando a verificare la correlazione delle caratteristiche. Riduzione della dimensionalità delle caratteristiche riducendo quindi anche le prestazioni computazionali

ADDESTRAMENTO E SELEZIONE DI UN MODELLO PREDITTIVO

In questo step si cerca il miglior modello predittivo per un determinato problema. Per trovare il modello migliore si utilizzano delle metriche per misurare le prestazioni di ciascun modello. Per l’addestramento del modello si utilizza un dataset di apprendimento mentre per la valutazione del modello si utilizza un dataset di test.

VALUTAZIONE DEI MODELLI E PREVISIONI

In questo step si utilizza il dataset di test per stimare la qualità del modello predittivo e per identificare l’errore di generalizzazione. Se, dall’analisi, siamo soddisfatti della prestazione allora possiamo utilizzare il modello scelto per predire nuovi dati.