Il 0% ha trovato utile questo documento (0 voti)
5 visualizzazioni11 pagine

Machine Learning Con Python 3

Il documento fornisce una panoramica sul machine learning, chiarendo cosa non è e descrivendo i tre tipi principali: apprendimento con supervisione, senza supervisione e reinforcement learning. Viene inoltre spiegato il processo di costruzione di sistemi di machine learning, che include la pre-elaborazione dei dati, l'addestramento del modello e la misurazione dell'errore. Infine, si discute l'importanza di algoritmi come il perceptron e Adaline, nonché l'uso di librerie come Scikit-learn per facilitare l'implementazione del machine learning.

Caricato da

crochet.by.ele
Copyright
© All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato DOCX, PDF, TXT o leggi online su Scribd
Il 0% ha trovato utile questo documento (0 voti)
5 visualizzazioni11 pagine

Machine Learning Con Python 3

Il documento fornisce una panoramica sul machine learning, chiarendo cosa non è e descrivendo i tre tipi principali: apprendimento con supervisione, senza supervisione e reinforcement learning. Viene inoltre spiegato il processo di costruzione di sistemi di machine learning, che include la pre-elaborazione dei dati, l'addestramento del modello e la misurazione dell'errore. Infine, si discute l'importanza di algoritmi come il perceptron e Adaline, nonché l'uso di librerie come Scikit-learn per facilitare l'implementazione del machine learning.

Caricato da

crochet.by.ele
Copyright
© All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato DOCX, PDF, TXT o leggi online su Scribd

Machine learning con Python

Cosa non è il machine learning


Prima di parlare di cosa sia il Machine Learning, chiariamo cosa non è:

- Un algoritmo che su base di informazioni specifiche agisce:


immaginiamo di avere un negozio che vende migliaia di prodotti al mese, e che la maggior parte del
fatturato venga da un numero limitato di acquisti. Si potrebbe classificare gli acquisti di dimensione
(x) volte l’acquisto medio, per poi studiarli per capire cosa abbia portato ad essi

- Un algoritmo che sulla base delle informazioni, reagisce in modo diverso in base ai diversi input,
date regole specifiche precedentemente assegnate:
Immaginiamo di creare un algoritmo sui mercati e di dover testare una strategia di acquisto long-
term sul Nasdaq. Mettiamo che stiamo cercando di testare una strategia dove ogni volta che il
prezzo superi la 2ª deviazione del prezzo in negativo (per chi non è comune al settore lo potremmo
semplificare come un movimento insolito del prezzo verso il basso) si acquisti. Potremmo usare
come etichetta il raggiungimento della seconda deviazione da parte del prezzo, e impostare un
acquisto proporzionale alla “discesa” del prezzo.

I tre tipi di machine learning


Quando ci riferiamo al Machine Learning, necessitiamo di conoscere i 3 macro tipi di machine
learning:

1) apprendimento con supervisione


2) apprendimento senza supervisione
3) reinforcement learing

1 – Apprendimento con supervisione:


