LASSO e discesa del gradiente
In questa pagina 5
La ridge regressionUna buona prestazione sul training non basta: serve stimare quella su dati nuovi. La cross-validation (K-fold: $k$ parti, ciascuna a turno come test, errore medio; Monte Carlo: $k$ divisioni casuali con quota di test $q$; leave-one-out se $k=n$) evita di dipendere da una sola divisione casuale. L'errore atteso si scompone in $\text{bias}^2+\text{varianza}+\sigma^2$: i modelli semplici fanno underfitting (bias alto), quelli complessi overfitting (varianza alta). La regolarizzazione aggiunge alla perdita una penalità: la ridge regression minimizza $|y-X\beta|^2+\lambda\sum_{j\ge1}\beta_j^2$ e ha soluzione $\beta=(X^TX+\lambda\tilde I)^{-1}X^Ty$ (l'intercetta non si penalizza, le feature si standardizzano): riduce i coefficienti, rende l'inversa stabile con feature collineari, e $\lambda$ è un iperparametro scelto con la validazione (cross-validation annidata per non contaminare il test).Overfitting, ridge regression e cross-validation → riduce i coefficienti ma non li azzera mai. Cambiando la penalità si ottiene il LASSO, che produce modelli sparsi; ma per questo non c'è una formula chiusa e serve un algoritmo iterativo: la discesa del gradiente, che si usa anche per la regressione logistica e per le reti neurali (Lezione 10 · LASSO e discesa del gradiente, Lezione 12 · Laboratorio di regolarizzazione). Gli esercizi sono Esercizio - Discesa del gradiente per il LASSO e scelta del passo e Esercizio - Cross-validation annidata per il LASSO sul dataset prostate; la variante con funzione di costo asimmetrica è Esercizio - Regressione quantile con funzione pinball e discesa del gradiente.
Dalla ridge al LASSO
Si parte dalla funzione di costo regolarizzata , con penalità sulla complessità. Per si ha la ridge (). E se si sceglie un'altra penalità?
Definizione (LASSO). Least Absolute Shrinkage and Selection Operator: penalità , somma dei valori assoluti dei coefficienti, con non penalizzato (come nella ridge) e feature standardizzate (Statistica per il machine learningI dati di un problema ML si organizzano nella matrice di progetto $X$ ($n$ osservazioni, $p$ variabili). La statistica serve a capirli, ripulirli e prepararli: i momenti (media $\mu$, varianza $\sigma^2$, asimmetria, curtosi), i quartili con lo scarto interquartile $\mathrm{IQR}=Q_3-Q_1$ (all'esame senza interpolazione), la moda per i dati categorici. Con queste quantità si imputano i dati mancanti (media o mediana), si eliminano le variabili costanti e si standardizza con lo z-score $z=(x-\mu)/\sigma$, usando sempre media e deviazione standard del solo training set.Statistica per il machine learning →). In forma matriciale, con comprensiva della colonna di uni: .
Esempio. Con e la penalità vale , mentre la ridge con lo stesso varrebbe (il valore assoluto penalizza di più i coefficienti piccoli, il quadrato quelli grandi).
Trace plot e sparsità
Se si riporta il valore di ciascun coefficiente in funzione di (trace plot), sul dataset prostate (97 osservazioni, 8 feature cliniche, target: livello di log-PSA) si vede che i coefficienti della ridge si riducono gradualmente verso zero ma restano diversi da zero, mentre quelli del LASSO arrivano a zero uno dopo l'altro: a elevato rimangono pochi coefficienti non nulli. Una soluzione con un sottoinsieme di coefficienti uguali a zero si dice sparsa.
Perché una soluzione sparsa è utile.
- Efficienza: previsioni più veloci, meno memoria, riaddestramento più rapido.
- Robustezza: meno sensibile ai dati rumorosi.
- Interpretabilità: meno variabili, modello più facile da capire.
- Gestione: sistema più semplice da mettere in produzione (anche su dispositivi piccoli).
Il LASSO fa la selezione delle feature, che è un passo di preprocessing, direttamente nella fase di modellazione.
Perché la penalità azzera i coefficienti: il caso con una variabile
Il caso più semplice si può risolvere a mano. Si abbia una sola feature con (colonna di norma 1 e centrata) e si indichi con il coefficiente OLS, . Allora (perché e ). Il costo da minimizzare è
- Ridge (penalità ): . Il coefficiente è diviso per : non è mai zero se .
- LASSO. Per : , accettabile solo se . Per : , accettabile solo se . Se nessuno dei due vale e il minimo è in (nel punto angoloso il valore assoluto ha pendenza che va da a e riesce a bilanciare la pendenza del termine quadratico quando ). In una formula (soglia morbida, soft-thresholding):
Esempio (). Per : LASSO , ridge . Per : LASSO (perché ), ridge . Per : LASSO , ridge . Il LASSO sottrae una quantità fissa e taglia a zero i coefficienti piccoli; la ridge li riduce in proporzione e non li annulla.
Grafico interattivo: Coefficiente OLS z (ascissa) e coefficiente regolarizzato (ordinata) per λ = 1: il LASSO è nullo per |z| ≤ 0,5 e poi sottrae 0,5 (soglia morbida), la ridge divide per 2 e non si annulla mai
Interpretazione geometrica
Il problema regolarizzato è equivalente (per un opportuno legato a ) a minimizzare l'errore quadratico con un vincolo: per il LASSO, per la ridge (relazione con i moltiplicatori di Lagrange: Massimi e minimi vincolati e moltiplicatori di LagrangeGli estremi di f sul vincolo g = c si cercano per sostituzione, per parametrizzazione o con i moltiplicatori di Lagrange: se f, g sono C¹, P0 è un estremo vincolato e ∇g(P0) ≠ 0, esiste λ con ∇f(P0) = λ∇g(P0) (curva di livello di f tangente al vincolo). Si risolve il sistema ∇f = λ∇g, g = c, si aggiungono i punti del vincolo con ∇g = 0 e si confrontano i valori; se il vincolo è compatto, Weierstrass garantisce massimo e minimo.Massimi e minimi vincolati e moltiplicatori di Lagrange →). Con due coefficienti il vincolo è un rombo per il LASSO (con gli spigoli sugli assi) e un cerchio per la ridge. Le curve di livello dell'errore sono ellissi centrate nella soluzione OLS; la soluzione regolarizzata è il primo punto in cui l'ellisse tocca il vincolo. Per il cerchio il contatto avviene in un punto qualsiasi del bordo (di solito con entrambe le coordinate non nulle); il rombo ha spigoli sugli assi, e l'ellisse tende a toccare uno spigolo, dove una coordinata è zero: soluzione sparsa.
Grafico interattivo: Due coefficienti: il vincolo del LASSO |β₁| + |β₂| ≤ 1 è un rombo, quello della ridge β₁² + β₂² ≤ 1 un cerchio; una curva di livello dell'errore (ellisse con centro (1,8; 0,7), la soluzione OLS) tocca il rombo nello spigolo (1, 0), dove β₂ = 0
(L'ellisse del disegno è stata scelta in modo da toccare lo spigolo; con altri dati il contatto cade altrove: la sparsità è una tendenza della penalità , non una garanzia.)
Ridge e LASSO a confronto
| Ridge () | LASSO () | |
|---|---|---|
| Pro | previene l'overfitting riducendo i coefficienti; funziona bene con feature collineari (distribuisce i pesi); ha una soluzione in forma chiusa | seleziona le feature e dà un modello sparso, più semplice e interpretabile |
| Contro | non azzera nulla: nessuna selezione di feature, modello meno interpretabile; non ideale con molte feature irrilevanti | nessuna formula chiusa; con feature molto correlate tende a sceglierne una quasi a caso (instabile) |
Elastic Net. Combina le due penalità per superarne i difetti: Per è il LASSO puro, per la ridge pura. Il vincolo geometrico è un rombo con i lati incurvati, tra il rombo e il cerchio.
La discesa del gradiente
Idea
Per il LASSO non si può risolvere in forma chiusa. Come per ogni addestramento supervisionato (minimizzare una perdita , che può essere l'MSE o la cross-entropy della classificazione), si cerca il vettore di pesi che minimizza la perdita totale: Il gradiente , vettore delle derivate parziali (Differenziabilità e gradientef è differenziabile in x0 se f(x) = f(x0) + ∇f(x0)·(x − x0) + o(‖x − x0‖): vicino a x0 il grafico si confonde con il piano tangente z = f(x0) + ∇f(x0)·(x − x0). Differenziabile ⇒ continua, derivabile e D_v f = ∇f·v; derivate parziali continue ⇒ differenziabile. Il gradiente indica la direzione di massima crescita (pendenza ‖∇f‖) ed è ortogonale alle curve di livello.Differenziabilità e gradiente →, Gradiente e direzione di massima crescitaIl gradiente è il vettore delle derivate parziali ∇f(p) = (∂₁f(p), …, ∂ₙf(p)). Se f è C¹ (derivate parziali continue) vale la formula del gradiente D_u f(p) = ∇f(p)·u: tutte le derivate direzionali si ottengono dalle parziali e u ↦ D_u f(p) è lineare. Tra i versori, la crescita è massima lungo ∇f/|∇f| (pendenza |∇f|), minima lungo −∇f/|∇f| (pendenza −|∇f|), nulla lungo le direzioni ortogonali al gradiente. Utili: ∇|x| = x/|x|, ∇φ(|x|) = φ'(|x|) x/|x|.Gradiente e direzione di massima crescita →), punta nella direzione di massima crescita di ed è perpendicolare alle curve di livello. Per scendere si va nella direzione opposta.
Formula (discesa del gradiente, gradient descent). Partendo da un iniziale, si ripete dove è il passo (learning rate), fino a convergenza (per esempio finché o dopo un numero massimo di iterazioni).
inizializza W (a caso, ~N(0, σ²), oppure con le scelte sotto)
ripeti fino a convergenza:
g = gradiente di J in W
W = W - eta * g
restituisci WEsempio in una variabile. ha gradiente e minimo in . L'aggiornamento è . Partendo da :
| iterate | comportamento | |
|---|---|---|
| converge lentamente (fattore a ogni passo) | ||
| arriva subito al minimo | ||
| diverge (fattore , con modulo maggiore di 1) |
Grafico interattivo: Discesa del gradiente su J(w) = w² partendo da w = 4: con η = 0,1 si scende lentamente verso il minimo, con η = 1,1 i passi saltano da un lato all'altro della parabola e si allontanano
Scelta del passo
Il passo è critico: troppo grande, l'algoritmo diverge; troppo piccolo, la convergenza è lenta. Indicazioni:
- Limite superiore. Per l'errore quadratico il gradiente è . Sia il minimo e l'errore. Poiché , un passo dà . Si decompone nella base degli autovettori di (simmetrica, autovalori : Autovalori e autovettoriUn autovettore è un vettore non nullo che una funzione lineare manda in un suo multiplo; si trovano gli autovalori come radici del polinomio caratteristico det(A − λI) e gli autovettori come nucleo di A − λI. Matrici simili hanno gli stessi autovalori.Autovalori e autovettori →, Teorema spettrale e forme quadraticheUna funzione lineare è simmetrica se f(v)·w = v·f(w); in una base ortonormale ha matrice simmetrica. Teorema spettrale: f è simmetrica se e solo se esiste una base ortonormale di autovettori, cioè A simmetrica ⇔ PᵀAP diagonale con P ortogonale. Applicato alle forme quadratiche, permette di scriverle come somma di quadrati con gli autovalori come coefficienti.Teorema spettrale e forme quadratiche →): la componente si moltiplica per a ogni passo, quindi tende a zero se e solo se , cioè . Per tutte le direzioni: (il massimo autovalore di , la costante di Lipschitz delle slide). Con la perdita normalizzata per o con altri fattori il limite cambia per lo stesso fattore.
- Passo adattivo. Si fa decrescere durante l'addestramento: passi grandi all'inizio (lontano dal minimo), piccoli alla fine: con passo iniziale, l'iterazione, parametro di decadimento (per esempio ).
Esempio completo (stessi dati della regressione lineare). Per , la matrice ha autovalori e ; quindi . Con e : il gradiente è e il primo passo dà . Al secondo passo il gradiente è e ; al terzo e . Dopo 2000 iterazioni , la soluzione OLS (la direzione dell'autovalore piccolo converge lentamente). Con il metodo diverge: i valori del gradiente passano da a , poi , e crescono in modulo.
La stessa convergenza si osserva nel laboratorio (MSE per , , : troppo piccolo, giusto, troppo grande). Con la perdita diverge, ma con il passo adattivo si stabilizza.
Da dove partire
Il punto iniziale può essere casuale, ma alcune regole accelerano la ricerca:
- se è grande: partenza da zero (la soluzione ha molti coefficienti nulli);
- se le feature sono molto correlate: partire dalla soluzione ridge;
- se le feature sono indipendenti e è piccolo: partire dalla soluzione OLS;
- nel dubbio: ridge o OLS, che sono punti di partenza ragionevoli.
Il gradiente del LASSO: il subgradiente
Il valore assoluto non è derivabile in (Derivata - definizione e significatoLa derivata è il limite del rapporto incrementale; geometricamente è la pendenza della retta tangente. f è derivabile in x0 se e solo se f(x) = f(x0) + f'(x0)(x − x0) + o(x − x0); derivabile implica continua, non viceversa. Derivata destra e sinistra, punti angolosi, flessi a tangente verticale, cuspidi.Derivata - definizione e significato →): la derivata vale per , per e per non è definita (il grafico ha uno spigolo). Si usa il subgradiente: un numero tale che la retta di pendenza per il punto sta sotto la funzione, Per l'insieme dei subgradienti è Si può quindi usare con la convenzione . Il termine dell'errore ha gradiente (come per l'OLS), perciò con :
Formula (subgradiente del LASSO). con al posto di perché l'intercetta non si penalizza.
Esempio. Con , e componente dell'errore : il subgradiente è .
La funzione di costo è convessa in tutti e tre i casi (OLS, ridge, LASSO): somma di una quadratica convessa e di una penalità convessa (Funzioni convesse in più variabiliUn insieme C è convesso se contiene il segmento tra due suoi punti; f: C → R è convessa se f(tx + (1−t)y) ≤ t f(x) + (1−t) f(y) per t in [0,1], cioè il grafico sta sotto le corde. Se f è differenziabile, è convessa se e solo se f(y) ≥ f(x) + ∇f(x)·(y − x) (il grafico sta sopra ogni piano tangente). Se f è C² su un aperto convesso, è convessa se e solo se l'hessiana è semidefinita positiva in ogni punto; se è definita positiva ovunque f è strettamente convessa (non vale il viceversa: x⁴). Per una funzione convessa ogni punto critico è un minimo globale.Funzioni convesse in più variabili →); nelle curve di livello (cerchi per ridge e OLS standardizzati, forma «a diamante» smussato per il LASSO) c'è un solo minimo. Per questo la discesa del gradiente non resta intrappolata in minimi locali. Con il subgradiente, però, i coefficienti tendono a oscillare intorno a zero senza fermarsi esattamente su zero; per ottenere zeri esatti si usano metodi dedicati, come la soglia morbida vista sopra (coordinata per coordinata) o la Least Angle Regression (LARS), citati nelle slide con i «metodi per sottocoordinate».
import numpy as np
def lasso_gradient(X, y, beta, lam):
g = 2 * X.T @ (X @ beta - y) # parte dell'errore quadratico
pen = lam * np.sign(beta) # subgradiente di |beta_j|
pen[0] = 0 # niente penalità sull'intercetta
return g + pen
def train_lasso_gd(X, y, lam, lr, max_iter=1000, tol=1e-6):
X = np.hstack([np.ones((len(X), 1)), X]) # X standardizzata + colonna di uni
beta = np.random.randn(X.shape[1], 1)
for _ in range(max_iter):
new = beta - lr * lasso_gradient(X, y, beta, lam)
if np.linalg.norm(new - beta) < tol: # criterio di arresto
break
beta = new
return betay deve avere forma come beta, altrimenti la sottrazione X @ beta - y fa il broadcasting e i risultati sono sbagliati in silenzio.
Scegliere il passo e
Il passo e sono iperparametri. Il laboratorio (Lezione 12 · Laboratorio di regolarizzazione) li sceglie con la cross-validation annidata sul dataset prostate (Overfitting, ridge regression e cross-validationUna buona prestazione sul training non basta: serve stimare quella su dati nuovi. La cross-validation (K-fold: $k$ parti, ciascuna a turno come test, errore medio; Monte Carlo: $k$ divisioni casuali con quota di test $q$; leave-one-out se $k=n$) evita di dipendere da una sola divisione casuale. L'errore atteso si scompone in $\text{bias}^2+\text{varianza}+\sigma^2$: i modelli semplici fanno underfitting (bias alto), quelli complessi overfitting (varianza alta). La regolarizzazione aggiunge alla perdita una penalità: la ridge regression minimizza $|y-X\beta|^2+\lambda\sum_{j\ge1}\beta_j^2$ e ha soluzione $\beta=(X^TX+\lambda\tilde I)^{-1}X^Ty$ (l'intercetta non si penalizza, le feature si standardizzano): riduce i coefficienti, rende l'inversa stabile con feature collineari, e $\lambda$ è un iperparametro scelto con la validazione (cross-validation annidata per non contaminare il test).Overfitting, ridge regression e cross-validation →): fold esterni, fold interni, griglia di 28 combinazioni (4 passi 7 valori di , da a ), con le feature standardizzate dentro ogni fold usando solo il training. Nelle combinazioni con passo troppo grande e elevato l'algoritmo diverge (valori inf/nan): la selezione le scarta perché l'errore di validazione risulta il peggiore.
Errori tipici
- Penalizzare l'intercetta o non standardizzare le feature prima del LASSO.
- Scegliere troppo grande: l'errore cresce invece di scendere (controllare la curva di perdita).
- Usare lo stesso insieme per scegliere e per stimare la prestazione.
- Aspettarsi dal subgradiente zeri esatti: servono soglia morbida o metodi dedicati.
- Dimenticare il verso: il gradiente punta verso l'alto, l'aggiornamento sottrae .
- Con feature molto correlate il LASSO ne sceglie una in modo instabile: meglio Elastic Net o ridge.
Versione ripasso
Definizione (LASSO). Penalità : ( non penalizzato, feature standardizzate). Porta coefficienti esattamente a zero: soluzione sparsa, selezione delle feature, modello leggero e interpretabile, robusto.
Esempio. , : penalità , ridge .
Una variabile (, coefficiente OLS): ridge ; LASSO (soglia morbida: , nullo in se ). Con : (LASSO) e (ridge); e .
Geometria. Vincolo = rombo (spigoli sugli assi), ridge = cerchio; l'ellisse dell'errore tocca il rombo in uno spigolo coefficiente nullo.
Ridge vs LASSO. Ridge: forma chiusa, buona con collinearità, non seleziona. LASSO: seleziona, niente forma chiusa, instabile con feature correlate. Elastic Net: , , ( LASSO, ridge).
Formula (discesa del gradiente). fino a convergenza. Il gradiente indica la massima crescita; si va in senso opposto.
Esempio. , : ; : ; : subito; : diverge.
Passo. Per : errore , converge se , cioè (esempio: ). Adattivo: . Partenza: grande zero; feature correlate ridge; indipendenti e piccolo OLS.
Formula (subgradiente LASSO). . Subgradiente di : per , per , per .
Esempio. , , errore : subgradiente .
è convessa (un solo minimo); il subgradiente non dà zeri esatti (servono soglia morbida, LARS). e si scelgono con la cross-validation annidata.
Errori tipici: penalizzare l'intercetta; non standardizzare; troppo grande; scordare il segno meno; aspettarsi zeri esatti dal subgradiente.
Esercizi su questo argomento
- Esercizio - Confronto di tecniche di regolarizzazione su MNIST
- Esercizio - Cross-validation annidata per il LASSO sul dataset prostate
- Esercizio - Cross-validation k-fold e Monte Carlo per OLS e ridge sul dataset Advertising
- Esercizio - Discesa del gradiente per il LASSO e scelta del passo
- Esercizio - Pseudo-etichette con k-NN e regressione logistica
- Esercizio - Regressione logistica su sei punti con discesa del gradiente
- Esercizio - Regressione quantile con funzione pinball e discesa del gradiente
- Esercizio - Test di esempio della parte teorica (simulazione d'esame)
- Esercizio - XAI su cardiopatia e calcolo a mano di permutation importance, PDP e Shapley