Seguici su Telegram, ne vale la pena ❤️ ➡ @trovalost
Vai al contenuto

Mini corso / Spiegone di machine learning per newbie totali

Cosa si intende con machine learning? Il machine learning (apprendimento macchina, nel senso di apprendimento automatico) è un campo dell’intelligenza artificiale (AI) che si occupa dello sviluppo di algoritmi e modelli che consentono ai computer di apprendere dai dati in modo da migliorare le prestazioni nel tempo, senza dover essere esplicitamente programmato per ogni singola situazione. Per dirla in estrema sintesi, il machine learning permette ai computer di “imparare” dai dati e trarre conclusioni o prendere (alla lunga) decisioni “quasi” autonome.

Esempi di machine learning

Sebbene il machine learning sia strettamente collegato all’elaborazione dei dati e alla programmazione informatica, oltre ad avere una serie di formalismi matematici che non ne facilitano certo l’apprendimento (almeno non in prima istanza), ci sono alcuni esempi in cui possiamo vedere l’applicazione dei principi del machine learning nella pratica quotidiana senza necessariamente fare riferimento ai computer. Ecco alcuni esempi che abbiamo reperito:

  1. Apprendimento delle abilità motorie: il concetto di machine learning può essere applicato nell’apprendimento di abilità motorie come guidare una bici o suonare un pianoforte. Inizialmente, potresti commettere errori e provare diverse azioni. Man mano che acquisisci esperienza, il tuo cervello elabora i feedback sensoriali e impara a correggere i movimenti per raggiungere, con esercizio e costanze, sempre maggiore precisione e fluidità.
  2. Apprendimento di una lingua: quando si impara una lingua straniera, il processo di acquisizione delle parole, delle regole grammaticali e delle pronunce può essere considerato un processo di machine learning. Inizialmente, si fanno errori e si prova a costruire frasi in modo approssimativo. Con l’esposizione continua e la pratica, si migliora progressivamente la padronanza della lingua e si diventa più fluenti.
  3. Riconoscimento dei modelli: un agricoltore potrebbe imparare a riconoscere i segnali che indicano la presenza di malattie sulle piante o un sommelier potrebbe sviluppare la capacità di distinguere diversi aromi e sapori nel vino.
  4. Adattamento al cambiamento: Il concetto di adattamento al cambiamento nell’esperienza umana può essere considerato come una forma di machine learning. Quando ci troviamo di fronte a nuove situazioni o sfide, il nostro cervello elabora l’esperienza passata, impara dai successi e dagli errori, e si adegua per affrontare in modo più efficace i nuovi scenari, facendo ipotesi di vario genere e comportandosi sulla base dell’esperienza e dei propri desideri.

Sebbene questi esempi siano semplici analogie parziali per illustrare come il machine learning possa riflettere il processo di apprendimento umano, è importante notare che l’effettiva implementazione e applicazione di questo tipo di algoritmi richiede il supporto di algoritmi e tecniche computazionali avanzate.

A livello pratico – Nel caso in esame, faremo uso della libreria di Python Sci-Kit, che ci aiuterà a comprendere meglio il nostro argomento.

Esempi più pertinenti si possono snocciolare in modo induttivo: quando si visita un sito di shopping online, come Ebay o Amazon, il sistema utilizza algoritmi di machine learning per analizzare i tuoi precedenti acquisti, le tue preferenze, le recensioni degli altri utenti, i prodotti che hai visitato più spesso e le ricerche che hai fatto in passato. In questo modo utilizza queste informazioni per suggerire prodotti che potrebbero interessarti. Ad esempio, se hai acquistato un paio di scarpe da corsa, potresti ricevere suggerimenti su altri articoli correlati, come calze sportive o abbigliamento da fitness. I suggerimenti per le serie e i film su Amazon Video o Netflix possono, in teoria, seguire lo stesso principio. Gli articoli che potete vedere alla fine di ogni articolo del nostro blog, per fare un ulteriore ultimo esempio, possono considerarsi una forma di suggerimento di contenuti basato sull’apprendimento macchina, questa volta applicato ai contenuti testuali.

