7 lezioni di vita sul machine learning

  • Di
  • 2021-09-23 - 8 minuti
banner

Gli algoritmi di apprendimento automatico possono riuscire ad eseguire attività importanti generalizzando dagli esempi. Questo è spesso più fattibile ed economico rispetto alla programmazione manuale di una serie di risoluzioni a dei problemi.

Man mano che diventano disponibili più dati, è possibile affrontare problemi sempre più ambiziosi, e di conseguenza, l’apprendimento automatico è ampiamente utilizzato nei computer e in molti altri settori. Tuttavia, lo studio e lo sviluppo di applicazioni di machine learning di successo richiede una notevole quantità di “fede cieca” in certe situazioni difficile da imparare dai libri di testo.

Tra tutte le frasi che ho sentito da quando lavoro, ecco 7 lezioni di vita sul machine learning con cui ti ritroverai a combattere prima o poi e che costituiscono delle vere e proprie best practices.

I dati non bastano

Essendo la generalizzazione l’obiettivo, ne consegue che i dati da soli non siano sufficienti.

So che sembra una notizia piuttosto deprimente: come possiamo sperare di imparare qualcosa, soprattutto su tematiche dove i dati sono scarsi e di bassa qualità?

Fortunatamente, come la deduzione, anche l’induzione fa da leva: trasforma una piccola quantità di conoscenza in ingresso in una grande quantità di conoscenza come risultato. L’induzione è qualcosa di anche più potente della deduzione, perché richiede molta meno conoscenza di input per produrre risultati utili, anche se ha bisogno di una conoscenza superiore “allo zero”.

Certo, può sembrare scontato affermare che per l’apprendimento è necessario avere a disposizione una “fonte di conoscenza”, ma è altrettanto vero che spesso il machine learning viene scambiato per qualcosa che ha della magia.

Quello che l’apprendimento automatico fa è utilizzare i dati che ha a disposizione per cavarne qualcosa, così come nel mondo della programmazione o dell’agricoltura: la maggior parte del lavoro sta alla natura, ma ci vuole comunque la materia prima e servono gli agricoltori per aiutare i raccolti a crescere.

Allo stesso modo, chi studia e lavora nel settore, combina la sua esperienza e conoscenza del mondo reale con le tecniche di machine learning, per estrarne una nuova forma di conoscenza.

Machine learning = Loop

Rappresentazione + valutazione + ottimizzazione

Tutti gli algoritmi di apprendimento automatico sono generalmente costruiti per mezzo della combinazione di 3 componenti, che vengono utilizzati come blocchi fondamentali durante una qualsiasi attività che usi tecniche di machine learning.

Rappresentazione

Esistono moltissimi algoritmi che sono a disposizione degli utenti che intendono approcciarsi a questo mondo; mentre però un classificatore viene definito in modo formale tramite diversi linguaggi di programmazione, sta all’utilizzatore finale la scelta di utilizzare l’uno piuttosto che l’altro a seconda del compito. Per scegliere esistono diverse tecniche, dove sicuramente prendere in considerazione le feature a disposizione è fondamentale.

Valutazione

è sempre necessario fornire una valutazione per distinguere i classificatori che hanno dato dei buoni risultati da quelli che hanno avuto un esito negativo. Esistono diverse funzioni anche interne agli algoritmi stessi, che però possono dare risultati diversi da valutazioni esterne, motivo per cui è sempre bene fare un raffronto oggettivo dei risultati ottenuti.

Ottimizzazione

Completata la fase di valutazione, è molto importante utilizzare un metodo che permetta di imparare dagli errori: cercare tra i classificatori quello con il punteggio più alto non è sufficiente, ma bisogna esaminare attentamente le valutazioni effettuate e cercare di ottimizzare il più possibile l’output ottenuto.

La scelta della tecnica di ottimizzazione è fondamentale per l’efficacia del risultato e aiuta anche a determinare se la soluzione prodotta ha più di un ottimo. Esistono anche in questo caso moltissime funzioni di ottimizzazione, dalle più standard alle sperimentali, ed è bene studiarne il funzionamento per comprenderne a pieno le potenzialità.

Il fitting soffre di disturbo di personalità multipla

