Python, come funziona, esempi e librerie

Il linguaggio più utilizzato oggi per implementare i progetti basati sul machine learning; un linguaggio interpretato che, a differenza di quelli compilati, ha una velocità di esecuzione inferiore, ma i moduli per l’elaborazione dati sono sviluppati con linguaggi a basso livello come il C e dedicati al calcolo come il Fortran.

Pubblicato il 13 Dic 2021

Paolo Dotti

Quence - TXTGROUP

python librerie

L’esposizione costante ai social media in questa nuova era ci ha ormai reso consapevoli che abbiamo a disposizione una gran quantità di dati in continua crescita e che il Machine learning è tra le tecnologie più eccitanti del momento. Dalla seconda metà del secolo scorso il ML si è evoluto come un ramo dell’intelligenza artificiale, quello che studia gli algoritmi di apprendimento automatico; questi algoritmi sono in grado di apprendere, acquisire conoscenza da un insieme di dati e sulla base di questi effettuare previsioni. Gli algoritmi nel ML offrono una valida alternativa alle metodologie tradizionali e forse una irrinunciabile modalità per estrarre conoscenza da enormi quantità di dati senza l’intervento umano, che non sarebbe competitivo in termini di velocità, volume di dati elaborati e imparzialità. Il linguaggio più utilizzato oggi per implementare i progetti basati sul machine learning è Python; la comunità di sviluppo che vi gravita intorno è molto ampia ed è disponibile una grande quantità di moduli e librerie aggiuntive soprattutto per l’elaborazione dei dati.

Come funziona Python per implementare i progetti di machine learning

Il linguaggio più utilizzato oggi per implementare i progetti basati sul machine learning è Python, un linguaggio interpretato che, a differenza di quelli compilati, ha una velocità di esecuzione inferiore, ma i moduli per l’elaborazione dati sono sviluppati con linguaggi a basso livello come il C e dedicati al calcolo come il Fortran; il risultato è una combinazione vincente.

Chi inizia oggi a sviluppare col linguaggio Python ha a disposizione la versione 3.10 rilasciata il 4 ottobre 2021. Per semplificare l’installazione viene consigliata la distribuzione Anaconda che oltre al linguaggio include i principali pacchetti usati per calcolo scientifico e ML ed è disponibile per i sistemi operativi Windows, Linux, MacOS. L’installazione Anaconda offre anche un ambiente di sviluppo molto funzionale ed efficace, costituito dai Notebooks Jupyter che permettono sviluppo ed esecuzione interattiva di codice; l’editor è una pagina web in cui è possibile scrivere codice Python, scrivere testo e commenti con tag HTML, eseguire le celle contenenti codice sequenzialmente o nell’ordine desiderato, vedere output sia di testo sia grafico. Questo non preclude la possibilità di migrare il codice in un altro editor come PyCharm, Idle, Spider o altri disponibili.

La varietà dei progetti di ML e ampie possibilità di utilizzo di moduli appositi suggerisce come buona pratica per ogni progetto la creazione un ambiente virtuale (virtualenv). Un ambiente virtuale permette la gestione dell’intero progetto in modo isolato dagli altri con il controllo delle dipendenze tra le librerie utilizzate evitando così conflitti dovuti alle diverse versioni di ogni specifica libreria. I moduli più usati per creare e gestire ambienti virtuali sono “venv” e “virtualenv”; non ci sono limiti al numero di ambienti virtuali, se non lo spazio su disco. Prima di iniziare a lavorare in un ambiente virtuale deve essere attivato e alla fine deve essere disattivato.