Lo scopo nell’apprendimento con supervisione, è quello di istruire un modello, partendo da dati di
addestramento etichettati, per riconoscere dati futuri mai visti prima.
Esempio: Date migliaia di mail, che noi etichettiamo come spam o non spam, il sistema cercherà dei pattern
tra mail e etichetta, e cercherà delle correlazioni tra i 2, cercando di classificare i nuovi dati (in questo caso
le nuove mail. Ancora immaginiamo di dare 1000 foto di frutta come input, classificandole con le etichette
come: ”mele”, “pere”, ecc.., cercherà dei pattern tra i dati e le rispettive etichette, in tal modo da
riconoscere in base a determinate caratteristiche, di che frutto si tratti.
Il lavoro del modello è quindi imparare la relazione tra input (dato grezzo) e output (etichette)

2 – Apprendimento senza supervisione:


Lo scopo nell’apprendimento senza supervisione, è quello di istruire un modello che cerchi pattern o
strutture nascoste tra i dati
Esempio: Date informazioni su clienti, come età, spese e preferenze, il modello potrà creare cluster di
clienti con comportamenti simili per poi fare campagne marketing mirate (Giovani con interessi per
tecnologia, adulti che comprano alimentari online ecc…). Ancora, prendendo le stesse 1000 immagini di
frutta usate in precedenza, questa volta non etichettate, il modello organizzerà le immagini in gruppi simili
in base a caratteristiche visive (forma colore ecc), trovando pattern che permetteranno di distinguere quale
frutto sia quale.
3 – Reinforcement learning:
Un altro tipo di machine learing è il reinforcement learing, qui l’obbiettivo è di sviluppare un sistema
che migliora le proprie interazioni in base alle interazioni con l’ambiente. A ogni stato sarà attribuita una
ricompensa positiva o negativa, che aiuterà a determinare il tipo di comportamento necessario. Esempio:
Immaginiamo di utilizzare un modello che ci aiuti nel creare gli script per dei video da postare nei social
media. Una volta pubblicati i video, potremmo immaginare di inserire i risultati nel modello, cosi che
capisca cosa sta funzionando di più o di meno, e cosa ottenga un determinato tipo di risultati e cosa no.
Un altro esempio può essere una partita a scacchi, dove determinate mosse danno più o meno possibilità
di vittoria ecc…

Il raggruppamento che viene fatto dai modelli viene chiamato Clustering:


Il clustering è una tecnica di analisi esplorativa dei dati che ci consente di organizzare una massa di
informazioni in sottogruppi significativi, i cluster, senza alcuna precedente conoscenza della loro
appartenenza ai gruppi. Questo è particolarmente utile nel marketing per raggruppare i consumatori
in base ai loro interessi, con lo scopo di sviluppare campagne specifiche di Marketing.

Come vengono mantenuti i dati dentro i database ML:


- Un dataset, rappresenta una raccolta di informazioni, che viene suddiviso in caratteristiche (le
attribuzioni, misurazioni, le dimensioni)
- Le informazioni sono generalmente raccolte in Matrici, dove il numero di righe sono i campioni, e
il numero di colonne sono le caratteristiche. Vedi immagine sotto

Fasi di una costruzione di sistemi Machine Learning


1) Pre elaborazione/uniformazione dei dati: raramente i dati grezzi sono disponibili nel formato
necessario per permettere ad un algoritmo di apprendimento di operare in modo ottimale,
bisognerà quindi rimuovere se necessario gli spazi vuoti, eseguire One-hot encoding dove
necessario (una matrice può leggere solo numeri, quindi se ho una tabella con ad esempio
località geografiche non potrà esserci scritta ogni singola località, ma dovrà essere
trasformata in “versione numerica), qua ne vediamo un semplice esempio:

Città Torino Firenze Roma


Torino 1 0 0
Torino 1 0 0
Firenze 0 1 0

Altro problema da affrontare in pre-elaborazine sono i dati di diverso calibro. Immaginiamo


di avere come categorie nella stessa raccolta dati “età” e “salario annuale”. Quando il
modello calcola i dati per esempio per “fare predizioni” come si fa nei modelli di
apprendimento con supervisione, il valore dei dati come in questo caso il reddito, renderebbe
invisibili i dati minori come età (immaginiamo debba fare delle medie per calcolare dei
valori per ogni caso esaminato). Bisognerà quindi con delle formule apposite standardizzare
il valore perché ogni colonna pesi in modo proporzionato al calcolo e perché e varie
categorie siano numericamente comparabili.
(nel caso dell’età e del salario, al posto di avere valori come 50 e 100.000 avremo qualcosa
come “50” e “2,3 “dove “2,3 potrebbe essere la proporzione con un salario medio

2) Addestramento e scelta di un modello predittivo: Dato che non tutti i modelli devono
risolvere lo stesso tipo di problemi, sarà necessario addestrarlo rispetto uno specifico
problema. Possiamo mettere in relazione questo concetto a un detto popolare “suppongo sia
normale avendo a disposizione solo un martello, trattare ogni cosa come un chiodo”
(Abraham Maslow, 1966). Sarà necessario quindi confrontare differenti algoritmi col fine di
trovare l’algoritmo che offre il comportamento migliore.