Storia del machine learning

La storia del machine learning risale agli anni ’40 e ’50, quando i primi pionieri dell’informatica, come Alan Turing, si interessarono alla possibilità di creare macchine capaci di apprendere. Tuttavia, fu solo negli anni ’60 che il concetto di machine learning iniziò ad essere sviluppato in modo più concreto. Nel 1959 Arthur Samuel, uno dei pionieri del campo, introdusse il termine “machine learning” e sviluppò un programma di gioco per dama che imparava dai suoi errori e migliorava le sue mosse nel tempo. Questo lavoro pionieristico ha posto le basi per molte delle tecniche di machine learning utilizzate oggi.

Negli ultimi anni, con l’avvento del “big data” e dei progressi nella capacità di elaborazione dei computer, il machine learning è diventato sempre più pervasivo. Algoritmi complessi come le reti neurali profonde (deep neural networks) hanno raggiunto risultati impressionanti in campi come il riconoscimento delle immagini, la traduzione automatica, il riconoscimento vocale e molti altri. Oggi, il machine learning è presente in numerosi settori, tra cui l’industria, la medicina, la finanza, la ricerca scientifica e molti altri. Continua a evolversi rapidamente grazie a nuove tecniche, algoritmi più sofisticati e ad approcci innovativi, come il reinforcement learning oppure il transfer learning. Molti passi sono stati compiuti fino ad oggi e, di fatto, grazie allo sviluppo di linguaggi e librerie open source gran parte di queste tecniche sono disponibili per qualsiasi azienda e programmatore volesse farne uso.

Statistica, analisi e “direzionalità” dei dati

Tanto per fissare subito le idee e non scendere in eccessivi dettagli che renderebbero la trattazione quasi impossibile (nonchè dispersiva), poniamo che i nostri dati siano rappresentabili su un piano cartesiano. Ad esempio stiamo raccogliendo informazioni su temperatura e altitudine di un territorio, per cui i nostri dati sono rappresentabili come una “nuvola” di punti così rappresentabile. Una nuvola perchè, proprio come le nuvole in cielo, non c’è una forma ben definita, tanto che la loro rappresentazione è tipicamente soggettiva e molte persone vedono forme nelle nuvole che altri, diversamente, non riescono a vedere (fenomeno noto come pareidolìa, per inciso).

In questo caso facciamo caso, per i nostri scopi, esclusivamente alla forma “generale” della nuvola, dove i punti più densi sono più scuri e quelli meno densi più chiari: anche senza avere un dottorato in matematica (avercene…) è abbastanza chiaro che non sia possibile definire una funzione matematica che permetta di rappresentare in modo sintetico la distribuzione di punti, come avverrebbe per disegnare invece una retta, una parabola o una circonferenza (che difficilmente fitterebbero, ovvero corrisponderebbero, in ogni casi, a dati del mondo reale). Lei irregolarità / imprevedibilità del mondo di ogni giorno sono il primo vero ostacolo che si incontra quando si lavora con il machine learning (…e quando si vive, aggiungerei :-) ): e allora come procedere? Come possiamo approcciare ad un problema del mondo reale per cui non esiste una formalizzazione matematica classica, di quelle che si studiano a scuola o nei primissimi anni di università?

La statistica in questo caso può essere di aiuto, ed è evidenziata dalle due frecce perpendicolari che sono disegnate nella figura in basso che abbiamo tratto da Wikipedia: se ci fate caso le due frecce puntano nella direzione di maggiore densità dei dati, ed è stato in questo modo possibile definirla una certa direzionalità. Non si tratta di un avere propria direzione, perché di fatto non c’è una direzione netta nella distribuzione di quei dati: c’è una direzionalità, un concetto differente, più vago se vogliamo ma anche più adeguato ad esprimere quello che ci serve. I vettori (le freccette) indicati/e in figura, da un punto di vista tecnico, sono detti autovettori della matrice di covarianza, e sono alla base della disciplina nota come analisi delle componenti principali.