Cosa succede se gli input e i dati che abbiamo a disposizione non sono sufficienti (troppi o troppo pochi) a determinare completamente il classificatore corretto? Corriamo il rischio di rendere il classificatore uno strumento in grado solo di codificare stranezze casuali nei dati, adattandosi troppo alle conoscenze passate in input.

Questo problema è chiamato overfitting ed è uno dei principali nemici dell’apprendimento automatico, tanto che chi ci inizia a lavorarci, teme di vedere valori come il 100% di accuratezza: questo valore è pressoché impossibile da ottenere, se non in casi di overfitting.

Tutti nell’apprendimento automatico conoscono l’overfitting, ma la realtà è che si presenta in molte forme che non sono immediatamente ovvie: spesso si pensa che l’overfitting sia quando un valore viene sovrastimato, ma la realtà è che spesso si trasforma in underfitting.

Un modo per comprendere l’overfitting è scomporre l’errore di generalizzazione in bias e varianza.

Il pregiudizio o bias è la tendenza di un sistema o di una persona a imparare costantemente la stessa cosa sbagliata basandosi su esperienze “sbagliate”. La varianza è invece la tendenza ad apprendere cose casuali indipendentemente dal segnale reale.

Ad esempio, gli alberi decisionali non hanno problema di bias perché possono rappresentare qualsiasi funzione booleana, ma d’altro canto possono soffrire di alta varianza.

Tecniche come la convalida incrociata può aiutare a combattere l’overfitting, ma non è una panacea, dal momento che se la usiamo per fare scegliere troppi parametri, l’overfitting può verificarsi sotto forma di sovrastima.

Oltre alla convalida incrociata, esistono molti metodi per combattere l’overfitting, ma la realtà è che esistono diversi fattori che vanno tenuti in considerazione, e purtroppo non esiste una pozione magica!

La generalizzazione conta

L’obiettivo fondamentale dell’apprendimento automatico è generalizzare: questo vuol dire che dopo la fase di addestramento, l’algoritmo deve essere in grado di lavorare con input mai visti.

Questo perché, indipendentemente dalla quantità di dati di cui disponiamo, è assai improbabile che vedremo di nuovo gli stessi esempi al momento del test; per questa ragione, solitamente si divide il dataset iniziale di modo che il sistema venga addestrato su una parte degli esempi a disposizione, per poi testarne il corretto funzionamento su un insieme di dati mai visto.

Come dividere correttamente il dataset? Questo è un altro dei grandi dilemmi: i seguenti metodi di partizionamento dei dati sono stati suggeriti in diversi casi nella letteratura inerente il campo dell’apprendimento automatico.

Una prima opzione prevede di suddividere in due parti il dataset originale, di cui quello per il training pari al 75% e il restante per la fase di test; altri suggeriscono anche di utilizzare il 70% dell’intero set di dati per la parte relativa al training, 15% per la convalida e 15% per il test.

Personalmente credo che il metodo empirico per stabilire quale sia la cifra più adatta sia il migliore: mai andare sotto il 70%/30%, ma provare anche con un partizionamento pari a 80%/20% o intermedio per valutare le performance e stabilire quale offre prospettive migliori.

Comprendere le feature

Alla fine della giornata, alcuni progetti di apprendimento automatico hanno successo e altri falliscono. Cosa fa la differenza? Spesso il fattore più importante è rappresentato dalle funzionalità utilizzate. Se hai molte feature indipendenti che si correlano bene con la classe di apprendimento, allora l’attività sarà facile.

D’altra parte, se la classe è invece rappresentabile tramite una funzione molto complessa, potresti non essere in grado di trarre dei buoni risultati. Per questo, analizzare a fondo i dati grezzi a nostra disposizione, facendo delle valutazioni e ipotesi iniziali, ci aiuta poi ad interpretare anche meglio il risultato ottenuto.

In questo senso, l’intuizione, la creatività e un pizzico di esperienza fanno sì che questa parte del lavoro sia una delle parti più interessanti, perché ci rende degli investigatori dei dati, avendo sotto gli occhi un caso da risolvere, di cui non solo non conosciamo l’assassino, ma neanche il movente o l’arma!