3) Misurazione dell’errore e predizioni su istanze mai viste: Per costruire un modello predittivo
si parte da dati puliti e numerici, trasformati in una matrice equilibrata; si sceglie la forma
del modello (lineare, ad albero, rete, ecc.), si definisce come misurare l’errore (cosa
definiamo come giusto e cosa come sbagliato), e si ottimizzano i parametri affinché l’errore
sia minimo. Durante l’addestramento si controlla che il modello non impari solo i dati visti,
ma che riesca a operare anche su dati nuovi (overfitting) e, confrontando diverse opzioni, si
sceglie quello che funziona meglio sui dati nuovi, pronto per fare predizioni affidabili.

Neuroni Artificiali
Un neurone artificiale è un piccolo calcolatore che prende dei numeri in input e produce un numero
in output. Si ispira vagamente ai neuroni biologici, ma in realtà è solo matematica.
Ogni input ha un “peso” [w] che dice quanto è importante.
Esempio: se il neurone riceve Età e Reddito, potrebbe pesare di più il Reddito se è più rilevante, un
esempio potrebbe essere: input1×peso1 + input2×peso2 + …

Il Perceptron è un tipo di neurone artificiale semplice, inventato da Frank Rosenblatt negli anni
’50. Questo è usato per classificare i dati in due categorie (ad esempio “sì” o “no”, “rosso” o
“blu”), e attualmente è la base delle reti neurali moderne, anche se molto più semplice.
Provando a dividere il funzionamento a fasi uscirebbe una cosa di questo tipo:
1️) Il perceptron riceve diversi numeri come informazioni in ingresso. Ogni numero rappresenta
una caratteristica del problema. Ad esempio, se vuoi decidere se portare l’ombrello, gli input
potrebbero essere: “probabilità di pioggia” e “nuvolosità”.
2️) Dare peso agli input. Non tutti gli input sono uguali. Il perceptron assegna un peso a ciascun
input, cioè quanto quell’informazione conta nella decisione. Più il peso è grande, più
quell’informazione “spinge” la decisione.
Ad esempio, la probabilità di pioggia potrebbe avere peso alto, la nuvolosità un po’ meno.
3️) Il perceptron fa una somma di tutti gli input moltiplicati per i loro pesi, e aggiunge una sorta di
“spinta extra” chiamata bias. Questo totale indica quanto il perceptron è “convinto” di dire sì o no.
Poi confronta questo totale con una soglia:
Se supera la soglia → output = 1 (ad esempio: “porto l’ombrello”)
Se non supera la soglia → output = 0 (“non lo porto”)
In altre parole, decide come una bilancia: pesa tutto, somma, e decide se l’equilibrio pende da una
parte o dall’altra.
4) imparare dagli errori
Se il perceptron sbaglia la decisione: Guarda quanto si è sbagliato
Aggiusta i pesi degli input in modo che la prossima volta possa fare meglio
Ripete questo processo molte volte con dati diversi finché non impara a classificare correttamente
tutti i casi se possibile.

È da notare che il perceptron può risolvere solo problemi lineari, cioè quelli che se posti
graficamente è possibile tracciare una linea che divide le due categorie, come nella seconda foto.

Neuroni adattivi lineari e convergenza dell’apprendimento


In questo punto tratteremo l’algoritmo Adline, pubblicato da Bernard Widrow pochi anni dopo
Rosenblatt.
Adaline funziona come un perceptron evoluto: invece di prendere solo una decisione sì/no, guarda
gli input, li pesa in base alla loro importanza, li somma con un bias e produce un output continuo
che rappresenta quanto è probabile che accada qualcosa, ad esempio portare l’ombrello. A
differenza del perceptron, che aggiorna i pesi solo quando sbaglia completamente la classificazione,
Adaline confronta il suo output numerico con il valore corretto e aggiusta i pesi e il bias
proporzionalmente all’errore, imparando anche dai piccoli scostamenti. Così, se la previsione è
leggermente troppo bassa o troppo alta, Adaline corregge i pesi in maniera delicata, rendendo
l’apprendimento più stabile e preciso. Ripetendo questo processo su tutti i dati più volte, impara
gradualmente a fare previsioni continue e affidabili, mentre il perceptron può solo dire “sì/no” e
rischia di oscillare o imparare lentamente; in pratica, Adaline è come un consulente dell’ombrello
più fine e attento, che non si limita a dire “portalo o no”, ma stima quanto forte è la probabilità e si
corregge ad ogni piccolo errore per migliorare progressivamente la sua capacità di previsione.

