Metodi ensemble - bagging, random forest e boosting
In questa pagina 9
L'albero di decisioneUn albero di decisione partiziona i dati con una sequenza di regole su una sola variabile alla volta (nodi interni = regole, foglie = predizioni: classe più frequente, oppure media del target in regressione). Si costruisce in modo ricorsivo scegliendo a ogni nodo la divisione che rende i figli più «puri»: con l'entropia $H=-\sum p_i\log_2p_i$ e il guadagno d'informazione $IG=H(S)-\sum\frac{|S_v|}{|S|}H(S_v)$ (ID3), oppure con l'indice di Gini $1-\sum p_i^2$ e soglie $x\le t$ su variabili numeriche (CART); in regressione con MSE o riduzione di varianza. Un albero pienamente sviluppato fa overfitting (varianza alta): si limita con la profondità massima (pre-potatura) o con la potatura a costo-complessità $R_\alpha(T)=R(T)+\alpha|T|$ (post-potatura). Pro: interpretabile, niente normalizzazione, predizione immediata; contro: varianza alta, da cui le foreste. Programma di Telecomunicazioni: Decision Trees e Random Forests.Alberi di decisione → è interpretabile e veloce ma è un classificatore ad alta varianza. I metodi ensemble combinano molti modelli semplici (weak learner, di solito alberi) in uno più robusto (Lezione 16 · Alberi di decisione e random forest, Lezione 17 · Metodi ensemble basati su alberi). Tutti cercano di superare l'overfitting degli alberi singoli (1) costruendo più alberi, (2) imponendo vincoli su dati, feature, struttura o apprendimento, (3) combinandone le uscite. Gli esercizi sono Esercizio - ID3 con potatura e foresta casuale sul dataset Titanic, Esercizio - Gradient boosting per la regressione sul dataset housing, Esercizio - Importanza delle feature di un albero sul dataset wine e Esercizio - Curva ROC e AUC di una foresta casuale e di un albero (Lezione 18 · Laboratorio sui metodi ad albero).
Perché mediare riduce la varianza
Siano stimatori (per esempio le previsioni di alberi) con la stessa varianza e correlazione tra due qualunque di essi. La media ha varianza (Si è usata la varianza di una somma di variabili correlate, Varianza e momentiI momenti E[X^k] e i momenti centrati E[(X − μ)^k] descrivono la forma di una legge; la varianza Var(X) = E[(X − μ)²] = E[X²] − E[X]² misura quanto X si disperde attorno alla media, vale Var(aX + b) = a² Var(X) e Var(X) = 0 solo se X è costante.Varianza e momenti → e Covarianza e coefficiente di correlazioneCov(X, Y) = E[(X − E X)(Y − E Y)] = E[XY] − E[X]E[Y] misura quanto X e Y variano insieme; è bilineare, Cov(X, X) = Var(X), Var(X + Y) = Var X + Var Y + 2Cov(X, Y); ρ = Cov / (σ_X σ_Y) sta in [−1, 1] e vale ±1 solo per legami lineari. Indipendenti ⇒ non correlate, ma non viceversa (tranne per i vettori gaussiani).Covarianza e coefficiente di correlazione →: ci sono varianze e coppie ordinate, ciascuna con covarianza .) Con : per (alberi indipendenti) la varianza è , cioè con e con ; per vale con e con ; per (alberi uguali) resta .
Quindi mediare riduce la varianza, ma solo se gli alberi sono poco correlati: la parte non scompare aumentando . Tutto il bagging serve a rendere gli alberi diversi.
Bagging
Definizione (bagging, bootstrap aggregating). Per costruire una foresta di alberi: per ciascun albero si estrae dal training di campioni un campione bootstrap, cioè campioni con rimpiazzo (ogni estratto è rimesso nell'urna prima della successiva); si addestra un albero su ciascun campione; per classificare si fa il voto di maggioranza (la moda), per la regressione la media.
Con il rimpiazzo alcuni campioni compaiono più volte e altri mai. La probabilità che un dato campione non sia mai estratto in estrazioni è , che tende a (Esponenziale e logaritmoLa funzione esponenziale a^x (base positiva diversa da 1) e la sua inversa, il logaritmo in base a, con grafici e proprietà.Esponenziale e logaritmo →; per vale , per ): ogni albero vede circa il dei campioni distinti, e il restante (out-of-bag) può servire come validazione. Esempio: con un campione bootstrap possibile è (i campioni 2 e 5 sono fuori).
Il bagging riduce la varianza senza aumentare il bias: la previsione di un solo albero è molto sensibile al rumore del suo training, la media di molti alberi non lo è, finché non sono correlati; il bootstrap «decorrela» gli alberi mostrando a ciascuno un training diverso.
Esempio di voto. Con alberi che predicono per un campione: classe con voti su , «confidenza» (la frazione di voti per la classe vincente). Nel laboratorio (dataset wine, alberi di profondità 2) l'accuracy sul test è e gli errori hanno confidenza o .
Random forest
Definizione (random forest). Bagging in più: a ogni split di ogni albero, invece di valutare tutte le feature se ne estrae a caso un sottoinsieme (tipicamente , con feature) e si sceglie lo split migliore solo tra queste (feature bagging).
Perché. Se una o poche feature sono predittori molto forti, compaiono nella radice di quasi tutti gli alberi e li rendono correlati (cioè alto): la riduzione di varianza svanisce. Il feature bagging obbliga ad esplorare altre feature e abbassa .
Caratteristiche. Iperparametro principale: il numero di alberi (ne basta «abbastanza»; più alberi non causano overfitting ma costano di più). Pro: multiclasse, nessuna normalizzazione dei dati, parte costosa fatta offline, classificazione quasi immediata, accuratezza molto alta. Contro: calcolo oneroso (ma parallelizzabile), minore interpretabilità (non del tutto: vedi l'importanza delle feature). Si usa anche per la regressione (media).
Esempio (laboratorio, wine, feature bagging, ). Accuracy sul test con profondità 2 e 4 e con profondità 10; un solo albero di profondità 2-3 dava -.
Importanza delle feature
Definizione (importanza di una feature). La misura di quanto una feature è utile alle previsioni, basata su quanto riduce l'impurità quando è usata per dividere. È un approccio «globale» di intelligenza artificiale spiegabile (Explainable AI (XAI)approfondimento: non nel programma di Telecomunicazioni. L'interpretabilità è l'arte di produrre descrizioni di un modello abbastanza semplici da essere capite da un umano; la spiegabilità aggiunge la completezza (permettere di anticipare la previsione). I metodi si classificano in intrinseci o post-hoc, agnostici o specifici del modello, globali o locali. Modelli intrinsecamente interpretabili: regressione lineare (pesi $\beta_j$, intervalli di confidenza, LASSO per la sparsità), regressione logistica ($\log\frac y{1-y}=\beta_0+\sum\beta_jx_j$), alberi. Importanza nelle foreste: MDI $=\sum_{\text{nodi}}\frac{n_p}{n_{TOT}}\Delta Gini$ (con feature selection bias). Metodi agnostici: permutation importance (aumento dell'errore dopo aver mescolato una feature), PDP $\hat f_S(x_S)=\frac1n\sum_if(x_S,x_C^{(i)})$ (media delle curve ICE), LIME (modello semplice locale pesato sui punti perturbati), SHAP (valori di Shapley: media dei contributi marginali su tutti gli ordini, somma $=f(x)-f(\text{base})$). Per le reti profonde: mappe di salienza, Grad-CAM, occlusione. Valutazione: livello applicativo, umano, funzionale. Lab: cardiopatia AHD con logistica, LASSO, random forest, ICE, PDP, SHAP.Explainable AI (XAI) →): dà informazioni sull'intero modello.
Con la Gini, per ogni albero: (1) a ogni nodo interno la riduzione di impurità è , pesata per ( campioni totali); (2) l'importanza di una feature è la somma di queste riduzioni sui nodi che la usano; (3) nella foresta si media sugli alberi; (4) (opzionale) si normalizza a somma .
Esempio (iris, albero di profondità 3). Nodi: radice (150 campioni) con la larghezza del petalo: ; nodo «larghezza » (100 campioni, di nuovo larghezza): ; due nodi con la lunghezza del petalo: e . Importanza grezza: larghezza , lunghezza ; normalizzando (divisione per la somma ): e (coincide con feature_importances_ di scikit-learn). Sul dataset wine le feature più importanti sono proline, intensità del colore e flavonoidi.
Come usarla. Per eliminare le feature quasi irrilevanti, capire il fenomeno, guidare la raccolta dati.
Boosting: l'idea
Definizione (boosting). Si costruisce un modello forte (strong learner) combinando in sequenza molti modelli deboli (alberi con pochi split); ciascun nuovo modello cerca di correggere gli errori dei precedenti. La combinazione è una somma pesata.
Il bagging addestra gli alberi in parallelo e riduce la varianza; il boosting li addestra in sequenza e riduce il bias, ma è sensibile al rumore.
| Metodo | Idea di base | Combinazione | Caratteristiche |
|---|---|---|---|
| Bagging | alberi su sottoinsiemi casuali dei dati | media / voto | riduce la varianza, parallelizzabile |
| Random forest | bagging + feature casuali | media / voto | ottima base di partenza |
| Boosting | modelli in sequenza che correggono gli errori | somma pesata | riduce il bias, sensibile al rumore |
| AdaBoost | ripesa i campioni mal classificati | somma pesata | semplice, usa stump |
| Gradient boosting | adatta i gradienti della perdita | somma pesata | perdite flessibili; può andare in overfitting senza regolazione |
| XGBoost | gradient boosting regolarizzato, con potatura e ottimizzazioni | somma pesata | veloce, regolarizzato, gestisce i valori mancanti |
| LightGBM | basato su istogrammi, crescita per foglia | somma pesata | molto veloce, poca memoria |
| CatBoost | gestisce nativamente le feature categoriche | somma pesata | evita l'overfitting |
| Stacking | modelli diversi + un meta-modello | meta-modello | molto flessibile, rischio di overfitting senza cross-validation |
Gradient boosting (regressione)
Si ripete: (1) si parte da una predizione costante (la media dei target); (2) si calcolano i residui ; (3) si addestra un albero di regressione che predice i residui, con un vincolo sul numero massimo di foglie (da 8 a 32 in pratica; 4 nell'esempio); (4) si aggiorna , con il tasso di apprendimento piccolo (per esempio ); (5) si ripete finché i residui sono piccoli o si raggiunge il numero massimo di alberi. Nella foglia con più residui si mette la media dei residui.
Formula (gradient boosting). , , . Predizione finale: .
Perché si chiama «gradient». Per la perdita quadratica il gradiente rispetto alla predizione è , quindi il residuo è il gradiente negativo della perdita (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 →): ogni nuovo albero fa un passo di discesa del gradiente nello spazio delle funzioni (LASSO e discesa del gradienteIl LASSO è la regressione regolarizzata con penalità $L_1$: minimizza $\sum_i(y_i-x_i^T\beta)^2+\lambda\sum_{j\ge1}|\beta_j|$. A differenza della ridge, porta alcuni coefficienti esattamente a zero (soluzione sparsa, selezione delle feature): geometricamente le curve di livello dell'errore toccano il vincolo $\sum|\beta_j|\le s$ (un rombo) in uno spigolo. Non ha formula chiusa, quindi si minimizza con la discesa del gradiente $W\leftarrow W-\eta,\nabla J(W)$, usando il subgradiente $\operatorname{sign}(\beta_j)$ per il valore assoluto (nel punto 0 qualunque valore in $[-1,1]$). Il passo $\eta$ è critico: per l'errore quadratico converge se $\eta<1/\mu_{\max}(X^TX)$; si può usare $\eta_t=\eta_0/(1+\gamma t)$. L'Elastic Net combina le penalità $L_1$ e $L_2$ con $\lambda_1=\alpha\lambda$, $\lambda_2=(1-\alpha)\lambda$.LASSO e discesa del gradiente →). Per la classificazione con log-verosimiglianza si adattano gli pseudo-residui (, la probabilità prevista) e la probabilità finale è (Regressione logistica e softmaxLa regressione lineare non è adatta alla classificazione (valori fuori da [0,1], retta tirata dai punti lontani). La regressione logistica passa il predittore lineare dalla sigmoide $\sigma(z)=1/(1+e^{-z})$ e interpreta $\hat y=\sigma(x^T\beta)$ come $P(y=1\mid x)$: si predice la classe 1 se $\hat y\ge0{,}5$, cioè $x^T\beta\ge0$ (bordo lineare). L'errore quadratico dà una funzione non convessa; si usa la log-verosimiglianza negativa $-\sum[y\log\hat y+(1-y)\log(1-\hat y)]$, convessa, con gradiente $X^T(\hat y-y)$ e nessuna formula chiusa (discesa del gradiente). Per più classi: one-vs-one ($C(C-1)/2$ classificatori, voto), one-vs-all ($C$ classificatori, massima probabilità), o la softmax $p_c=e^{z_c}/\sum_ke^{z_k}$ con cross-entropia. Si può regolarizzare (ridge, LASSO, Elastic Net) e la cross-validation si fa stratificata. Approfondimento: non nel programma di Telecomunicazioni.Regressione logistica e softmax →).
Esempio (dalle slide). Pesi osservati (altezza, colore preferito, genere come feature). Predizione iniziale: la media (esattamente ). Residui: . Primo albero con 4 foglie: (media), , , . Con la prima osservazione passa da a e il nuovo residuo è (prima : ha fatto un «piccolo passo» nella direzione giusta). Residui dopo il primo albero: . Secondo albero: foglie , , , ; residui dopo il secondo: . Ad ogni albero i residui si riducono (l'errore quadratico medio sul training passa da a circa e ).
Perché piccoli passi. Con si perde accuratezza sul training (si usa solo una piccola parte di ciascun albero) nella speranza di una migliore generalizzazione (meno overfitting e meno varianza): l'evidenza empirica mostra che «molti piccoli passi nella direzione giusta» danno previsioni migliori sul test. Gli iperparametri tipici: numero di alberi, tasso di apprendimento, profondità o numero di foglie.
Nel laboratorio (wine). GradientBoostingClassifier(n_estimators=100, learning_rate=0.1, max_depth=3): accuracy sul test ; implementazione da zero per la regressione con alberi a criterio MSE e foglie con media.
AdaBoost
AdaBoost (adaptive boosting) è molto simile ma con due differenze: (1) usa solo stump, alberi con una sola decisione (2 foglie); (2) i modelli hanno pesi diversi nella somma finale (nel gradient boosting tutti gli alberi sono scalati dallo stesso fattore). I campioni mal classificati ricevono più peso nello stump successivo. Le formule standard (non nelle slide), per classi e pesi che sommano a : con che normalizza i pesi.
Esempio. 5 campioni con pesi e uno stump che ne sbaglia uno: , . Il campione errato passa a , gli altri a (somma ): dopo la normalizzazione l'errato pesa e ciascuno degli altri . Il prossimo stump è addestrato in modo che l'errore precedente conti metà del totale.
XGBoost
XGBoost è un approccio di stato dell'arte, pieno di trucchi implementativi; qui si vede la parte concettuale. Sfrutta: (1) il boosting (alberi in sequenza); (2) un modo nuovo di costruire gli alberi, sempre basato sui residui; (3) la regolarizzazione.
Punteggio di similarità e guadagno. Si parte da una predizione iniziale (per esempio ) e si calcolano i residui. Un nodo con residui simili (stesso segno e grandezza) è «buono». Per misurarlo:
Formula (similarity score, gain, output). Con parametro di regolarizzazione: Attenzione: nell'output la somma non è al quadrato.
Si provano tutte le soglie e si sceglie quella con gain massimo.
Esempio (dalle slide). Dosaggi mg, efficacia , predizione iniziale : residui , con . Radice: somma , similarità . Soglia «dosaggio »: sinistra : ; destra (somma ): ; gain . Soglia «»: sinistra (somma ): ; destra (somma 0): ; gain . Soglia «»: sinistra (somma ): ; destra : ; gain . Si sceglie «dosaggio ». Il ramo destro si divide ancora con «»: sinistra (somma 14): ; destra : ; gain (profondità massima 2 nell'esempio; in pratica 6).
Potatura con . Una volta costruito l'albero si pota dal basso verso l'alto: si sceglie una soglia (iperparametro di XGBoost) e si toglie un ramo se . Con : il nodo con gain ha , quindi resta; la radice ha gain , ma non si può potare perché il ramo sotto non è stato potato. Con : (si pota) e poi (si pota anche la radice): l'albero scompare. Un valore alto di previene l'overfitting.
Regolarizzazione . Con le similarità sono più piccole, e la riduzione è tanto maggiore quanto meno residui ha il nodo (: radice ; sinistra ; destra ; gain ). Questo rende più facile potare e riduce la sensibilità a singole osservazioni.
Predizione. In inferenza ogni foglia restituisce (non è la similarità): per la foglia con residui ed : ; con è la media: , , . La nuova predizione è , con (eta) il tasso di apprendimento (default in XGBoost): per il dosaggio : (residuo , minore di prima); per i dosaggi : ; per : . Si continua ad aggiungere alberi finché i residui sono molto piccoli o si raggiunge il massimo.
Altre caratteristiche citate: penalità e (regolarizzazione come nella ridgeUna 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 → e nel LASSOIl LASSO è la regressione regolarizzata con penalità $L_1$: minimizza $\sum_i(y_i-x_i^T\beta)^2+\lambda\sum_{j\ge1}|\beta_j|$. A differenza della ridge, porta alcuni coefficienti esattamente a zero (soluzione sparsa, selezione delle feature): geometricamente le curve di livello dell'errore toccano il vincolo $\sum|\beta_j|\le s$ (un rombo) in uno spigolo. Non ha formula chiusa, quindi si minimizza con la discesa del gradiente $W\leftarrow W-\eta,\nabla J(W)$, usando il subgradiente $\operatorname{sign}(\beta_j)$ per il valore assoluto (nel punto 0 qualunque valore in $[-1,1]$). Il passo $\eta$ è critico: per l'errore quadratico converge se $\eta<1/\mu_{\max}(X^TX)$; si può usare $\eta_t=\eta_0/(1+\gamma t)$. L'Elastic Net combina le penalità $L_1$ e $L_2$ con $\lambda_1=\alpha\lambda$, $\lambda_2=(1-\alpha)\lambda$.LASSO e discesa del gradiente →), algoritmo basato su istogrammi per cercare gli split più velocemente, potatura in profondità, passo adattivo, campionamento di colonne e righe. LightGBM è più veloce con crescita per foglia, CatBoost tratta nativamente le variabili categoriche.
Codice
from sklearn.ensemble import RandomForestClassifier, GradientBoostingClassifier
from xgboost import XGBClassifier
rf = RandomForestClassifier(n_estimators=200, max_features="sqrt", random_state=0).fit(X_train, y_train)
gb = GradientBoostingClassifier(n_estimators=100, learning_rate=0.1, max_depth=3, random_state=0).fit(X_train, y_train)
xgb = XGBClassifier(n_estimators=100, learning_rate=0.1, random_state=0).fit(X_train, y_train)
print(rf.feature_importances_) # importanza globale delle feature (Gini)# bagging da zero: campione bootstrap e voto di maggioranza
def bootstrap_sample(X, y):
idx = np.random.choice(len(X), size=len(X), replace=True) # con rimpiazzo
return X[idx], y[idx]Errori tipici
- Pensare che aggiungere alberi a una random forest faccia overfitting: la varianza si stabilizza.
- Dimenticare il feature bagging: senza di esso gli alberi sono molto correlati.
- Usare troppo grande nel boosting: si impara troppo in fretta e si va in overfitting.
- Confondere similarity score (numeratore al quadrato, per scegliere gli split) e output della foglia (numeratore non al quadrato).
- Confrontare bagging e boosting come se riducessero la stessa cosa: il primo riduce la varianza, il secondo il bias.
- Interpretare l'importanza delle feature (basata sulla Gini) come causalità: misura solo quanto servono al modello, ed è distorta per feature con molti valori.
Versione ripasso
Teorema (media di stimatori correlati). stimatori con varianza e correlazione : . Mediare riduce la varianza solo se gli alberi sono poco correlati.
Esempio. , : ; ; .
Bagging. Campione bootstrap: estrazioni con rimpiazzo ( campioni distinti, fuori); voto di maggioranza (media in regressione); riduce la varianza senza aumentare il bias; confidenza = frazione di voti.
Random forest = bagging + a ogni split solo feature (alberi meno correlati). Iperparametro: numero di alberi. Pro: multiclasse, nessuna normalizzazione, accuratezza alta; contro: costo, interpretabilità.
Formula (importanza). , con ; media sugli alberi, poi normalizzazione.
Esempio. Iris profondità 3: larghezza , lunghezza ; normalizzate e .
Boosting. Alberi in sequenza, ciascuno corregge gli errori dei precedenti; somma pesata; riduce il bias, sensibile al rumore.
Formula (gradient boosting). ; residuo (= gradiente negativo di ); con albero (foglie limitate) sui residui; foglia = media dei residui; piccolo ().
Esempio. , media , residui ; dopo un albero con : .
AdaBoost. Stump (2 foglie); pesi diversi per i modelli; ; i campioni sbagliati si ripesano (esempio: , l'errato passa da a dopo la normalizzazione).
Formula (XGBoost). ; ; potatura se (dal basso, non si pota la radice se il ramo resta); (numeratore non al quadrato); nuova predizione , .
Esempio. Residui , : radice ; soglia : ; : ; : . Con : radice , gain .
Tabella. LightGBM (istogrammi, crescita per foglia), CatBoost (categoriche), stacking (meta-modello).
Errori tipici: credere che più alberi in una RF causino overfitting; senza feature bagging gli alberi sono correlati; troppo grande; confondere similarity e output; bagging riduce la varianza, boosting il bias.
Esercizi su questo argomento
- Esercizio - Albero di isolamento passo per passo (laboratorio di ripasso)
- Esercizio - Balanced random forest (laboratorio di ripasso)
- Esercizio - Cross-validation annidata con alberi (laboratorio di ripasso)
- Esercizio - Curva ROC e AUC di una foresta casuale e di un albero
- Esercizio - Gradient boosting per la regressione sul dataset housing
- Esercizio - ID3 con potatura e foresta casuale sul dataset Titanic
- Esercizio - Importanza delle feature di un albero sul dataset wine
- Esercizio - Isolation forest da zero e anomalie sul dataset delle abitazioni