Nell’implementazione di un progetto di ML il codice dovrebbe essere “pythonic”, ovvero rispettare lo “Zen of Python” (https://www.python.org/dev/peps/pep-0020/) e soprattutto, in ambito Data Science, devono essere utilizzate il più possibile le librerie perché sono sviluppate per ottimizzare efficienza e velocità.

Librerie di Python principali per il Machine learning

Di seguito un elenco dei principali e quasi irrinunciabili moduli che si usano nello sviluppo di progetti di ML e oltre; considerando che l’elenco sarebbe molto lungo, sono riportate le più importanti ad oggi e non sono inclusi i framework.

  • Numpy, pacchetto con una grande collezione di funzioni matematiche, supporto di matrici multidimensionali anche di grandi dimensioni.
  • Pandas, modulo per gestire dati in formato tabellare in strutture dette DataFrame; permette di importare, esplorare, ripulire, manipolare i dati.
  • Scikit-learn, (https://scikit-learn.org/stable/) libreria che implementa gli algoritmi di ML, costruita sulla base di Numpy, SciPy, Matplotlib. A questa si aggiungono altre librerie che implementano una sola tipologia di algoritmi come XGBoos, Catboost.
  • Scikit-optimize, Optuna, utilizzate insieme ai metodi di scikit-learn per l’ottimizzazione degli iperparametri in un modello di ML.
  • Tensorflow, libreria che implementa sia algoritmi di ML sia di DL; Keras libreria con API di alto livello che supportano TensorFlow e altre librerie di basso livello. Un’alternativa per il DL è PyTorch.
  • OpenCV, libreria per Computer Vision, permette acquisizione e analisi di video e immagini. Viene usata spesso insieme a TensorFlow nei modelli con immagini e video.
  • Matplotlib, immancabile libreria per la realizzazione di grafici; su questa inoltre è basata Seaborn che permette di sbizzarrirsi nelle rappresentazioni grafiche.
  • Bokeh, libreria per la realizzazione di grafici interattivi, molto competitiva verso matplotlib.
  • Statsmodels, implementa le funzionalità statistiche per esplorare i dati, eseguire test statistici, stimare modelli.
  • Prophet, libreria utilizzata per modelli predittivi sulle serie temporali.
  • Nltk, pacchetto fondamentale l’analisi del linguaggio naturale (NLP); a questa si possono aggiungere Spacy e Gensim; quest’ultima molto veloce e moderna.
  • PySpark, interfaccia per Apache Spark, supporta SparkSQL, DataFrame, Streaming, MLlib.
  • Scrapy e BeautifulSoap, pacchetti fondamentali per operazioni di scraping e crawling; la scelta di una delle due dipende dalla complessità del progetto.
  • Networkx, libreria per l’analisi e la rappresentazione delle reti come grafi.

Machine learning, qualche nozione in più

Se la traduzione più letterale di ML è apprendimento automatico, possiamo darne una con un significato che più ne identifica la natura e il contenuto, metodi statistici di apprendimento, infatti nel ML la statistica costituisce le fondamenta su cui sono sviluppati gli algoritmi. Un sottoinsieme del ML è costituito dallo studio delle reti neurali, il Deep Learning (DL).

Il ML sta diventando una parte fondamentale dell’esperienza quotidiana oltre che essere un florido ambito di ricerca; grazie ad esso abbiamo a disposizione assistenti vocali, sistemi di raccomandazione che ci consigliano su acquisti e passatempi, sistemi antifrode, sistemi antispam, supporto alla diagnostica medica e la lista non si esaurisce qua.

Gli algoritmi che oggi costituiscono il ML iniziano a comparire da circa la metà del XX secolo, quando ancora non si parlava di Machine learning; il termine è stato coniato nel 1959 da Arthur Lee Samuel, ma è rimasto un argomento poco trattato fino a che la disponibilità di dati e la capacità computazionale non ne hanno permesso lo sviluppo.

Dal punto di vista informatico l’approccio nella scrittura di codice è diverso rispetto a una applicazione convenzionale, non si scrive codice dettagliato per gestire le situazioni note ma si implementa un algoritmo che costruisce una sua logica sulla base del set di dati a disposizione.

python

Tipologie di algoritmi

Nel ML gli algoritmi sono divisi in tre classi principali che si distinguono per la modalità di apprendimento e per il tipo di contesto applicativo. In tutte le modalità di apprendimento si cerca di riprodurre l’approccio umano, per esempi, con ricompensa, basato sull’esperienza.

Apprendimento supervisionato

Lo scopo principale è apprendere un modello partendo da dati etichettati; il termine supervisionato si riferisce al fatto che sono noti sia i dati di input detti features, sia i corrispondenti dati di output detti etichette o label. Il sistema impara per esempi.

L’insieme dei dati a disposizione viene diviso in training set e test set, il primo di solito più grande e circa 80% del totale, usato per la fase di addestramento dell’algoritmo, il secondo per la fase di test. L’apprendimento supervisionato inizia sempre con una fase di addestramento dell’algoritmo che viene eseguita sul training set; il modello appreso viene utilizzato nella fase di test per predire l’output sui dati del test set e quindi confrontare l’etichetta reale con quella predetta dal modello. Una funzione di perdita o “loss function” (in alcuni contesti chiamata anche error function, cost function), valuta l’entità dell’errore fatto dall’algoritmo nel predire gli output sul test set e fornisce la “bontà” del modello; questa fase si chiama “evaluation”.

Questa è la modalità più semplice del processo; una modalità più complessa è la “cross validation” con varie tipologie di suddivisione dei dati in training e test set. Se la validazione del modello non è soddisfacente si torna alla fase di training modificando i parametri per ottimizzare i risultati. Tutto questo può essere eseguito in automatico con opportune librerie che valutano la loss function su una griglia di parametri iniziali e restituiscono la combinazione che produce i migliori risultati.

Nell’apprendimento supervisionato si possono eseguire compiti di classificazione (come determinare la tipologia di un cliente in base ai suoi acquisti o il riconoscimento di una mail di spam) e di regressione (per esempio stimare le richieste di biciclette in un servizio di bike sharing durante il giorno in base a ora, condizioni meteo etc.).

Apprendimento non supervisionato

In questa modalità i dati sono privi di etichetta, l’algoritmo non viene preaddestrato ma lavora direttamente sull’intero insieme di dati al fine di individuare schemi non noti a priori. Si ricorre a questa modalità di elaborazione e analisi per scoprire strutture o relazioni nascoste tra i dati; si estraggono informazioni senza avere la guida della fase di addestramento e senza avere un riscontro sugli output prodotti.

Un esempio di apprendimento non supervisionato è costituito dagli algoritmi di clustering, utilizzati per raggruppare i dati in base a caratteristiche simili; questi algoritmi sono utilizzati molto nel commercio per creare gruppi di utenti e creare offerte mirate piuttosto che fare una segmentazione della clientela e del mercato per ottimizzare la distribuzione di punti vendita e direzionare il marketing. Fanno parte di questa classe anche alcuni algoritmi di riduzione della dimensionalità dell’insieme di dati; questi algoritmi si applicano quando le “features” da analizzare e prendere in considerazione sono in numero molto elevato e sarebbe difficoltoso gestirle sia a livello di elaborazione sia a livello di rappresentazione grafica. Un altro scopo della riduzione di dimensionalità è la riduzione del rumore; complessivamente eliminando rumore e comprimendo i dati in dimensioni più compatte vengono mantenute le informazioni più importanti.

Apprendimento semi-supervisionato

Questo tipo di apprendimento è l’insieme dei due precedenti ma con le seguenti modalità: solo una parte dei dati è etichettata quindi solo su questa parte può essere eseguito l’addestramento ovvero l’apprendimento supervisionato; sul resto dei dati può essere applicato un algoritmo non supervisionato. In genere si utilizza una combinazione di entrambi, il non supervisionato per raggruppare caratteristiche simili, il supervisionato per classificare gli esempi di dati etichettati e possibilmente appartenenti a ogni raggruppamento; la combinazione dei due permette di estendere l’apprendimento a tutto l’insieme dei dati.

Apprendimento per rinforzo

Si tratta di una tecnica di apprendimento in cui viene definita una ricompensa (reward) che è la risposta dell’ambiente, una misura della qualità dell’azione effettuata. Quello che fa il sistema è apprendere un insieme di azioni che massimizzano la ricompensa tramite diversi approcci e senza l’intervento specifico dell’uomo. L’agente usa un processo per tentativi ed errori (trial and error), in base al feedback ottenuto in termini di azione e ricompensa, l’algoritmo di addestramento regola le azioni dell’agente. Il reinforcement learning trova le sue applicazioni nella realizzazione di sistemi autonomi che lavorano in modo sequenziale, dove una decisione presa, influenza l’andamento successivo del sistema, per esempio robot, veicoli a guida autonoma, gaming. Anche in questo tipo di apprendimento la prima fase è quella di addestramento all’interno di un sistema simulato; questo può protrarsi per più cicli fino alla precisione desiderata o raggiungibile.

Perché preferire Python per gli algoritmi del Machine learning

Python è un linguaggio facile, che si impara velocemente, che lascia una discreta libertà allo sviluppatore ma nello stesso tempo lo costringe ad essere ordinato; in altri linguaggi i blocchi di codice sono delimitati con parentesi e indentazione, mentre in Python si utilizza solo l’indentazione ottenendo un effetto di maggiore leggibilità. Il linguaggio è flessibile e permette diversi stili di programmazione, tra cui procedurale e a oggetti, funzionale e per i più temerari tutti insieme. Alcuni costrutti del linguaggio, che lo caratterizzano e il cui uso fa sì che il codice si possa dire “pythonic”, sono molto vicini al linguaggio naturale, si pensi per esempio alla elegante “list comprehension”. Ma il meglio dell’utilizzo di Python per implementare software di elaborazione e analisi dati fino all’utilizzo di algoritmi di machine learning è nella dotazione di librerie e di ambienti di sviluppo che offrono agli sviluppatori un insieme di strumenti potenti e versatili. La gestione dei dati è un aspetto molto importante negli algoritmi di ML e le strutture disponibili nel linguaggio e le possibilità di elaborazione sono esaustive e stimolanti; le librerie a disposizione sono costruite con linguaggi dedicati per ottimizzare velocità, potenza di calcolo e accelerazione data dall’uso delle GPU.

Infine, nel ML e in campi ben più ampi come quello della Data science la necessità di lavorare interattivamente e creare grafici richiede ambienti di sviluppo adatti; un editor come Jupyter mette a disposizione un insieme di strumenti impareggiabili lasciando comunque aperta la possibilità di passare ad un IDE classico. L’ambiente Jupyter è reso disponibile anche da tutti i maggiori cloud provider che offrono servizi gestiti (Full Managed Services) di analisi dati, ML e DL.

Esempi di Machine learning con Python

Data la sua versatilità, il Machine learning è pervasivo nella tecnologia attuale e sicuramente sarà protagonista della tecnologia futura insieme ad altri aspetti come Deep learning e in generale l’intelligenza artificiale. Le applicazioni sviluppate in settori dove sono disponibili grandi volumi di dati ormai hanno la necessità di utilizzare algoritmi di ML e non solo, per estrarre e raccogliere informazioni utili. Fare un elenco esaustivo delle applicazioni è arduo ma possiamo identificare i più evidenti e i più interessanti. Spaziamo dai servizi finanziari al marketing, dalla diagnostica medica ai trasporti, dalla sicurezza alla customer satisfaction. Ecco alcuni esempi:

  • riconoscimento e classificazione di video e immagini;
  • riconoscimento della lingua parlata, conversione in testo, analisi del linguaggio e generazione di linguaggio naturale; si pensi agli assistenti vocali;
  • catalogazione automatica di testi scritti ed estrazione dei contenuti per ricerche semantiche
  • prevenzione di frodi in ambito finanziario e bancario;
  • sistemi di segmentazione della clientela, sistemi di raccomandazione di prodotti, personalizzazione di campagne pubblicitarie;
  • sistemi antispam, questa classe di sistemi è forse tra le prime applicazioni di successo del ML;
  • manutenzione predittiva per evitare fermi produzione dovuti a guasti di macchinari o infrastrutture;
  • monitoraggio del traffico di rete e del comportamento degli utenti per prevenire attacchi hacker;
  • gestione magazzino e logistica.
  • ottimizzazione di siti web e monitoraggio del comportamento degli utenti per migliorare la fruibilità;
  • supporto alla diagnostica medica e monitoraggio dei pazienti per prevenire ricadute dello stato di salute;
  • prevenzione catastrofi naturali tramite l’analisi di dati storici sugli eventi in determinate zone geografiche.

Valuta la qualità di questo articolo

La tua opinione è importante per noi!

Articoli correlati

Articolo 1 di 2