Lo scopo di questo genere di analisi dei dati è proprio quello di fissare una direzionalità dei dati sparsi, semplificandone la trattazione senza, al contempo, perdere troppe informazioni a riguardo. Quelle due freccette ci dicono che i dati tendenzialmente si addensano in quelle due direzioni, senza entrare in troppi dettagli e fornendo una descrizione ad alto livello degli stessi.

Di Nicoguaro - Opera propria, CC BY 4.0, https://commons.wikimedia.org/w/index.php?curid=46871195
Di Nicoguaro – Opera propria, CC BY 4.0, https://commons.wikimedia.org/w/index.php?curid=46871195

Varianza e covarianza

 Senza perderci in ulteriori digressioni, torniamo sulla parola covarianza, per un attimo. Un concetto statistico non difficile da definire ma importante da fissare. Per quello che ci interessa, ci teniamo stretto il concetto di varianza e covarianza, che in statistica indicano rispettivamente :

  • La varianza è una misura della dispersione dei dati rispetto alla loro media. Indica quanto i dati si discostano dai loro valori medi. Una varianza bassa indica che i dati sono concentrati intorno alla media, mentre una varianza alta indica una maggiore dispersione dei dati.
  • La covarianza, d’altra parte, è una misura della relazione lineare tra due variabili. Misura la direzione e la forza della relazione tra le variabili. Una covarianza positiva indica che le due variabili tendono a variare nello stesso senso, mentre una covarianza negativa indica che le due variabili tendono a variare in direzioni opposte.

La media aritmetica di 10 dati è data, in forma base, dalla somma dei 10 dati divisa per 10, per quanti sono i dati. La varianza si calcola, per inciso, come la media dei quadrati delle differenze tra ciascun dato e la media dei dati.

Per intenderci, se due set di dati (uno rosso e l’altro blu, in figura) hanno entrambi media sul valore 100, possono avere due varianze diverse: quella blu è più bassa e quella rossa è più alta, il che significa che nel caso dei dati rossi ci sono più dati addensati su una media che è vicina al cento, mentre la distribuzione blu risulta più uniforme. Due varianze diverse pur avendo la stessa media, in sostanza.

Comparison standard deviationsLa varianza gioca un ruolo fondamentale per molti algoritmi di machine learning, ed è per questa ragione che l’abbiamo introdotta.

Tecnica di model fitting

Poniamo di aver acquisito i nostri dati e di averli sparsi come tanta sabbiolina sopra un piano. Ogni chicco di sabbia rappresenta un puntino nel grafico che abbiamo visto all’inizio, ed abbiamo visto che è possibile effettuare una misurazione della sua varianza allo scopo di determinare la “densità” dei dati in prossimità della media degli stessi. Che cosa succede se aggiungiamo della sabbia in termini di algoritmo? L’algoritmo sarai in grado di riconoscere la direzionalità di nuovi dati che vengono sottoposti? La tecnica di model fitting (adeguamento del modello) è un processo iterativo che coinvolge la sperimentazione con diversi modelli, funzioni di costo e parametri al fine di trovare la combinazione ottimale che migliori le prestazioni del modello.

È importante trovare un equilibrio tra un modello che sia abbastanza complesso da catturare le relazioni nei dati, ma non così complesso da soffrire di overfitting, cioè da adattarsi eccessivamente ai dati di addestramento senza riuscire generalizzare bene su nuovi dati.