Machine learning su larga scala e discesa stocastica del gradiente


Nel machine learning, i dati grezzi vengono prima trasformati in matrici numeriche ben bilanciate
tramite pulizia, codifica e standardizzazione, perché gli algoritmi lavorano solo su numeri
confrontabili; su questi dati, modelli come il perceptron pesano gli input, sommano un bias e
producono una decisione sì/no, aggiornando i pesi solo quando sbagliano, mentre Adaline migliora
l’apprendimento usando un output continuo e correggendo i pesi proporzionalmente all’errore,
rendendo la previsione più stabile e precisa. Quando i dataset diventano molto grandi, calcolare
l’errore su tutti i dati ad ogni passo diventa troppo lento, quindi si ricorre alla discesa stocastica del
gradiente (SGD), che aggiorna i pesi gradualmente esempio per esempio o a piccoli batch: per ogni
input, il modello misura quanto ha sbagliato e modifica leggermente i pesi e il bias nella direzione
che riduce l’errore, ripetendo il processo continuamente. In questo modo, anche con milioni di
esempi, il modello impara progressivamente, trasformando la geometria dei dati in uno spazio dove
le decisioni o le stime diventano sempre più accurate, combinando la logica di Adaline e perceptron
con una strategia scalabile e efficiente per addestramento su larga scala.

Sckit learn: addestramento di un perceptron


Con Scikit-learn, il machine learning diventa pratico e accessibile perché gestisce automaticamente
molte delle operazioni che prima facevamo a mano. Prima di tutto, i dati grezzi, che possono avere
colonne testuali, valori mancanti o scale diverse, vengono trasformati in matrici numeriche
bilanciate tramite strumenti come StandardScaler (che porta ogni colonna a media zero e
deviazione standard uno) o OneHotEncoder (che trasforma categorie in numeri binari), così come
nell’esempio dell’ombrello dove nuvolosità e probabilità di pioggia erano trasformati in input
numerici confrontabili. Poi si scelgono i modelli: il Perceptron in Scikit-learn funziona come il
neurone artificiale dell’esempio precedente, pesando gli input, sommando un bias e producendo un
output sì/no, aggiornando i pesi automaticamente se sbaglia; l’SGDRegressor permette di replicare
Adaline, cioè un neurone con output continuo che aggiorna i pesi proporzionalmente all’errore,
imparando in maniera più stabile e fine rispetto al perceptron. La libreria gestisce internamente la
discesa stocastica del gradiente (SGD), che significa aggiornare i pesi un esempio alla volta o a
piccoli gruppi di esempi (mini-batch), calcolando l’errore tra la previsione del modello e il valore
reale (target) e modificando i pesi e il bias nella direzione che riduce quell’errore, proprio come
Adaline nell’esempio dell’ombrello che imparava a stimare “quanto forte” era la probabilità di
portare l’ombrello. Tutto ciò permette di scalare facilmente su dataset molto grandi senza rallentare,
ottenendo modelli addestrati pronti a fare predizioni accurate su nuovi dati, combinando in pratica
la logica del perceptron, l’apprendimento continuo di Adaline e la velocità della discesa stocastica
del gradiente, senza dover implementare manualmente pesi, bias o aggiornamenti.

Regressione Logistica
La regressione logistica prende input numerici (come nuvolosità e probabilità di pioggia), li
combina con pesi e bias, applica la sigmoide per ottenere una probabilità e decide la classe finale.
Rispetto al perceptron, l’output è continuo e probabilistico; rispetto ad Adaline, lavora su
classificazione invece che su stima lineare. Con Scikit-learn, tutti i calcoli di output, probabilità,
aggiornamento pesi tramite SGD e gestione delle epoche sono fatti automaticamente, mentre noi
possiamo concentrarci su pre-elaborazione, scelta del modello e interpretazione dei risultati,
rendendo l’approccio scalabile a dataset grandi proprio come negli esempi precedenti dell’ombrello
e di Adaline.

Portiamo tutto in un caso pratico:


Immaginiamo di dover decidere ogni mattina se portare l’ombrello oppure no, usando sempre le
stesse due informazioni: quanto è nuvoloso il cielo e qual è la probabilità di pioggia. Questi due
valori diventano gli input numerici del nostro modello, mentre l’output è una decisione binaria:
ombrello sì oppure no. Tutti i modelli che confrontiamo partono dalla stessa operazione di base,
cioè combinare gli input con dei pesi e aggiungere un bias, ma differiscono nel modo in cui
interpretano il risultato finale.

Nel perceptron, la somma pesata degli input viene confrontata con una soglia fissa. Se la supera, il
modello decide di portare l’ombrello, altrimenti no. Il risultato è una decisione netta, senza
sfumature o incertezze. Il perceptron impara modificando i pesi solo quando sbaglia la decisione,
quindi il suo apprendimento è brusco e discontinuo. Questo lo rende semplice e intuitivo, ma poco
adatto a situazioni ambigue, come quando il cielo è solo parzialmente nuvoloso.

Adaline usa la stessa somma pesata, ma non applica subito una soglia. Il valore che produce è
continuo e può essere interpretato come una misura di quanto le condizioni meteo spingano verso la
scelta di portare l’ombrello. Durante l’addestramento, Adaline aggiorna sempre i pesi in base
all’errore, anche quando la previsione è solo leggermente sbagliata, rendendo l’apprendimento più
stabile rispetto al perceptron. Tuttavia, il valore prodotto non è una probabilità e non ha limiti
naturali, quindi serve comunque una soglia esterna per prendere una decisione finale.

La regressione logistica parte dallo stesso calcolo di Adaline, ma applica una funzione sigmoide che
trasforma il risultato in un numero compreso tra zero e uno. Questo numero rappresenta
direttamente la probabilità che serva l’ombrello. In questo modo il modello non dice solo se portarlo
o no, ma quanto è probabile che sia necessario. La decisione finale viene presa applicando una
soglia, di solito 0.5, ma l’informazione probabilistica rimane disponibile. L’apprendimento avviene
correggendo i pesi in modo graduale, minimizzando una funzione di errore specifica per la
classificazione, ed è per questo che la regressione logistica è molto usata nei problemi reali.

Quando questi modelli vengono usati in pratica con librerie come Scikit-learn, il meccanismo di
apprendimento è lo stesso concettualmente, ma viene eseguito in modo efficiente tramite la discesa
stocastica del gradiente. I pesi vengono aggiornati un esempio alla volta, permettendo di lavorare
anche con dataset molto grandi. La differenza fondamentale, quindi, non sta nella struttura
matematica di base, che è simile per tutti, ma nel significato dell’output: il perceptron prende una
decisione secca, Adaline fornisce una valutazione continua, mentre la regressione logistica
restituisce una probabilità interpretabile, che rende il modello più flessibile e realistico per problemi
decisionali come quello dell’ombrello.

Apprendimento dei pesi della funzione di costo logistico

Nella regressione logistica non basta indovinare la classe giusta, l’obiettivo è assegnare una
probabilità sensata. Questo è il primo grande salto rispetto al perceptron. Dire “ombrello sì” quando
piove è corretto, ma dire “ombrello sì con probabilità 0.99” quando in realtà non piove è una
pessima previsione, anche se la classe sarebbe formalmente giusta. La regressione logistica tiene
conto proprio di questo.

Il modello prende gli input, come nuvolosità e probabilità di pioggia, e fa quello che fanno tutti i
modelli lineari: li combina con dei pesi e aggiunge un bias. Il risultato di questa combinazione è un
numero reale qualsiasi, che da solo non ha ancora un significato probabilistico. A questo punto
entra in gioco la funzione sigmoide. La sigmoide non serve a “decidere”, ma a reinterpretare quel
numero come probabilità, comprimendolo tra zero e uno. Valori molto negativi diventano
probabilità vicine a zero, valori molto positivi diventano probabilità vicine a uno, valori intorno a
zero diventano probabilità intermedie. Questo passaggio è fondamentale: è qui che il modello
smette di essere solo un classificatore lineare e diventa un modello probabilistico.

