Inauguriamo la sezione dedicata al machine learning, con una carrellata introduttiva sullo stato dell’arte che abbiamo raggiunto ad oggi nel campo dell’intelligenza artificiale.

In particolare, in questo articolo andremo a vedere quali sono:

  • i concetti generali del machine learning;
  • i tipi di apprendimento e la terminologia base utilizzata;
  • i blocchi principali che caratterizzano lo sviluppo dei sistemi di apprendimento automatico.

Cos’è il Machine Learning?

Il machine learning (o apprendimento automatico), nasce a metà del ventesimo secolo come branca dell’intelligenza artificiale.

Determinante per la sua evoluzione è la grande mole di dati (strutturati e non) che siamo sempre più in grado di recuperare grazie alla crescente informatizzazione.

Invece di lasciare agli esserei umani l’onere di derivare manualmente le regole che determinano i risultati di un evento, il machine learning offre un’alternativa molto più efficiente catturando le informazioni nascoste tra i dati.

L’idea è proprio quella di imparare dai dati, correggendo via via il proprio modello predittivo così da comprenderne indirettamente le leggi che regolano un determinato fenomeno.

Assistenti virtuali come Alexa o Siri, filtri anti-spam come quelli di Gmail, computer che battono campioni di scacchi (e videogame), sono tutti esempi pratici di machine learning applicato.

Quanti tipi di Machine Learning esistono?

Possiamo dividere l’apprendimento automatico in 3 macro categorie:

  • Supervisionato (Supervised Learning)
  • Rinforzato (Reinforcement Learning)
  • Non supervisionato (Unsupervised Learning)

Supervised Learning

Si parla di apprendimento supervisionato quando i dati disponibili per il processo di addestramento sono etichettati, ovvero al dato di partenza è associato anche il risultato.
Questo semplifica notevolmente il problema in quanto, conoscendo per ogni dato in ingresso il suo risultato, possiamo concentrarci nell’imparare quali sono le regole che ne determinano il comportamento.

Il supervised learning si divide in due sottocategorie:

  • Classificazione (Classification)
  • Regressione (Regression)

Classification

L’obiettivo della classificazione è quello di predire la classe del dato che stiamo presentando, partendo da un gruppo di categorie osservate durante la fase di apprendimento.

Per semplificare le cose, immagina un classificatore che deve dirci se un nome (ad es. Laura, gatto, sedia) è maschile o femminile.
Le categorie di partenza, o classi sono quindi queste due tipologie di genere.

Poiché parliamo di un classificatore supervisionato, siamo certamente partiti da un database contenente una bella quantità di nomi associati con la loro categoria di appartenenza:

NomeGenere
Mariomaschile
Tastierafemminile

Questi dati vengono usati per addestrare il classificatore.
Una volta terminata questa fase, saremo in grado di determinare, con una certa precisione, per qualsiasi altro nome il suo genere.

La figura che ti presento qui sotto, illustra il concetto di classificazione binaria.
Partendo da un set di dati già classificati (blu – rosso), il compito di un algoritmo di classificazione è quello di capire qual è la regola che separa al meglio le due categorie, qui rappresentata da una linea nera tratteggiata.

E’ importante notare che il set di classi non deve per forza essere binario come nell’esempio riportato. E’ possibile anche usare le stesse tecniche su problemi più ampi, come ad esempio il riconoscimento caratteri.

In questo caso il database di partenza potrà essere composto da una serie di caratteri scritti a mano, catalogati per lettera alfabetica.
Anche qui, terminata la fase di addestramento, il nostro classificatore sarà in grado di riconoscere un carattere scritto con una certa accuratezza.

Regression

Quando i dati che stiamo analizzando non sono catalogabili con classi predefinite, parliamo di regressione.

Regression

Il termine venne coniato da Francis Galton nel suo articolo Regression towards Mediocrity in Hereditary Stature (1886). Galton, è stato un antropologo, esploratore e climatologo britannico; cugino di Darwin, ha contribuito con i suoi lavori in diversi campi scientifici, introducendo ad esempio diversi termini ancora oggi utilizzati come eugenetica, anticiclone, correlazione.

Un esempio semplice può essere la previsione della temperatura in una città partendo dalle misurazioni fatte nell’ultimo anno al variare delle stagioni. Casi come questo non possono essere ricondotti a semplici classi specifiche (caldo, freddo) ma necessitano di output più complessi come numeri in virgola.

Quel che si fa durante la regressione quindi è fornire un certo numero di variabili associate ad una risposta continua e cercare poi di trovare una relazione tra queste variabili.
Nel caso che ti ho riportato prima, forniremo un certo numero di misurazioni fatte durante l’anno e cercheremo di capire se c’è una relazione tra la temperatura nella città scelta e il susseguirsi delle stagioni.

Nella figura qui sotto puoi vederne un esempio: partendo da una variabile x e una risposta y, la regressione cerca di approssimare l’andamento dei dati con una retta.

Se ti interessa approfondire la tua conoscenza sul machine learning e i concetti che trattiamo in questi articoli ti  consiglio vivamente di dare un’occhiata a questo libro di Sebastian Raschka:

