Tutorial > Introduzione al Machine Learning

Introduzione al Machine Learning

Pubblicato il: 07 gennaio 2021

IoT Machine Learning Sviluppo

Introduzione

Il Machine Learning rappresenta una branca della ricerca sulle intelligenze artificiali (AI). L’obiettivo del machine learning è comprendere la struttura e far combaciare i dati in un modello che possa essere comprensibile e utilizzato dalle persone.

Nonostante questa pratica sia collegata all’informatica, l’approccio al machine learning è diverso da quelli tradizionali. Nell’informatica tradizionale, gli algoritmi sono un pacchetto di istruzioni programmate ed esplicitamente dichiarate che vengono seguite dai computer per effettuare calcoli o risolvere problemi.

Gli algoritmi di machine learning invece permettono ai computer di allenarsi sugli input di dati e usare analisi statistiche per emettere un output da un intervallo di possibili output. Per questo motivo, il machine learning aiuta i computer a costruire dei modelli a partire da esempi di dati, in modo da poter costruire un sistema automatico di decisioni basato sugli input ricevuti.

Ogni utente beneficia oggi del machine learning attraverso la tecnologia, anche se spesso non se ne rende conto. La tecnologia di riconoscimento facciale permette alle piattaforme di Social Media di aiutare gli utenti nell’inserimento di tag o nella condivisione di foto di amici. Il sistema di riconoscimento dei caratteri ottici (Optical Character Recognition o OCR) converte le immagini di testo in caratteri. I motori di suggerimenti, implementati dal machine learning, suggeriscono quale film o show televisivo guardare in base alle preferenze dell'utente. Le automobili che dispongono del pilota automatico, basato sul machine learning, sono in fase di sperimentazione per essere lanciate sul mercato.

Il Machine Learning è un campo in continua evoluzione. Per questo ci sono alcuni accorgimenti da tenere a mente quando lavorerai con il machine learning e i suoi metodi o quando ne analizzerai i processi.

In questo tutorial trovi un'introduzione ai principali metodi di Machine Learning dell’apprendimento supervisionato o non supervisionato e gli approcci algoritmici più comuni, incluso l’algoritmo k-nearest neighbor, l’apprendimento basato su alberi di decisione e il deep learning.

Ti verranno anche spiegati quali linguaggi di programmazione sono più utilizzati nel machine learning, illustrando i vantaggi e gli svantaggi per ognuno di essi. Infine, porteremo alla tua attenzione i pregiudizi umani che rischiano di coinvolgere gli algoritmi di apprendimento automatico, e cosa si può tenere a mente per prevenire questi pregiudizi quando si creano algoritmi.

Metodi di Machine Learning

Nel machine learning, i task sono generalmente classificati in categorie più ampie. Queste categorie sono basate sul modo in cui avviene l’apprendimento o su come il feedback sul learning viene passato al sistema sviluppato.

Due tra i metodi più usati di machine learning sono l'apprendimento supervisionato, che allena un algoritmo basato su dati di input e output etichettati dagli umani, e l'apprendimento non supervisionato, che non fornisce all’algoritmo alcun dato etichettato per permettere di trovarne la struttura basandosi sui dati ricevuti in input.

Apprendimento supervisionato

Per esempio, con l’apprendimento supervisionato, un algoritmo può essere alimentato da dati con immagini di squali etichettati come ”pesci” e immagini di oceani etichettati come “acqua”. Venendo addestrato su questo set di dati, l’algoritmo di apprendimento supervisionato sarà successivamente in grado di identificare altre immagini, di squali o di oceani, con le etichette specificate in precedenza.

Un uso comune dell’apprendimento supervisionato è il caso in cui vengano usati dati della cronologia per predire eventi futuri basati sulla probabilità che siano simili ai precedenti. Può essere usato ad esempio per prevedere dei prodotti che potrebbero piacere a un utente che acquista online o per filtrare email di spam.