Una volta ottenuta la probabilità, il modello la confronta con ciò che è realmente successo. Se in
quella giornata hai portato l’ombrello, il valore vero è uno; se non l’hai portato, è zero. La funzione
di costo logistico misura quanto è coerente la probabilità prevista con il risultato reale. Se il modello
assegna una probabilità alta a qualcosa che poi non accade, la penalità è molto grande. Questo
perché il modello era “sicuro” e ha sbagliato. Se invece assegna una probabilità intermedia e
sbaglia, la penalità è più bassa, perché stava esprimendo incertezza. Questo è il motivo per cui la
log-loss non punisce tutti gli errori allo stesso modo: punisce soprattutto le certezze sbagliate.

Ora veniamo all’apprendimento vero e proprio. Il modello vuole ridurre questo costo, cioè vuole
produrre probabilità che siano coerenti con la realtà. Per capire come farlo, si chiede: “quanto ha
influito ciascun peso sull’errore che ho appena commesso?”. Questa domanda è il gradiente. Il
gradiente dice se aumentando o diminuendo un certo peso il costo aumenterebbe o diminuirebbe. Se
un peso ha spinto la probabilità nella direzione sbagliata, il gradiente segnala che va ridotto; se ha
aiutato, segnala che va rafforzato. La discesa del gradiente è semplicemente il meccanismo che usa
questa informazione per correggere i pesi passo dopo passo.

Nella versione stocastica, questo processo avviene usando un esempio alla volta. Il modello vede
una giornata, fa una previsione, misura l’errore, aggiorna subito i pesi, poi passa alla giornata
successiva. Non aspetta di vedere tutti i dati insieme. Questo rende l’apprendimento più reattivo e
adatto a grandi quantità di dati. È come imparare dall’esperienza giorno per giorno, invece che
aspettare la fine dell’anno per fare un bilancio.

Torniamo all’ombrello per chiudere il cerchio. Se il modello vede una giornata molto nuvolosa e
con alta probabilità di pioggia, ma assegna una probabilità bassa all’uso dell’ombrello, la funzione
di costo reagisce con un errore elevato. Questo errore spinge ad aumentare i pesi legati a nuvolosità
e pioggia. Se invece il modello assegna una probabilità alta in una giornata effettivamente piovosa,
il costo è basso e i pesi cambiano poco. Ripetendo questo processo molte volte, il modello non
impara solo “da che parte sta il confine”, come fa il perceptron, ma impara come cambia la
probabilità nello spazio degli input. È per questo che si dice che la regressione logistica impara una
superficie di probabilità e non solo una linea di separazione.

L’Overfitting

L’overfitting succede quando un modello impara troppo bene i dati di addestramento, al punto da
memorizzarli, ma perde la capacità di generalizzare su dati nuovi. In altre parole, il modello non sta
imparando la regola generale che lega input e output, ma sta adattando i pesi per spiegare anche il
rumore, le eccezioni e gli errori presenti nei dati di training. Quando poi vede dati nuovi, le sue
previsioni peggiorano.

Riprendendo l’esempio dell’ombrello, un modello in overfitting non impara una regola del tipo “più
nuvoloso e più alta è la probabilità di pioggia, più conviene portare l’ombrello”, ma impara dettagli
troppo specifici come “in quella giornata particolare con nuvolosità media e pioggia 0.47 non ho
portato l’ombrello”. Queste regole sono vere per il passato, ma inutili per il futuro.

L’overfitting è più probabile quando il modello è troppo complesso rispetto alla quantità di dati,
quando i dati sono rumorosi o quando il modello viene addestrato troppo a lungo. Anche modelli
semplici come la regressione logistica possono andare in overfitting se hanno molte variabili o se i dati
sono pochi e poco rappresentativi. L’opposto dell’overfitting è l’underfitting, in cui il modello è
troppo semplice e non riesce nemmeno a catturare la struttura di base dei dati.

Dal punto di vista della funzione di costo, durante l’addestramento il costo sui dati di training continua
a diminuire, ma quello sui dati nuovi o di validazione smette di migliorare o addirittura
aumenta. Questo è il segnale classico che il modello sta iniziando a memorizzare invece di imparare. In
termini di probabilità, il modello diventa troppo sicuro delle sue previsioni sul training set, assegnando
probabilità estreme anche quando non dovrebbe.