Il volume affronta, con grande chiarezza, argomenti di classificazione, regressione, reti neurali, per passare poi a tecniche di riduzione dimensionale, librerie di sviluppo come TensorFlow e molto altro. Il focus è su Python, linguaggio di programmazione che offre risorse molto potenti per sviluppare applicativi che fanno uso di questi strumenti.

Leggi l’estratto gratuito per farti un’idea!

Reinforcement Learning

Nell’apprendimento rinforzato l’obiettivo che ci si pone è sviluppare un sistema, chiamato in gergo agente, capace di migliorare le proprie performance interagendo con l’ambiente che gli sta intorno.

E’ proprio l’ambiente che circonda l’agente a restituirgli un reward signal, letteralmente un segnale di ricompensa, che fa sì che l’agente possa capire qual è la strategia migliore per ottenere il segnale di ricompensa più alto. Questo segnale non è altro che il risultato di una funzione di costo definita attraverso i vincoli del problema che si cerca di apprendere.

Un esempio molto semplice di apprendimento rinforzato è quello del gioco degli scacchi. Un sistema intelligente proverà, sulla base delle regole definite per giocare, a fare delle mosse. Ne risulterà una vittoria o una sconfitta.
A seconda del risultato, l’agente sarà in grado mano a mano di comprendere quali sono le mosse vincenti e quali no.

Unsupervised Learning

L’apprendimento non supervisionato, come avrai intuito, è il caso opposto di quello supervisionato.
I dati di partenza utilizzati per addestrare il nostro modello non sono etichettati.

L’idea è che attraverso queste tecniche sia possibile esplorare la struttura dei dati ed estrarre verosimilmente informazioni di senso.

Generalmente possiamo parlare di due sottocategorie dell’apprendimento non supervisionato:

  • Clustering
  • Riduzione dimensionale (Dimensionality reduction)

Clustering

Le tecniche di clustering permettono di raggruppare dati, chiamati cluster, che condividono tra loro un certo grado di similarità.
Per come lavorano, queste tecniche prendono spesso anche il nome di classificazione non supervisionata, proprio perché al termine del processo di apprendimento restituiscono una serie di classi di appartenenza.

Nell’immagine che ti riporto qui sotto puoi vedere uno scenario in cui l’algoritmo di clustering ha restituito tre gruppi distinti con cui è stato possibile dividere i dati di partenza.

Riduzione Dimensionale

Quando i dati di partenza sono molto estesi può essere difficile riuscire a gestirli in maniera efficiente sia per problemi di spazio che per problemi di performance degli algoritmi di machine learning applicabili.

Quello che si fa è applicare quindi tecniche di riduzione dimensionale in modo da comprimere i dati e semplificare il set iniziale.

Esempio di Dataset

Arrivati a questo punto vale la pena spendere qualche parola per descrivere quali sono le caratteristiche di un dataset utilizzato per sviluppare un sistema di apprendimento.

Prendiamo come esempio uno dei dataset contenuti nel UCI Machine Learning Repository: L’Iris dataset contiene le misurazione di 150 fiori di tre differenti specie – Setosa, Versicolor e Virginica.

Ciascuna riga del dataset rappresenta un sample, ovvero un fiore specifico che è stato misurato. Le colonne invece rappresentano le feature (o attributi) e come puoi vedere dall’immagine per ciascun fiore ne sono state considerate diverse.

L’ultima colonna è popolata dalle classi di appartenenza, in questo caso parlando di un dataset per la classificazione, abbiamo tre diversi tipi di label possibili.

Più un dataset è popolato, più è facile ottenere buoni risultati durante le fasi di apprendimento in quanto la mole di dati utilizzabile per imparare è maggiore.

Qual è il Workflow di un sistema di apprendimento?

Fin qui abbiamo avuto modo di introdurre i concetti base dell’apprendimento automatico. Ma quali sono i pilastri essenziali che danno vita ad un sistema di apprendimento?

Possiamo dividere le fasi dell’apprendimento in quattro parti distribuite nel seguente ordine:

  • Preprocessing:E’ una delle più importanti in un processo di apprendimento, in quanto dal risultato di quest’ultima dipenderanno tutti gli altri a seguire. In questa fase l’obiettivo è quello di ottimizzare i dati in modo da renderli il più informativi possibili. Ciò lo si realizza ad esempio normalizzandoli in modo che siano rappresentati tutti con la stessa scala, riducendone le dimensioni così da eliminare alcune feature che magari sono ridondanti, etc.
  • Learning:Si sceglie l’algoritmo da utilizzare e si procede con l’apprendimento dei dati appena preparati. E’ sempre buona norma quello di dividere i dati di partenza in tre gruppi principali: training set, validation set e test set. Il primo viene usato generalmente per addestrare la rete neurale. Il secondo per valutare la bontà del modello realizzato e determinarne il comportamento quando gli si presentano dati mai valutati prima. Il terzo, infine, viene usato nella fase di valutazione per validare il modello.
  • Evaluation:Partendo dal modello realizzare con lo step precedente, si usa il test set per validarlo e valutarne le performance.
  • Prediction:E’ la fase finale in cui il sistema di apprendimento viene effettivamente rilasciato ed utilizzato. E’ durante la predizione che vengono sottoposti alla rete nuovi dati, utilizzando di fatto quanto prodotto.