Alberi di decisione
In questa pagina 9
Gli alberi sono tra i metodi più efficaci per l'apprendimento supervisionato su dati tabellari di dimensione medio-piccola (meno di circa 10 000 campioni), e le idee alla base sono semplici (Lezione 16 · Alberi di decisione e random forest). Qui si costruisce l'albero singolo; la combinazione di molti alberi (foreste, boosting) è in Metodi ensemble - bagging, random forest e boostingUn albero da solo ha varianza alta; un ensemble combina molti modelli deboli. Bagging: ogni albero è addestrato su un campione bootstrap (n estrazioni con rimpiazzo, circa il 63% di campioni distinti) e si vota o si fa la media: riduce la varianza, perché la media di $T$ stimatori con varianza $\sigma^2$ e correlazione $\rho$ ha varianza $\rho\sigma^2+(1-\rho)\sigma^2/T$. Random forest = bagging + a ogni split solo $\sqrt p$ feature casuali (alberi meno correlati); l'importanza di una feature è la somma delle riduzioni di Gini pesate sui nodi in cui è usata. Boosting: alberi in sequenza, ciascuno corregge gli errori dei precedenti, e si riduce il bias. Gradient boosting: $F\leftarrow F+\eta h$ con $h$ albero sui residui (gradiente negativo della perdita), $\eta$ piccolo; AdaBoost: stump e pesi sui campioni sbagliati; XGBoost: similarity score $\frac{(\sum r)^2}{N+\lambda}$, gain, potatura con $\gamma$, output $\frac{\sum r}{N+\lambda}$. Programma di Telecomunicazioni: Random Forests; boosting come approfondimento.Metodi ensemble - bagging, random forest e boosting →. Gli esercizi sono Esercizio - Albero di decisione ID3 sul dataset del tennis, Esercizio - Albero di decisione con criteri di impurità e potatura sul dataset iris e Esercizio - ID3 con potatura e foresta casuale sul dataset Titanic (Lezione 18 · Laboratorio sui metodi ad albero).
L'idea: decisioni a una variabile alla volta
Un esempio di decisione medica: «età > 50? peso > 90 kg? fumatore?» da cui si stima il rischio di infarto. Il diagramma è probabilmente stato costruito da dati storici: è un problema supervisionato multivariato di classificazione, ma ogni decisione guarda una sola variabile per volta.
Definizione (albero di decisione). Struttura ad albero in cui
- ogni nodo interno rappresenta una regola basata su una feature (per esempio «umidità = alta» oppure «»);
- ogni ramo è l'esito della regola;
- ogni foglia è una predizione: tipicamente la classe più frequente tra i campioni che arrivano in quella foglia (in regressione, la media dei loro valori).
Per classificare un nuovo punto si parte dalla radice e si segue il ramo indicato dal valore delle sue feature, fino a una foglia.
L'obiettivo dell'addestramento è trovare le decisioni (coppie variabile-valore, o variabile-soglia) che dividono i dati in scenari in cui una classe diventa dominante o più facile da prevedere. Si procede in modo ricorsivo:
- si parte dalla radice con tutti i dati;
- si sceglie la variabile (e il valore) che «semplifica» di più il problema, cioè che rende più omogenee le classi nei figli;
- si divide e si ripete su ciascun figlio, finché le classi sono separate o si raggiunge una profondità massima.
Serve una misura quantitativa di quanto sia «semplice» un nodo: le misure di impurità.
Entropia e guadagno d'informazione
Definizione (entropia). (Logaritmo in base 2: 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 un insieme di campioni con classi, di proporzioni , : l'insieme è puro (una sola classe); più alta: classi più mescolate, maggiore incertezza. Con due classi il massimo è per .
Definizione (guadagno d'informazione). Dividere secondo i valori dell'attributo in sottoinsiemi riduce l'entropia di alto: la divisione riduce molto l'incertezza (buona scelta); basso: l'attributo non aiuta a separare le classi.
Il secondo termine è la media delle entropie dei figli pesata dalla frazione di campioni di ciascun figlio.
Esempio (dataset del tennis, Mitchell 1997). Dati di 14 giorni per prevedere se l'amico gioca a tennis:
| # | Outlook | Temp. | Humidity | Wind | Play |
|---|---|---|---|---|---|
| 1 | Sunny | Hot | High | Weak | No |
| 2 | Sunny | Hot | High | Strong | No |
| 3 | Overcast | Hot | High | Weak | Yes |
| 4 | Rain | Mild | High | Weak | Yes |
| 5 | Rain | Cool | Normal | Weak | Yes |
| 6 | Rain | Cool | Normal | Strong | No |
| 7 | Overcast | Cool | Normal | Strong | Yes |
| 8 | Sunny | Mild | High | Weak | No |
| 9 | Sunny | Cool | Normal | Weak | Yes |
| 10 | Rain | Mild | Normal | Weak | Yes |
| 11 | Sunny | Mild | Normal | Strong | Yes |
| 12 | Overcast | Mild | High | Strong | Yes |
| 13 | Overcast | Hot | Normal | Weak | Yes |
| 14 | Rain | Mild | High | Strong | No |
(Le slide indicano ma le righe sono 14.) Ci sono «Yes» e «No»: .
Passo 1: scelta della radice. Per ogni attributo si calcola l'entropia di ciascun sottoinsieme.
- Outlook: Sunny (5: 2 Yes, 3 No) ; Overcast (4: 4 Yes) ; Rain (5: 3 Yes, 2 No) . .
- Temperature: Hot (4: 2/2) ; Mild (6: 4/2) ; Cool (4: 3/1) . .
- Humidity: High (7: 3 Yes, 4 No) ; Normal (7: 6/1) . .
- Wind: Weak (8: 6/2) ; Strong (6: 3/3) . .
Il guadagno massimo è quello di Outlook (): è la radice. Il ramo Overcast è già puro (sempre Yes): foglia «Yes».
Passo 2: rami Sunny e Rain.
- Sunny (5 campioni: 2 Yes, 3 No, ): lo split su Humidity dà High 3 No () e Normal 2 Yes (): , il massimo possibile (Temperature darebbe , Wind ).
- Rain (5 campioni: 3 Yes, 2 No): lo split su Wind dà Weak 3 Yes e Strong 2 No: .
Outlook?
├── Sunny -> Humidity?
│ ├── High -> No
│ └── Normal -> Yes
├── Overcast -> Yes
└── Rain -> Wind?
├── Weak -> Yes
└── Strong -> NoL'albero classifica correttamente tutti i 14 campioni di training. Le regole sono immediatamente leggibili («se è soleggiato e l'umidità è normale, gioca»).
L'indice di Gini e l'algoritmo CART
Definizione (indice di Gini o impurità di Gini). Vale per un insieme puro, e il massimo per classi equiprobabili. Per una divisione in sinistra/destra: Si sceglie la divisione con minimo (cioè con la massima riduzione di impurità).
Esempio. Sul tennis, . Split su Outlook: Sunny , Overcast , Rain , quindi (riduzione ); Humidity: ; Wind: ; Temperature: . Anche con Gini la scelta migliore è Outlook.
Le due curve sono molto simili, come quella dell'errore di classificazione (per due classi, in funzione di ):
Grafico interattivo: Misure di impurità per due classi in funzione della proporzione p di una classe: entropia (normalizzata a 1 in p = 0,5), indice di Gini 2p(1 − p) e errore di classificazione min(p, 1 − p). Tutte valgono 0 per un nodo puro e sono massime per p = 0,5
(Il Gini ha massimo per due classi.)
CART (Classification And Regression Trees) costruisce alberi binari con un algoritmo ricorsivo:
CART(dati):
se tutti gli esempi hanno la stessa classe -> foglia con quella classe
miglior_divisione = attributo e valore con il Gini_split minimo
se nessuna divisione migliora il Gini -> foglia con la classe maggioritaria
sx, dx = dividi i dati con la miglior_divisione
nodo con: la condizione, CART(sx), CART(dx)Variabili numeriche
Per una feature numerica (per esempio la lunghezza del petalo) CART considera divisioni binarie e prova molte soglie (di solito i punti medi tra valori consecutivi dei dati ordinati), scegliendo quella che minimizza l'impurità. Per le variabili categoriche si divide in «uguale a un valore» / «diverso».
Esempio. con etichette . Per le soglie il Gini ponderato vale . Per : sinistra (Gini ), destra (Gini ): . Le soglie e sono alla pari (ex aequo): si sceglie la prima trovata.
Esempio (dataset iris con CART, profondità 3). Radice: petalo cm (o, equivalentemente, lunghezza del petalo ) isola le 50 setosa. Poi larghezza e lunghezza o . Accuracy sul training con profondità 3 ( con profondità 1, con 2, con 4, con 5).
Grafico interattivo: Iris: l'albero di profondità 3 divide il piano (lunghezza petalo, larghezza petalo) con rette parallele agli assi: larghezza ≤ 0,8 setosa; poi larghezza ≤ 1,75 con lunghezza ≤ 4,95 versicolor, oltre virginica; larghezza > 1,75: virginica
Alberi di regressione
Con un target continuo cambiano il criterio di divisione e l'uscita delle foglie.
Formula (criteri per la regressione). Per una divisione in sinistra/destra con campioni (): con (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 →). Poiché in ogni nodo la previsione è la media (e quindi l'MSE del nodo è la sua varianza), massimizzare la riduzione di varianza equivale a minimizzare l'MSE. Ogni foglia restituisce la media del target dei suoi campioni.
Esempio. , : varianza del genitore . Per : sinistra (varianza ), destra (media , varianza ): MSE ponderato . Ripetendo per tutte le soglie si ottiene per : la migliore è (sinistra con media e varianza ; destra con media e varianza ), con riduzione di varianza . Le predizioni sono per e per : una funzione costante a tratti.
ID3 e altre varianti
ID3 (Iterative Dichotomiser 3) è l'algoritmo originale per feature categoriche, alternativo a CART:
- a ogni nodo si calcola l'entropia di split (o il guadagno) per ogni feature non ancora usata nel ramo e si sceglie la migliore;
- si divide in tutti i valori della feature, creando tanti figli quanti sono i valori (anche più di due, o uno solo);
- una feature usata non è riutilizzata nei discendenti;
- si fermano la crescita (foglia): nessun campione nel nodo si predice la classe maggioritaria del genitore; tutti i campioni della stessa classe quella classe; nessuna feature rimasta con classi miste classe maggioritaria (e, opzionale, profondità massima).
Per le feature continue si può: usare la soglia binaria come in CART (scegliere la miglior ), oppure quantizzare le variabili in intervalli e trattarle come categoriche (pre-elaborazione), oppure fare uno split multiplo con i punti medi tra valori consecutivi. Nelle prove di laboratorio sul Titanic la soglia ( di accuracy su test) e la quantizzazione () sono confrontabili.
| Algoritmo | Idea |
|---|---|
| ID3, C4.5, C5.0 | versioni precedenti/estese di CART; C4.5 (e la versione commerciale C5.0) usa il rapporto di guadagno (gain ratio) invece di Gini o entropia, per non favorire attributi con molti valori; C5.0 è più veloce ed efficiente in memoria |
| CHAID | basato sul test chi-quadro; gestisce bene i dati categorici e può dividere in più rami; popolare in scienze sociali e marketing |
| QUEST | progettato per ridurre il bias nella scelta della variabile; tratta categoriche e continue |
Overfitting e potatura
Un albero lasciato crescere fino a foglie pure separa perfettamente il training ma si adatta al rumore: varianza alta (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 →), scarsa generalizzazione (lo stesso fenomeno di 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 →). Al crescere della profondità l'accuracy sul training sale sempre (nell'iris da a ); su dati nuovi sale e poi scende. Due rimedi:
Pre-potatura (profondità massima). Si ferma la crescita a una profondità anche se altre divisioni migliorerebbero l'adattamento (early stopping). Pro: veloce e facile da controllare; evita l'overfitting con pochi dati. Contro: può perdere divisioni utili subito oltre il limite e non guarda quanto siano significative. Nel laboratorio sul dataset wine l'accuracy su test passa da (profondità 1) a (2) e (3).
Post-potatura a costo-complessità (minimal cost-complexity pruning, di CART). Si lascia crescere l'albero completo e poi si tolgono i rami che non migliorano la generalizzazione. Si cercano i sottoalberi che bilanciano l'errore e la semplicità: con l'errore (impurità di Gini o tasso di errata classificazione) dell'albero , il numero di foglie e il parametro di potatura (più alto = più potatura). Per ogni nodo interno si calcola il al quale conviene sostituire il suo sottoalbero con una foglia: Il numeratore è la riduzione di errore che quel sottoalbero apporta, il denominatore il numero di foglie «aggiunte». Si pota per primo il nodo con minimo (il «filo più debole»: aggiunge poco per foglia), si ricalcolano gli e si ripete; ciò dà una successione di alberi sempre più piccoli, tra cui si sceglie con una validazione. Pro: flessibile, di solito generalizza meglio del limite rigido; contro: più lenta (valuta sottoalberi) e richiede un'accurata scelta di .
Esempio (iris, albero di profondità 3, 150 campioni). I quattro nodi interni sono: (a) il nodo «larghezza » (46 campioni: 1 versicolor e 45 virginica) con due foglie e : , , 2 foglie ; (b) il nodo «larghezza » (54 campioni) con le foglie e : ; (c) il nodo «larghezza » (100 campioni, 4 foglie): ; (d) la radice (5 foglie): . Si pota per primo il nodo (a), con minimo (), poi si ricalcolano gli altri. (Nel notebook di laboratorio i valori , , sono gli stessi; per la radice compare perché il loro albero divide anche il nodo puro delle setosa e ha 7 foglie: .)
Vantaggi e svantaggi
- Pro: facilmente interpretabili (regole leggibili); non richiedono normalizzazione dei dati (le soglie su una variabile non dipendono dalla scala); classificazione quasi immediata; la parte costosa (l'addestramento) si fa una volta, offline; trattano classi multiple e variabili miste.
- Contro: sono classificatori ad alta varianza: piccole modifiche nei dati cambiano molto l'albero, quindi sono soggetti a overfitting e spesso generalizzano male.
La soluzione è considerare molti alberi diversi e combinarli: una foresta (Metodi ensemble - bagging, random forest e boostingUn albero da solo ha varianza alta; un ensemble combina molti modelli deboli. Bagging: ogni albero è addestrato su un campione bootstrap (n estrazioni con rimpiazzo, circa il 63% di campioni distinti) e si vota o si fa la media: riduce la varianza, perché la media di $T$ stimatori con varianza $\sigma^2$ e correlazione $\rho$ ha varianza $\rho\sigma^2+(1-\rho)\sigma^2/T$. Random forest = bagging + a ogni split solo $\sqrt p$ feature casuali (alberi meno correlati); l'importanza di una feature è la somma delle riduzioni di Gini pesate sui nodi in cui è usata. Boosting: alberi in sequenza, ciascuno corregge gli errori dei precedenti, e si riduce il bias. Gradient boosting: $F\leftarrow F+\eta h$ con $h$ albero sui residui (gradiente negativo della perdita), $\eta$ piccolo; AdaBoost: stump e pesi sui campioni sbagliati; XGBoost: similarity score $\frac{(\sum r)^2}{N+\lambda}$, gain, potatura con $\gamma$, output $\frac{\sum r}{N+\lambda}$. Programma di Telecomunicazioni: Random Forests; boosting come approfondimento.Metodi ensemble - bagging, random forest e boosting →). L'importanza delle feature, calcolata dalla riduzione di impurità, è trattata anch'essa lì.
Codice
from sklearn.tree import DecisionTreeClassifier, export_text
tree = DecisionTreeClassifier(criterion="gini", max_depth=3, ccp_alpha=0.0, random_state=0)
tree.fit(X_train, y_train)
print(export_text(tree, feature_names=names)) # regole dell'albero
alphas = tree.cost_complexity_pruning_path(X_train, y_train).ccp_alphas # alpha di potaturaL'implementazione da zero nei laboratori usa classi con impurity() e split_impurity() e un nodo con (feature, soglia, predizione); nodi indicizzati come e . Nota: nel codice del laboratorio il criterio «minimizza» (Gini, entropia) o «massimizza» (guadagno d'informazione).
Errori tipici
- Dimenticare che il guadagno d'informazione si massimizza mentre Gini e entropia dei figli si minimizzano.
- Calcolare la media delle entropie dei figli senza pesare per la dimensione dei sottoinsiemi.
- Scegliere la profondità guardando l'accuracy sul training (sale sempre).
- Pensare che serva standardizzare le feature: per gli alberi non serve.
- Usare un albero molto profondo sperando in una buona generalizzazione: varianza alta.
Versione ripasso
Definizione. Albero: nodi interni = regole su una variabile, rami = esiti, foglie = predizione (classe più frequente; in regressione media). Costruzione ricorsiva scegliendo a ogni nodo la divisione più «pura», fino a classi separate o profondità massima.
Formula (entropia e guadagno). ( = puro); (si massimizza).
Esempio (tennis, 9 Yes / 5 No). ; : Outlook , Humidity , Wind , Temperature radice Outlook; Overcast puro (Yes), Sunny Humidity, Rain Wind.
Formula (Gini). ; (si minimizza).
Esempio. Tennis: ; split su Outlook .
CART. Alberi binari; variabili numeriche con soglie (punti medi), si sceglie la soglia di impurità minima; foglia se puro o nessun miglioramento. ID3: categoriche, split su tutti i valori, feature usata una volta sola (varianti per continue: soglia, quantizzazione, midpoints). C4.5/C5.0: gain ratio; CHAID: chi-quadro; QUEST: meno bias.
Formula (regressione). ; riduzione di varianza ; foglia = media.
Esempio. , : migliore , MSE , riduzione , previsioni e .
Overfitting. Albero completo: varianza alta. Pre-potatura (profondità massima): semplice, può perdere split utili. Post-potatura a costo-complessità: ; con ; si pota il nodo con minimo, si ricalcola, si sceglie con la validazione.
Pro: interpretabile, nessuna normalizzazione, predizione immediata. Contro: alta varianza foreste.
Errori tipici: media non pesata delle entropie; scegliere la profondità sul training; standardizzare inutilmente; confondere max (guadagno) e min (Gini, entropia).
Esercizi su questo argomento
- Esercizio - Albero di decisione con criteri di impurità e potatura sul dataset iris
- Esercizio - Albero di decisione ID3 sul dataset del tennis
- 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