AI news:

il portale di approfondimento sul mondo dell'intelligenza artificiale

AI news: il portale di approfondimento sul mondo dell'intelligenza artificiale

Come si crea un algoritmo di machine learning?

algoritmo

Lo sviluppo di un algoritmo di machine learning è un processo lungo e articolato, caratterizzato da una sequenza continua e ripetuta di tentativi e valutazioni. In questo articolo, riassumiamo i principali step step.

Quando si tratta del tema dell’intelligenza artificiale, è molto comune sentire parlare di algoritmi di machine learning. Un algoritmo, in particolare, rappresenta il metodo attraverso il quale un sistema di AI esegue determinati compiti.

Abbiamo trattato, in passato, delle modalità con cui gli algoritmi vengono addestrati e dei soggetti che si occupano del training, ma come viene creato in concreto un modello di machine learning? Il processo di costruzione di un algoritmo di AI è divisibile in fasi, tutte necessarie affinché il modello operi correttamente. In questo articolo, cercheremo di sintetizzarle al fine di comprenderle al meglio.

1. La definizione del problema

Il primo step consiste nell’identificazione del problema che si intende affrontare e risolvere, ovvero il motivo per cui l’algoritmo viene creato. È quindi necessario scoprire quali sono gli input e i risultati che ci si aspetta che il sistema produca.

In particolare, bisogna definire, tra le altre cose: l’obiettivo principale dell’algoritmo, ovvero ciò che si intende prevedere; quali sono i dati di input che verranno forniti al sistema per eseguire il compito per cui viene creato; e, come anticipato, il tipo di problema (se si tratta di una classificazione, di un raggruppamento o di altro).

Il problema per cui si intende costruire l’algoritmo di machine learning, soprattutto quando particolarmente complesso, potrebbe però talvolta risultare difficilmente risolvibile. Infatti, finché il modello non è funzionante, è impossibile prevedere con certezza l’output che verrà prodotto sulla base dei dati a disposizione. Spesso, infatti, le risposte provenienti dai sistemi di AI – proprio a causa della natura di questi – rappresentano una sorpresa anche per chi si occupa del loro training. 

2. La raccolta dei dati

Dopo che il problema è stato identificato chiaramente, si passa alla raccolta dei dati, un passaggio imprescindibile e che si riflette direttamente sulla buona riuscita del modello. Più i dati sono corretti e numerosi, più efficace sarà il modello che ne risulta.

I dati possono essere raccolti in diversi modi. Tra questi, il web scraping, una tecnica utile all’estrazione di dati da diverse pagine web al fine di raggrupparli in database fruibili. I dati raccolti attraverso questa tecnica possono essere i più vari, come dati di contatto, numeri di telefono, URL, indirizzi e-mail e non solo.

3. La definizione di una misura del successo e l’impostazione di un protocollo di valutazione

Al fine di valutare se il modello funzioni correttamente, è necessario definire quali sono gli obiettivi desiderati. Inoltre, una volta che l’obiettivo è chiaro, è importante adottare una modalità di controllo che permetta di valutare i progressi.

I protocolli di valutazione più comunemente utilizzati sono:  

  • Quello che prevede il mantenimento di un solo set di convalida ‘hold out’ – Per esempio, se i punti dati a disposizione sono 1000, questi potrebbero essere divisi in due gruppi rispettivamente da 800 e 200: 800 utilizzati per il training del modello e 200 per il test dello stesso, al fine di verificarne l’accuratezza. Questo tipo di protocollo è il più semplice, ma non è privo di problemi: utilizzando solo una parte dei dati disponibili per il training e solo una parte (diversa e molto ridotta) dei dati per il test, l’accuratezza del modello potrebbe risentirne in quanto non tutti i dati vengono considerati nelle due fasi. 
  • La K-fold cross validation – Per esempio, se i punti dati a disposizione sono 1000, questi potrebbero essere divisi in cinque partizioni da 200: 1, 2, 3, 4 e 5 (si tratta dunque, in questo caso, di una 5-fold cross validation). Inizialmente, si potrebbero utilizzare i dati contenuti nei gruppi 2, 3, 4 e 5 per il training, creando un modello M-1 (che esclude i dati del gruppo 1); successivamente, si testa solo il gruppo 1 e si ottiene così A1, il grado di accuratezza risultante dal test. Dopodiché, si passa a fare lo stesso per tutti gli altri gruppi, creando di volta in volta dei modelli (M-2, M-3, M-4, M-5) che escludono a turno dal training i dati contenuti in ognuno degli altri gruppi e testando l’accuratezza del gruppo escluso (A2, A3, A4 e A5). Alla fine, si procede con il calcolo di una media matematica di tutti i valori relativi all’accuratezza dei modelli. Questo tipo di protocollo di valutazione è più complesso, ma risulta efficace, in quanto include ogni elemento sia nella fase di training che in quella di test.