Il processo di model fitting comporta solitamente vari passaggi:

  1. Selezione del modello: regressione lineare, alberi decisionali, reti neurali, e via dicendo.
  2. Definizione delle funzioni di costo: Le funzioni di costo misurano l’errore tra le previsioni del modello e i valori veri dei dati di addestramento. Scegliere una funzione di costo appropriata dipenderà dal tipo di problema che si sta risolvendo. Ad esempio, per la regressione lineare, si può utilizzare la somma dei quadrati degli errori (SSE). Ovviamente la scelta di una funzione di costo inadeguata può portare a valutazioni fuorviate, in alcuni scenari.
  3. Una volta selezionato il modello e definita la funzione di costo, l’obiettivo è trovare i valori dei parametri del modello che minimizzano la funzione di costo.
  4. Addestramento del modello: Durante l’addestramento, si passano i dati di addestramento al modello e si calcolano le previsioni. Successivamente, si calcola l’errore tra le previsioni e i valori veri e si utilizza l’algoritmo di ottimizzazione per aggiornare i parametri del modello.
  5. Valutazione del modello: Dopo l’addestramento, è importante valutare le prestazioni del modello. Ciò viene fatto utilizzando dati di test separati, che non sono stati utilizzati durante l’addestramento.
  6. Tuning finale: Se il modello non produce prestazioni soddisfacenti, è possibile regolare i suoi iperparametri per migliorarne le prestazioni. Gli iperparametri sono parametri che non vengono appresi dal modello durante l’addestramento, ma devono essere impostati manualmente dall’utente.

Le sette fasi descritte possono essere ripetitive e non ripetute una sola volta, anzi è spesso necessario tornare più volte su alcuni punti a dispetto di altri.

Tecnica di predicting (predizione)

La predizione nel machine learning è il processo di utilizzo di un modello addestrato per fare previsioni o stime su nuovi dati non visti in precedenza. Dopo aver addestrato un modello, l’obiettivo principale della predizione è ancora una volta di utilizzare il modello per fare previsioni accurate su nuovi esempi o dati di test. La predizione nel machine learning è un processo chiave per applicazioni come la classificazione, la regressione o il riconoscimento di pattern.

Il processo di predizione comporta, in questo caso, i seguenti passaggi:

  1. Preparazione dei dati di input: Prima di effettuare una previsione, i nuovi dati devono essere preparati in modo coerente con i dati di addestramento utilizzati per addestrare il modello. Ciò può comportare la pulizia dei dati, l’estrazione delle caratteristiche e l’applicazione delle trasformazioni necessarie.
  2. Utilizzo del modello addestrato: Dopo aver preparato i dati di input, il modello addestrato viene utilizzato per generare previsioni. Il modello prende in input i dati di test e restituisce una previsione o un valore stimato.
  3. Valutazione delle previsioni: Una volta effettuate le previsioni, è importante valutare l’accuratezza e le prestazioni del modello. Ciò viene fatto confrontando le previsioni con i valori di riferimento o le etichette corrette dei dati di test.

Questo caso si può fare uso di metriche di riferimento come la recall e/o la precisione.

Tecnica di cross-validation

La cross-validation (validazione incrociata) è una ulteriore tecnica utilizzata nel machine learning per valutare le prestazioni di un modello utilizzando un insieme limitato di dati di addestramento. L’obiettivo della cross-validation è stimare l’accuratezza del modello su dati non visti, ancora una volta, fornendo una stima affidabile delle prestazioni del modello.

La cross-validation coinvolge i seguenti passaggi:

  1. L’insieme di dati di addestramento viene diviso in diverse parti chiamate “fold”, con k intero (si parla a volte di k fold).
  2. Addestramento e valutazione: Si seleziona una delle k fold come insieme di test e le restanti k-1 vengono utilizzate come set di addestramento. Il modello viene quindi addestrato e valutato utilizzando il set di test.
  3. Il processo di addestramento e valutazione viene iterato k volte, utilizzando ogni volta una fold differente come set di test. In questo modo, ogni fold viene utilizzata una volta come set di test e k-1 volte come set di addestramento.
  4. Valutazione delle prestazioni: Alla fine della k-fold cross-validation, si ottengono k valutazioni delle prestazioni del modello. Queste valutazioni possono essere aggregate per ottenere una stima media delle prestazioni del modello.