Per questo spesso mi sento dire: “Tutto qui?” quando ci si trova davanti ad un addestramento concluso e testato, dopo ore e ore spese a raccogliere dati, pulirli ed elaborarli opportunamente. Può sembrare assolutamente banale, ma queste fasi preliminari sono fondamentali, più dell’applicazione di algoritmi super complessi.

Non fermarti alle apparenze (del modello)

Agli albori dell’apprendimento automatico, tutti avevano il loro algoritmo preferito, insieme ad alcuni motivi a priori per credere nella sua superiorità. Negli anni però, la maggior parte degli sforzi è andata a provare molte varianti degli algoritmi iniziali, mostrando che il miglior algoritmo varia da un’applicazione all’altra e che non ne esiste uno ottimale per ogni tipo di problema.

Per questa ragione, prima di concludere per la strada più “comoda”, valuta anche alternative da mettere in coda per una valutazione complessiva, che ti permetterà di confermare o ribaltare totalmente il tuo giudizio.

Più dati, migliori risultati

Nella maggior parte dell’informatica, le due principali risorse in quantità limitate sono il tempo e la memoria. Nell’apprendimento automatico, ce n’è una terza: i dati.

Questo è un dato di fatto che fino a qualche anno fa rappresentava un grande limite e spesso si sente dire che più dati si ha a disposizione, migliori saranno i risultati. Questo è vero, genericamente parlando: ripetiamo che l’overfitting è dietro l’angolo, quindi va sempre posta attenzione in questo senso.

Soprattutto al giorno d’oggi che sono disponibili enormi quantità di dati e spesso non c’è abbastanza tempo per elaborarli, questi vengono utilizzati in maniera impropria.

Questo porta a un paradosso: anche se in linea di principio più dati significa che si possono produrre risultati anche per situazioni più complesse, in pratica si finisce per usare gli algoritmi più semplici, perché quelli complessi richiedono troppo tempo per digerire grandi moli di dati ed elaborarli.

Di norma infatti vale la pena provare prima gli algoritmi più semplici, come ad esempio Naive-Bayes prima della regressione logistica, K-Means prima delle SVM. Spesso gli algoritmi più sofisticati rappresentano un’alternativa molto attraente, ma di solito sono più difficili da usare, perché hanno più parametri da gestire e anche una complessità intrinseca che rende il risultato non all’altezza delle aspettative o delle tempistiche.

Conclusioni

Le informazioni e le pratiche viste sono molte, ma fanno parte di un prontuario all’uso che consiglio di tenere sempre a portata di mano: spesso si incappa in “meccanismi” che ci fanno restare nella nostra comfort zone e che ci portano nella direzione sbagliata.

Ricordare che alcuni degli stereotipi con cui ci scontriamo e scontreremo ogni giorno sono, appunto, stereotipi, ci aiuta a mantenere il focus e cercare di migliorarci ogni giorno, grazie anche all’esperienza di chi, prima di noi, ci ha sbattuto la testa!

Post correlati

Partners

Community, aziende e persone che supportano attivamente il blog

Logo di Codemotion
Logo di GrUSP
Logo di Python Milano
Logo di Schrodinger Hat
Logo di Python Biella Group
Logo di Fuzzy Brains
Logo di Django Girls
Logo di Improove
Logo del libro open source
Logo di NgRome
Logo de La Locanda del Tech
Logo di Tomorrow Devs
Logo di Coderful

Non perderti gli ultimi aggiornamenti, iscriviti a TheRedCode Digest!

La tecnologia corre, e tu devi correre più veloce per rimanere sempre sul pezzo! 🚀

Riceverai una volta al mese (o anche meno) con codici sconto per partecipare agli eventi del settore, quiz per vincere dei gadget e i recap degli articoli più interessanti pubblicati sul blog

Ci sto!

#TheRedComics

Edizione di Ottobre

A cura di Sophie Aiello, copy di Chiara Romano

Fumetto di agosto di Sophie Aiello

Vuoi diventare #tech content creator? 🖊️

Se vuoi raccontare la tua sul mondo #tech con dei post a tema o vuoi condividere la tua esperienza con la community, sei nel posto giusto! 😉

Manda una mail a collaborazioni[at]theredcode.it con la tua proposta e diventa la prossima penna del blog!

Ma sì, facciamolo!