Esistono infine due tipi particolari di cross validation:

  • La leave-one-out cross validation è un protocollo in cui si esclude dal training un solo elemento alla volta, su cui poi si procederà al test. Per esempio, in presenza di 1000 elementi, 999 verranno utilizzati per il training e quello rimanente verrà usato per il test. Successivamente, si procederà nello stesso modo per tutti gli altri elementi e si calcolerà una media generale dell’accuratezza. Questo genere di validation richiede grandi capacità di calcolo.
  • La K-fold cross validation con shuffle è invece una K-fold validation in cui i dati vengono mischiati ogni volta prima di essere divisi in gruppi. Si calcolerà anche in questo caso una media generale dell’accuratezza. Questo genere di protocollo risulta molto utile quando i dati a disposizione sono limitati e si deve ottenere il risultato più accurato possibile.

4. La preparazione dei dati

Perché i dati possano essere utilizzati per l’addestramento dei modelli, è però necessario che questi siano trasformati in modo che possano essere inseriti in un modello di machine learning. Ciò porta ad affrontare diverse problematiche.

Per esempio, potrebbe essere necessario eliminare dei campioni di dati con valori mancanti, in quanto molti algoritmi non sono in grado di elaborare l’assenza di dati. Ciò potrebbe però portare alla cancellazione di informazioni utili e rilevanti, per cui, per superare questo problema, è prassi comune sostituire i dati mancanti con una media degli altri, permettendo così di mantenere i dati presenti evitando però che quelli stimati influiscano sul calcolo.

Quando poi si ha a che fare con dati relativi a categorie, si lavora con caratteristiche ordinali o nominali. Mentre le prime possono essere ordinate (per esempio, le taglie dei vestiti: L<M<S), le seconde non sono ordinabili (per esempio, il colore dei vestiti: rosso, giallo, verde). Le caratteristiche ordinali, infatti, possono essere mappate, convertendo i valori in numeri (per esempio, L:2, M:1, S:0), mentre quelle nominali possono essere codificate, assegnando un valore numerico a ogni etichetta (una maglietta gialla verrà per esempio codificata come: rosso = 0, giallo = 1, verde = 0).

caratteristiche nominali
Esempio di caratteristiche nominali (Immagine di Victor Roman – Towards Data Science)

Dato che la maggior parte degli algoritmi di machine learning è più prestante quando le funzionalità appartengono a una stessa scala, un passaggio utile è quello del ridimensionamento delle funzionalità, attraverso:

  • la normalizzazione, che limita i valori all’interno di un intervallo 0-1, il che li rende più facilmente gestibili;
  • la standardizzazione, che consiste nel centrare le colonne delle caratteristiche considerate alla media (il punto 0) con una deviazione standard di 1, il che offre informazioni sulla distribuzione dei valori.

Queste modalità rendono più facile per il modello apprendere i pesi dei singoli parametri e gli consentono di essere meno sensibile a eventuali valori anomali.

Accade poi che il modello apprenda in modo efficace dai dati di training, ma non sia in grado di effettuare previsioni affidabili all’inserimento di nuovi dati in quanto eccessivamente adattatosi a quelli passati. In questo caso, definito overfitting (l’opposto di underfitting, quando l’algoritmo non riesce ad apprendere a sufficienza in fase di addestramento), è consigliato ridurre la ridondanza dei dati, riducendo anche le funzionalità e analizzando i componenti principali, correlando le singole caratteristiche.

Per garantire che il modello possa generalizzare efficacemente anche sulla base di nuove informazioni, i dati possono inoltre essere suddivisi in tre parti: training (dati utilizzati in fase di apprendimento), convalida (fase utilizzata per capire se il modello creato è funzionante) e test (step finale utile alla verifica della reale applicabilità dell’algoritmo). Un esempio di apprendimento è dato, per esempio, dalla regressione.

5. Lo sviluppo di un modello di benchmark e l’ottimizzazione dei parametri

Infine, per verificare la bontà del modello creato, è importante sviluppare o tenere in considerazione molteplici modelli di riferimento, utilizzabili per la comparazione. Si tratta del processo di benchmarking, comune nel campo del machine learning e applicato anche agli stessi modelli.

Gli strumenti paragonati devono naturalmente essere comparabili e misurabili, altrimenti un’analisi comparata risulterebbe molto difficoltosa se non addirittura impossibile. Gli elementi presi come riferimento sono inoltre i più vari: dalla velocità dell’algoritmo alla capacità del bacino di dati, fino ad arrivare alla precisione e accuratezza degli output.

Al fine di adottare il modello più efficace e performante, si procede solitamente, come anticipato, a una cross validation, impostando il numero di K (nella K-fold cross validation), un metodo di punteggio che varia a seconda del tipo di problema e gli algoritmi che si intendono verificare. Una volta identificato il modello più promettente, si continua con l’ottimizzazione dei suoi iperparametri (ovvero quelli inseriti manualmente e non appresi in fase di training), solitamente attraverso una grid search cross validation, ovvero un processo di valutazione di modelli impostati con diverse combinazioni di iperparametri. Anche in questo caso, il più performante nell’ambito del problema di riferimento verrà selezionato.

Un work in progress

Il processo descritto rappresenta una generalizzazione delle procedure e delle tecniche utilizzate per la creazione di un algoritmo, che possono però variare anche di molto a seconda del problema per cui quest’ultimo viene creato.

Ma il processo, in concreto, non termina mai. Un algoritmo di machine learning, infatti, non è mai del tutto completato, in quanto questo richiede un miglioramento continuo e, all’aggiunta di nuovi dati, corrisponde la necessità di nuovi controlli per verificare che il modello sia ancora ottimamente performante.