Tipicamente, si calcolano la media e la deviazione standard delle metriche di valutazione, come l’accuratezza o l’errore medio, per ottenere una stima affidabile delle prestazioni del modello. La cross-validation può essere utile perché permette di valutare il modello su più dati di test, fornendo una stima più affidabile delle sue prestazioni rispetto a una singola suddivisione dei dati.

Machine learning pratico con Python

Proviamo a mettere in pratica i concetti visti usando la libreria sci-kit. Proviamo una semplice regressione lineare, per cui sottoponiamo i dati di x e y in due array e proponiamo all’algoritmo di “prevedere” l’andamento del grafico per x = 100, 101 e 102.

# Importare le librerie necessarie
from sklearn.linear_model import LinearRegression
import numpy as np

# Dati di addestramento
X_train = np.array([[1], [2], [3], [4], [5]])
y_train = np.array([100, 200, 300, 400, 500])

# Creare un'istanza del modello di regressione lineare
model = LinearRegression()

# Addestrare il modello utilizzando i dati di addestramento
model.fit(X_train, y_train)

# Dati di test per la previsione
X_test = np.array([[100], [101], [102]])

# Fare la previsione utilizzando il modello addestrato
y_pred = model.predict(X_test)

# Stampare le previsioni
print("Previsioni:", y_pred)

Le previsioni saranno:

Previsioni: [10000. 10100. 10200.]

il che ricalca effettivamente l’andamento dei dati che abbiamo proposto (un incremento di 100 ad ogni passaggio da un punto all’altro, se ci fate caso).

Scikit-learn può fare molto altro, ovviamente, tanto che fornisce decine di algoritmi e modelli di apprendimento automatico integrati, che sono chiamati tecnicamente stimatori (estimators). Ognuno di essi può essere adattato ad alcuni dati utilizzando il suo metodo di adattamento.

Ecco un semplice esempio in cui adattiamo un estimatore – un algoritmo specifico, di fatto – detto RandomForestClassifier (per dettagli vedi l’articolo sugli alberi decisionali) ad alcuni dati di base:

from sklearn.ensemble import RandomForestClassifier
clf = RandomForestClassifier(random_state=0)
X = [[ 1, 2, 3], # 2 samples, 3 features
[11, 12, 13]]
y = [0, 1] # classes of each sample
clf.fit(X, y)

pred = [[ 10, 20, 30], # altri 3 samples, 3 features
[110, 120, 130],
[1100, 1200, 1300]]
print ( clf.predict(X) )
print ( clf.predict( pred ) )

Possiamo fare uso del metodo semplicemente guardando gli esempi e sfruttando la documentazione, ovviamente conoscerne il funzionamento interno sarà utile a valutazioni di fino relative al margine di errore ed al fitting dei dati. Principio è sempre lo stesso: proviamo ad addestrare il nostro algoritmo con dei dati di base e poi ci inventiamo un “cervello” artificiale che sappia decidere sulla base dei dati precedenti. Per l’appunto, apprendimento macchina.

Le due predizioni saranno, per inciso:

[0 1]
[1 1 1]

Da non perdere 👇👇👇



Questo portale esiste da 4452 giorni (12 anni), e contiene ad oggi 5344 articoli (circa 4.275.200 parole in tutto) e 13 servizi online gratuiti. – Leggi un altro articolo a caso
Non ha ancora votato nessuno.

Ti sembra utile o interessante? Vota e fammelo sapere.

Questo sito contribuisce alla audience di sè stesso.
Il nostro network informativo: Lipercubo.it - Pagare.online - Trovalost.it.