Nell’apprendimento supervisionato, l’algoritmo impara anche a riconoscere elementi nelle foto senza tag, per catalogarle secondo i tag degli elementi etichettati.

Apprendimento non supervisionato

L’apprendimento non supervisionato prevede dei dati non etichettati, lasciando quindi all’algoritmo la ricerca di aspetti che mettano in comune i suoi dati in input. Essendo i dati senza etichetta più presenti rispetto a quelli etichettati, i metodi basati su questo apprendimento sono molto validi.

L’obiettivo dell’apprendimento non supervisionato è quello di scoprire schemi nascosti all’interno di set di dati, ma potrebbe anche avere l’obiettivo di impostare uno schema di apprendimento per permettere alla macchina di scoprire da sola le rappresentazioni necessarie per classificare i dati grezzi.

L’apprendimento non supervisionato è comunemente usato per i dati transazionali. Potresti ritrovarti ad analizzare enormi set di dati sui clienti e i loro acquisti, ma come essere umano non saresti in grado di dargli automaticamente un senso, scoprendo quali attributi simili possano essere estratti dai dati personali dei clienti e dei loro tipi di acquisto.

Se questi dati venissero dati in pasto a un algoritmo di apprendimento non supervisionato, allora la macchina potrebbe essere in grado di determinare, ad esempio, che le donne in una certa fascia di età che comprano saponi neutri, hanno più probabilità di essere incinte. Di conseguenza, si potrebbe lanciare una campagna di marketing collegata alla gravidanza e ai prodotti per bambini dedicata a questo tipo di audience.

Senza un feedback di correzione delle scelte, gli algoritmi di apprendimento non supervisionato sono in grado di costruire relazioni significative tra dati che, presi singolarmente, potrebbe essere difficile relazionare per quanto complessi. Questo tipo di apprendimento è spesso usato anche per individuare anomalie, come per l’utilizzo fraudolento di carte di credito, o per i sistemi che raccomandano quali prodotti comprare in seguito ad alcuni acquisti. 

Inoltre nell’apprendimento non supervisionato, riprendendo l'esempio precedente, le foto non etichettate di cani possono essere usate per far registrare al sistema dei dettagli che potrebbero aiutare nella successiva classificazione di foto di cani non etichettate.

Approcci algoritmici

Come campo, il machine learning è strettamente legato alla statistica computazionale: avere una conoscenza pregressa di statistica è utile per capire e padroneggiare gli algoritmi di machine learning.

A tal proposito, è utile ricordare innanzitutto i concetti di correlazione e regressione, poichè sono tecniche molto usate per comprendere le relazioni tra variabili quantitative.

La correlazione è una misura di associazione tra due variabili che non sono designate come entrambi dipendenti o indipendenti. La regressione, a livelli di base, è usata per esaminare le relazioni tra una variabile dipendente e una indipendente. Poichè le statistiche della regressione possono essere usate per anticipare la variabile dipendente quando quella indipendente è conosciuta, la regressione abilita le capacità di predizione.

Gli approcci al machine learning sono continuamente in via di sviluppo. Per gli scopi di uno sviluppatore, verranno spiegati di seguito alcuni degli approcci più popolari usati nel machine learning durante lo sviluppo.

K-nearest neighbor

L’algoritmo del k-nearest neighbor è un modello di riconoscimento che può essere usato per la classificazione così come per la regressione. Spesso abbreviato come k-NN, la k nell’algoritmo è un intero positivo.

Nella classificazione k-NN, l’output sarà l'appartenenza del dato di input a una classe specifica. L’algoritmo assegnerà l’oggetto alla classe più comune tra i suoi k vicini più vicini a lui. Se k fosse uguale a 1, allora l’oggetto sarebbe classificato con la classe dell’unico vicino disponibile.

Albero decisionale

Generalmente un albero decisionale viene usato per rappresentare a livello visivo delle decisioni o mostrare come vengono stabilite. Quando si lavora con machine learning e data mining, gli alberi decisionali servono come modelli previsionali. Questi modelli mappano le osservazioni sui dati fino all'elicitazione delle conclusioni su di essi e sui possibili risultati ottenibili.