Per evitare l’overfitting si usano varie strategie. La più importante è la regolarizzazione, che aggiunge
una penalità ai pesi troppo grandi, costringendo il modello a preferire soluzioni più semplici e stabili.
Un’altra strategia è fermare l’addestramento prima che il modello inizi a sovra-adattarsi, osservando le
prestazioni su un set di validazione. Anche avere più dati o meno variabili aiuta, perché rende più
difficile per il modello “imparare a memoria”.

Il collegamento con Scikit-learn è diretto: quando usi modelli come la regressione logistica, la
regolarizzazione è attiva di default proprio per prevenire l’overfitting. Anche se non la vedi
esplicitamente, la libreria sta già limitando la complessità del modello mentre ottimizza i pesi con la
discesa del gradiente.

Classificazione a massimo margine con le macchine a vettori di supporto

L’idea centrale delle Support Vector Machine (SMV) non è stimare una probabilità come nella
regressione logistica, né semplicemente separare le classi come fa il perceptron, ma trovare il
confine di decisione più “robusto” possibile. Robusto significa che non basta separare
correttamente i dati di training: il confine deve essere il più lontano possibile dai punti di entrambe
le classi. Questa distanza si chiama margine, e massimizzarla è il vero obiettivo delle SVM.

Riprendiamo ancora l’esempio dell’ombrello. Immagina di disegnare su un piano i giorni in cui hai
portato l’ombrello e quelli in cui non l’hai portato, usando nuvolosità e probabilità di pioggia come
assi. Ci sono infinite rette che separano i due gruppi di punti. Il perceptron si accontenta di trovarne
una qualunque che non sbagli. La regressione logistica ne trova una che produce buone probabilità.
La SVM invece cerca quella retta che lascia la “zona di sicurezza” più ampia possibile tra i due
gruppi. Più questa zona è larga, meno il modello è sensibile a piccole variazioni o rumore nei dati, e
quindi meno tende all’overfitting.

Il margine è definito come la distanza tra la retta di separazione e i punti più vicini a essa. Questi
punti speciali si chiamano support vectors. Sono pochissimi rispetto al totale dei dati, ma sono gli
unici che contano davvero: se sposti un punto lontano dal confine, la soluzione non cambia; se
sposti un support vector, il confine cambia. Questo è un altro aspetto cruciale delle SVM: il modello
finale dipende solo da una piccola parte dei dati.

Dal punto di vista dell’apprendimento, massimizzare il margine equivale a risolvere un problema di


ottimizzazione che bilancia due obiettivi. Da un lato, si vuole un margine grande; dall’altro, si vuole
penalizzare gli errori o le violazioni del margine. Qui entra in gioco il parametro C, che controlla
quanto la SVM è severa. Se C è grande, il modello cerca di non sbagliare quasi mai sul training set,
anche a costo di un margine più stretto. Se C è piccolo, il modello accetta qualche errore pur di
mantenere un margine ampio, diventando più robusto e meno incline all’overfitting.

Rispetto a quanto hai visto prima, la differenza concettuale è forte. Il perceptron guarda solo se un
punto è dalla parte giusta o sbagliata. La regressione logistica guarda quanto è probabile che un
punto appartenga a una classe. La SVM guarda quanto è lontano dal confine, e costruisce il
modello per massimizzare questa distanza minima. È per questo che si dice che la SVM implementa
il principio della massimizzazione del margine: invece di adattarsi ai dati, cerca la separazione più
stabile possibile.

Nel riquadro Perceptron (in alto a sinistra) si vede una linea netta chiamata “confine netto”. Il
perceptron decide in modo secco: da una parte sì ombrello, dall’altra no. Non esistono sfumature né
probabilità. Se un punto cade a destra della linea, la decisione è “ombrello”, se cade a sinistra è
“niente ombrello”. Questo rende il modello semplice ma rigido: basta poco per cambiare
completamente la decisione.

Nel riquadro Adaline (in alto a destra) la linea di separazione esiste ancora, ma attorno a essa
compare una zona sfumata colorata. Questo significa che Adaline non ragiona solo in termini di
giusto/sbagliato, ma considera quanto è lontano un punto dalla linea. Più un punto è verso il rosso,
più il modello è “convinto” di prendere l’ombrello; più è verso il blu, più è convinto del contrario.
Qui l’apprendimento è più stabile perché l’errore viene misurato in modo continuo.