L’obiettivo dell’apprendimento sulle decisioni è creare un modello che, in funzione dei dati ricevuti in input, è in grado di predire i possibili risultati.

Nel modello di previsione, gli attributi dei dati, determinati attraverso le osservazioni, sono rappresentati dai rami, mentre le conclusioni sui possibili valori previsti sono rappresentati dalle foglie.

Quando l’apprendimento è “un albero”, i dati di origine sono divisi in sottoinsiemi basati sul test dei valori degli attributi. Il test viene ripetuto in maniera ricorsiva su ognuno dei sottoinsiemi derivati. Una volta che il sottoinsieme in un nodo ha il valore equivalente al valore considerato come obiettivo, il processo ricorsivo (ciclo) sarà completato.

Deep Learning

Il deep learning tenta di imitare il comportamento del cervello umano nel processare luci e suoni in vista e udito. Una architettura basata sul deep learning è basata sulla rete neurale biologica e si costruisce su più strati in una rete neurale artificiale creata con hardware e GPU (Graphic Processor Unit).

Il deep learning usa una cascata di strati di unità processori non lineari per estrarre o trasformare le caratteristiche o le rappresentazioni dei dati. L’output di uno strato serve come input dello strato successivo. Nel deep learning, gli algoritmi di apprendimento possono essere supervisionati per classificare i dati o non supervisionati per fare analisi dei modelli.

Tra gli algoritmi del machine learning attualmente in uso e sviluppo, quello del deep learning assimila una maggiore quantità di dati ed è stato in grado di battere gli esseri umani in alcuni processi cognitivi. Grazie a questi risultati e alle sue caratteristiche, questo algoritmo è oggi quello maggiormente capace di offrire un valido contributo nello sviluppo di intelligenze artificiali.

Il riconoscimento visivo e vocale del computer hanno tratto validi sviluppi grazie agli approcci di deep learning. IBM Watson è un esempio di questa padronanza dell’algoritmo.

Linguaggi di programmazione per Machine Learning

Quando scegli un linguaggio in cui specializzarti per fare machine learning, dovresti prendere in considerazione le skill nei settori professionali, negli annunci di lavoro specifici o nelle librerie disponibili nei vari linguaggi raccomandati.

Da diverse analisi basate sugli annunci di lavoro, la classifica dei migliori linguaggi di programmazione da scegliere per il machine learning mette Python al primo posto, seguito da Java, R e, infine, C++.

La popolarità di Python è dovuta allo sviluppo di molti framework di deep learning quali TensorFlow, PyTorch e Keras. Come linguaggio dalla sintassi leggibile e utilizzabile per realizzare script, Python si dimostra essere forte ed efficace sia nel lavorare direttamente con i dati, sia nella precompilazione degli stessi.

La libreria chiamata scikit-learn è costruita su componenti di pacchetti già esistenti con cui gli utilizzatori di Python avranno già familiarità: NumPy, SciPy, Matplotlib.

Java è ampiamente utilizzato nella programmazione aziendale ed è generalmente utilizzato dagli sviluppatori di applicazioni desktop front-end che lavorano anche sul machine learning a livello aziendale. Di solito non è la prima scelta per chi è alle prime armi con la programmazione e vorrebbe conoscere l'apprendimento automatico, ma è da preferire se possiedi un background nello sviluppo Java da applicare al machine learning.

In termini di applicazioni di apprendimento automatico nell'industria, Java tende ad essere utilizzato più di Python per la sicurezza della rete, anche negli attacchi informatici e nei casi di rilevamento delle frodi.

Tra le librerie di machine learning per Java ci sono: 

  • Deeplearning4j, una libreria di deep learning distribuita e open source scritta sia per Java che per Scala;
  • MALLET (MAchine Learning for LanguagE Toolkit), che consente applicazioni di machine learning sul testo, inclusa l'elaborazione del linguaggio naturale, la modellazione di argomenti, la classificazione dei documenti e il clustering;
  • Weka, una raccolta di algoritmi di apprendimento automatico da utilizzare per attività di data mining.

R è un linguaggio di programmazione open source utilizzato principalmente per il calcolo statistico. È cresciuto in popolarità negli ultimi anni ed è favorito da molti nel mondo accademico. R non è tipicamente utilizzato negli ambienti di produzione industriale, ma è diventato popolare nelle applicazioni industriali a seguito del crescente interesse per la scienza dei dati.

I pacchetti più diffusi per l'apprendimento automatico in R includono:

  • caret (abbreviazione di Classification And REgression Training) per la creazione di modelli predittivi;
  • randomForest per la classificazione e la regressione;
  • e1071 che include funzioni per statistica e teoria della probabilità.

C++ è un linguaggio di scelta per il machine learning o per le intelligenze artificiali nei videogiochi o per applicazioni per robot (locomozione, per esempio). Se hai lavorato con lo sviluppo di hardware per il calcolo integrato o sei un ingegnere elettronico potresti preferire linguaggi come C o C++ per l’elevato livello di controllo che il linguaggio fornisce.

Alcune librerie di C++ legate al machine learning sono mlpack, scalabile, Dlib che offre algoritmi di machine learning ad ampio raggio e Shark, modulare e open source.

Pregiudizi umani

Potresti pensare che le informazioni ricevute dall’analisi computazionale siano sempre oggettive ma, in realtà, non è così: nemmeno gli output del machine learning sono neutrali. Il pregiudizio umano gioca un ruolo chiave su come i dati vengano raccolti, organizzati e lavorati nell’algoritmo che determina come interagire con questi dati.

Se, per esempio, le persone forniscono immagini di “pesci” come dati per addestrare un algoritmo e queste immagini sono solo di “pesci rossi”, allora la macchina non sarà in grado di etichettare gli squali come “pesci”. Gli input degli utenti avranno quindi creato un pregiudizio contro gli squali, i quali non verranno considerati nella etichetta “pesci”.

Ovviamente, tali pregiudizi possono avere un impatto negativo sull’oggettività della macchina, ma anche diventare deleteri per l’utenza che interagisce con essa. Immaginiamo ad esempio cosa potrebbe causare una macchina con pregiudizi di genere o di razza, causati da un errato addestramento dell’algoritmo. Oltre a questo, un algoritmo saturo di questi pregiudizi potrebbe non suggerire le giuste pubblicità, i giusti annunci o le opportunità di lavoro a un utente per mancata “elasticità”.

Per appianare questi pregiudizi, ci sono diversi metodi. Uno di questi è assicurarsi che molte persone lavorino su un progetto e che altrettante lo testino e revisionino, in modo da favorire al raffinamento di un tipo di analisi quanto più “collettiva” e oggettiva possibile.

Un altro metodo è quello di ingaggiare dei gruppi di terzi che abbiano il compito di controllare e rivedere l’algoritmo, creare sistemi alternativi per rilevare questi pregiudizi e aggiungere la revisione etica come parte dei progetti di data science. Aumentare la consapevolezza sui nostri pregiudizi e su quelli collettivi, consci o inconsci, unito al costruire equità nei progetti di machine learning, aiuta a scoraggiare i pregiudizi in questo campo.

Conclusioni

In questo tutorial hai potuto apprendere diversi casi d’uso del Machine Learning, analizzando i metodi e gli approcci più popolari usati in questo ambito, oltre ai linguaggi di programmazione che è possibile utilizzare per muoversi nello sviluppo di tali progetti. 

Per comprendere il funzionamento del machine learning è stato fondamentale comprendere la logica dei principali algoritmi utilizzati al giorno d’oggi. Tieni a mente che il machine learning è un settore in continua evoluzione. Per rimanere sempre al passo, occorre tenersi continuamente aggiornati sul tema e sui nuovi metodi e algoritmi che potrebbero nascere in futuro.