Nel riquadro Regressione Logistica (in basso a sinistra) la linea non è più solo un confine, ma una
soglia di probabilità, indicata come “soglia 0.5”. La zona colorata rappresenta una vera mappa di
probabilità: vicino al blu la probabilità di prendere l’ombrello è bassa, vicino al rosso è alta. Un
punto vicino alla linea non è semplicemente classificato, ma ha una probabilità vicina al 50%.
Questo modello non dice solo “sì o no”, ma “quanto è probabile che tu prenda l’ombrello”.

Nel riquadro SVM (in basso a destra) si vede invece una linea centrale e due linee tratteggiate
parallele: questo è il margine. La SVM non cerca solo di separare i punti, ma di farlo nel modo più
robusto possibile, massimizzando la distanza tra le classi. I punti cerchiati sono i vettori di
supporto, cioè i giorni critici più vicini al confine: sono loro che determinano la posizione della
linea. Tutti gli altri punti contano meno o per niente.

Kernel e gli Iperpiani di separazione


Finora abbiamo sempre immaginato i dati dell’ombrello su un piano: nuvolosità su un asse,
probabilità di pioggia sull’altro. In questo spazio bidimensionale cerchiamo una retta che separi chi
prende l’ombrello da chi non lo prende. Ma nel mondo reale spesso i punti sono intrecciati: non
esiste nessuna retta che li separi bene. In altre parole, nello spazio originale non c’è un iperpiano
di separazione.

Qui entra in gioco il kernel. L’idea chiave è questa: invece di forzare una separazione complicata
nello spazio originale, la SVM trasforma implicitamente i dati in uno spazio di dimensione più
alta, dove la separazione diventa semplice e lineare. Per esempio, da un piano si può passare a uno
spazio tridimensionale, o a uno spazio con moltissime dimensioni. In questo nuovo spazio, ciò che
prima era una curva o una forma complicata diventa un iperpiano.

È importante capire che la SVM non costruisce esplicitamente questo spazio più grande. Non
calcola davvero nuove coordinate gigantesche. Usa invece una scorciatoia matematica chiamata
kernel trick: una funzione kernel permette di calcolare direttamente il prodotto scalare nello spazio
trasformato, senza mai rappresentarlo. In pratica, la SVM si comporta come se i dati fossero stati
“sollevati” in uno spazio più ricco, ma senza pagarne il costo computazionale.

Torniamo all’esempio dell’ombrello. Immagina che le decisioni non dipendano solo linearmente da
nuvolosità e probabilità di pioggia, ma da una combinazione più complessa: per esempio prendi
l’ombrello solo quando entrambe sono alte, ma non quando una è alta e l’altra bassa. Sul piano
questo disegna una forma curva, impossibile da separare con una retta. Applicando un kernel, la
SVM introduce nuove dimensioni implicite che catturano queste interazioni. In quello spazio più
alto, esiste un iperpiano che separa bene i giorni “ombrello” dai giorni “no ombrello”. Quando poi
riporti la decisione nello spazio originale, l’iperpiano appare come una frontiera curva.

Diversi kernel corrispondono a diversi modi di arricchire lo spazio. Il kernel polinomiale permette
separazioni che tengono conto di potenze e interazioni tra variabili. Il kernel RBF (gaussiano) crea
regioni di influenza attorno ai punti e consente confini molto flessibili. Il kernel lineare, invece, non
trasforma nulla ed è equivalente a una SVM classica a margine massimo.

Il punto cruciale è che, anche con i kernel, la filosofia della SVM non cambia: si cerca sempre un
iperpiano che massimizza il margine. Cambia solo lo spazio in cui questo iperpiano vive. È per
questo che le SVM con kernel riescono a risolvere problemi complessi senza perdere il controllo
sull’overfitting: il margine e i parametri del kernel regolano quanto il modello può piegarsi ai dati.
Ecco 2 visioni della stessa separazione, la prima sotto sempre 2 dimensioni, la seconda aumentando
di una dimensione.

Potrebbero piacerti anche