Salta al contenuto
Note per Studenti Alberi di decisione

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 «x3≤1,9x_3\le1{,}9»);
  • 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:

  1. si parte dalla radice con tutti i dati;
  2. si sceglie la variabile (e il valore) che «semplifica» di più il problema, cioè che rende più omogenee le classi nei figli;
  3. 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 SS di campioni con cc classi, di proporzioni p1,…,pcp_1,\dots,p_c, H(S)=−∑i=1cpilog⁡2pi(con 0log⁡20=0).H(S)=-\sum_{i=1}^cp_i\log_2p_i\qquad(\text{con }0\log_20=0). H=0H=0: l'insieme è puro (una sola classe); HH più alta: classi più mescolate, maggiore incertezza. Con due classi il massimo è 11 per p=12p=\tfrac12.

Definizione (guadagno d'informazione). Dividere SS secondo i valori vv dell'attributo AA in sottoinsiemi SvS_v riduce l'entropia di IG(S,A)=H(S)−∑v∈Valori(A)∣Sv∣∣S∣ H(Sv).IG(S,A)=H(S)-\sum_{v\in\text{Valori}(A)}\frac{|S_v|}{|S|}\,H(S_v). IGIG alto: la divisione riduce molto l'incertezza (buona scelta); IGIG 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 n=15n=15 ma le righe sono 14.) Ci sono 99 «Yes» e 55 «No»: H(S)=−914log⁡2914−514log⁡2514=0,643⋅0,637+0,357⋅1,485=0,410+0,530=0,940H(S)=-\tfrac9{14}\log_2\tfrac9{14}-\tfrac5{14}\log_2\tfrac5{14}=0{,}643\cdot0{,}637+0{,}357\cdot1{,}485=0{,}410+0{,}530=0{,}940.

Passo 1: scelta della radice. Per ogni attributo si calcola l'entropia di ciascun sottoinsieme.

  • Outlook: Sunny (5: 2 Yes, 3 No) H=0,971H=0{,}971; Overcast (4: 4 Yes) H=0H=0; Rain (5: 3 Yes, 2 No) H=0,971H=0{,}971. IG=0,940−(5140,971+4140+5140,971)=0,940−0,693=0,247IG=0{,}940-\big(\tfrac5{14}0{,}971+\tfrac4{14}0+\tfrac5{14}0{,}971\big)=0{,}940-0{,}693=\mathbf{0{,}247}.
  • Temperature: Hot (4: 2/2) H=1H=1; Mild (6: 4/2) H=0,918H=0{,}918; Cool (4: 3/1) H=0,811H=0{,}811. IG=0,940−(4141+6140,918+4140,811)=0,940−0,911=0,029IG=0{,}940-(\tfrac4{14}1+\tfrac6{14}0{,}918+\tfrac4{14}0{,}811)=0{,}940-0{,}911=0{,}029.
  • Humidity: High (7: 3 Yes, 4 No) H=0,985H=0{,}985; Normal (7: 6/1) H=0,592H=0{,}592. IG=0,940−(0,5⋅0,985+0,5⋅0,592)=0,940−0,788=0,152IG=0{,}940-(0{,}5\cdot0{,}985+0{,}5\cdot0{,}592)=0{,}940-0{,}788=0{,}152.
  • Wind: Weak (8: 6/2) H=0,811H=0{,}811; Strong (6: 3/3) H=1H=1. IG=0,940−(8140,811+6141)=0,940−0,892=0,048IG=0{,}940-(\tfrac8{14}0{,}811+\tfrac6{14}1)=0{,}940-0{,}892=0{,}048.

Il guadagno massimo è quello di Outlook (0,2470{,}247): è la radice. Il ramo Overcast è già puro (sempre Yes): foglia «Yes».

Passo 2: rami Sunny e Rain.

  • Sunny (5 campioni: 2 Yes, 3 No, H=0,971H=0{,}971): lo split su Humidity dà High →\to 3 No (H=0H=0) e Normal →\to 2 Yes (H=0H=0): IG=0,971IG=0{,}971, il massimo possibile (Temperature darebbe 0,5710{,}571, Wind 0,0200{,}020).
  • Rain (5 campioni: 3 Yes, 2 No): lo split su Wind dà Weak →\to 3 Yes e Strong →\to 2 No: IG=0,971IG=0{,}971.
Outlook?
├── Sunny    -> Humidity?
│               ├── High   -> No
│               └── Normal -> Yes
├── Overcast -> Yes
└── Rain     -> Wind?
                ├── Weak   -> Yes
                └── Strong -> No

L'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). Gini⁡(S)=1−∑i=1cpi2.\displaystyle\operatorname{Gini}(S)=1-\sum_{i=1}^cp_i^2. Vale 00 per un insieme puro, e il massimo 1−1c1-\tfrac1c per classi equiprobabili. Per una divisione in sinistra/destra: Gini⁡split=nsxnGini⁡(sx)+ndxnGini⁡(dx).\operatorname{Gini}_{\text{split}}=\frac{n_{\text{sx}}}{n}\operatorname{Gini}(\text{sx})+\frac{n_{\text{dx}}}{n}\operatorname{Gini}(\text{dx}). Si sceglie la divisione con Gini⁡split\operatorname{Gini}_{\text{split}} minimo (cioè con la massima riduzione di impurità).

Esempio. Sul tennis, Gini⁡(S)=1−(914)2−(514)2=1−0,413−0,128=0,459\operatorname{Gini}(S)=1-(\tfrac9{14})^2-(\tfrac5{14})^2=1-0{,}413-0{,}128=0{,}459. Split su Outlook: Sunny 1−(0,4)2−(0,6)2=0,481-(0{,}4)^2-(0{,}6)^2=0{,}48, Overcast 00, Rain 0,480{,}48, quindi Gini⁡split=5140,48+0+5140,48=0,343\operatorname{Gini}_{\text{split}}=\tfrac5{14}0{,}48+0+\tfrac5{14}0{,}48=0{,}343 (riduzione 0,1160{,}116); Humidity: 0,3670{,}367; Wind: 0,4290{,}429; Temperature: 0,4400{,}440. Anche con Gini la scelta migliore è Outlook.

Le due curve sono molto simili, come quella dell'errore di classificazione 1−max⁡ipi1-\max_ip_i (per due classi, in funzione di pp):

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 0,50{,}5 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 x≤tx\le t e prova molte soglie tt (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. x=[1,2,3,4,5,6]x=[1,2,3,4,5,6] con etichette [A,A,B,A,B,B][A,A,B,A,B,B]. Per le soglie t=1,5; 2,5; 3,5; 4,5; 5,5t=1{,}5;\ 2{,}5;\ 3{,}5;\ 4{,}5;\ 5{,}5 il Gini ponderato vale 0,400; 0,250; 0,444; 0,250; 0,4000{,}400;\ 0{,}250;\ 0{,}444;\ 0{,}250;\ 0{,}400. Per t=2,5t=2{,}5: sinistra {A,A}\{A,A\} (Gini 00), destra {B,A,B,B}\{B,A,B,B\} (Gini 1−(0,25)2−(0,75)2=0,3751-(0{,}25)^2-(0{,}75)^2=0{,}375): 26⋅0+46⋅0,375=0,25\tfrac26\cdot0+\tfrac46\cdot0{,}375=0{,}25. Le soglie 2,52{,}5 e 4,54{,}5 sono alla pari (ex aequo): si sceglie la prima trovata.

Esempio (dataset iris con CART, profondità 3). Radice: petalo ≤0,8\le0{,}8 cm (o, equivalentemente, lunghezza del petalo ≤1,9\le1{,}9) isola le 50 setosa. Poi larghezza ≤1,75\le1{,}75 e lunghezza ≤4,95\le4{,}95 o ≤4,85\le4{,}85. Accuracy sul training 0,9730{,}973 con profondità 3 (0,6670{,}667 con profondità 1, 0,9600{,}960 con 2, 0,9930{,}993 con 4, 1,01{,}0 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 nL,nRn_L,n_R campioni (n=nL+nRn=n_L+n_R): MSEsplit=nLnMSEL+nRnMSER,riduzione di varianza=Var⁡(genitore)−(nLnVar⁡L+nRnVar⁡R),\mathrm{MSE}_{\text{split}}=\frac{n_L}{n}\mathrm{MSE}_L+\frac{n_R}{n}\mathrm{MSE}_R,\qquad\text{riduzione di varianza}=\operatorname{Var}(\text{genitore})-\Big(\frac{n_L}{n}\operatorname{Var}_L+\frac{n_R}{n}\operatorname{Var}_R\Big), con Var⁡(y)=1n∑(yi−yˉ)2\operatorname{Var}(y)=\frac1n\sum(y_i-\bar y)^2 (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. x=[1,2,3,4,5,6]x=[1,2,3,4,5,6], y=[1,2,3,10,11,12]y=[1,2,3,10,11,12]: varianza del genitore 20,9220{,}92. Per t=2,5t=2{,}5: sinistra [1,2][1,2] (varianza 0,250{,}25), destra [3,10,11,12][3,10,11,12] (media 99, varianza 36+1+4+94=12,5\tfrac{36+1+4+9}4=12{,}5): MSE ponderato 26⋅0,25+46⋅12,5=0,083+8,333=8,42\tfrac26\cdot0{,}25+\tfrac46\cdot12{,}5=0{,}083+8{,}333=8{,}42. Ripetendo per tutte le soglie si ottiene 14,87; 8,42; 0,67; 8,42; 14,8714{,}87;\ 8{,}42;\ \mathbf{0{,}67};\ 8{,}42;\ 14{,}87 per t=1,5; 2,5; 3,5; 4,5; 5,5t=1{,}5;\ 2{,}5;\ 3{,}5;\ 4{,}5;\ 5{,}5: la migliore è t=3,5t=3{,}5 (sinistra [1,2,3][1,2,3] con media 22 e varianza 23\tfrac23; destra [10,11,12][10,11,12] con media 1111 e varianza 23\tfrac23), con riduzione di varianza 20,92−0,67=20,2520{,}92-0{,}67=20{,}25. Le predizioni sono 22 per x≤3,5x\le3{,}5 e 1111 per x>3,5x>3{,}5: 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 →\to si predice la classe maggioritaria del genitore; tutti i campioni della stessa classe →\to quella classe; nessuna feature rimasta con classi miste →\to classe maggioritaria (e, opzionale, profondità massima).

Per le feature continue si può: usare la soglia binaria come in CART (scegliere la miglior x≤tx\le t), 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 (0,8250{,}825 di accuracy su test) e la quantizzazione (0,7900{,}790) 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 0,6670{,}667 a 1,01{,}0); su dati nuovi sale e poi scende. Due rimedi:

Pre-potatura (profondità massima). Si ferma la crescita a una profondità dmax⁡d_{\max} 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 0,7300{,}730 (profondità 1) a 0,9460{,}946 (2) e 0,9730{,}973 (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à: Rα(T)=R(T)+α ∣T∣,R_\alpha(T)=R(T)+\alpha\,|T|, con R(T)R(T) l'errore (impurità di Gini o tasso di errata classificazione) dell'albero TT, ∣T∣|T| il numero di foglie e α≥0\alpha\ge0 il parametro di potatura (più alto = più potatura). Per ogni nodo interno tt si calcola il α\alpha al quale conviene sostituire il suo sottoalbero TtT_t con una foglia: αeff(t)=R(t)−R(Tt)∣Tt∣−1,R(t)=ntN Gini⁡(t),R(Tt)=∑foglie di TtR(ℓ).\alpha_{\text{eff}}(t)=\frac{R(t)-R(T_t)}{|T_t|-1},\qquad R(t)=\frac{n_t}{N}\,\operatorname{Gini}(t),\quad R(T_t)=\sum_{\text{foglie di }T_t}R(\ell). Il numeratore è la riduzione di errore che quel sottoalbero apporta, il denominatore il numero di foglie «aggiunte». Si pota per primo il nodo con αeff\alpha_{\text{eff}} minimo (il «filo più debole»: aggiunge poco per foglia), si ricalcolano gli αeff\alpha_{\text{eff}} 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 α\alpha.

Esempio (iris, albero di profondità 3, 150 campioni). I quattro nodi interni sono: (a) il nodo «larghezza >1,75>1{,}75» (46 campioni: 1 versicolor e 45 virginica) con due foglie [0,1,2][0,1,2] e [0,0,43][0,0,43]: R(t)=46150 Gini⁡=0,0130R(t)=\tfrac{46}{150}\,\operatorname{Gini}=0{,}0130, R(Tt)=0,0089R(T_t)=0{,}0089, 2 foglie ⇒αeff=(0,0130−0,0089)/(2−1)=0,0042\Rightarrow\alpha_{\text{eff}}=(0{,}0130-0{,}0089)/(2-1)=0{,}0042; (b) il nodo «larghezza ≤1,75\le1{,}75» (54 campioni) con le foglie [0,47,1][0,47,1] e [0,2,4][0,2,4]: 0,02970{,}0297; (c) il nodo «larghezza >0,8>0{,}8» (100 campioni, 4 foglie): 0,09790{,}0979; (d) la radice (5 foglie): 0,15670{,}1567. Si pota per primo il nodo (a), con αeff\alpha_{\text{eff}} minimo (0,00420{,}0042), poi si ricalcolano gli altri. (Nel notebook di laboratorio i valori 0,00420{,}0042, 0,02970{,}0297, 0,09790{,}0979 sono gli stessi; per la radice compare 0,10450{,}1045 perché il loro albero divide anche il nodo puro delle setosa e ha 7 foglie: (0,6667−0,0397)/(7−1)=0,1045(0{,}6667-0{,}0397)/(7-1)=0{,}1045.)

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

python
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 potatura

L'implementazione da zero nei laboratori usa classi con impurity() e split_impurity() e un nodo con (feature, soglia, predizione); nodi indicizzati come 2i+12i+1 e 2i+22i+2. 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). H(S)=−∑ipilog⁡2piH(S)=-\sum_ip_i\log_2p_i (00 = puro); IG(S,A)=H(S)−∑v∣Sv∣∣S∣H(Sv)IG(S,A)=H(S)-\sum_v\frac{|S_v|}{|S|}H(S_v) (si massimizza).

Esempio (tennis, 9 Yes / 5 No). H=0,940H=0{,}940; IGIG: Outlook 0,2470{,}247, Humidity 0,1520{,}152, Wind 0,0480{,}048, Temperature 0,0290{,}029 ⇒\Rightarrow radice Outlook; Overcast puro (Yes), Sunny →\to Humidity, Rain →\to Wind.

Formula (Gini). Gini⁡(S)=1−∑ipi2\operatorname{Gini}(S)=1-\sum_ip_i^2; Gini⁡split=nsxnGini⁡(sx)+ndxnGini⁡(dx)\operatorname{Gini}_{\text{split}}=\frac{n_{sx}}{n}\operatorname{Gini}(sx)+\frac{n_{dx}}{n}\operatorname{Gini}(dx) (si minimizza).

Esempio. Tennis: Gini⁡(S)=0,459\operatorname{Gini}(S)=0{,}459; split su Outlook 0,3430{,}343.

CART. Alberi binari; variabili numeriche con soglie x≤tx\le t (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). MSEsplit=nLnMSEL+nRnMSER\mathrm{MSE}_{\text{split}}=\frac{n_L}{n}\mathrm{MSE}_L+\frac{n_R}{n}\mathrm{MSE}_R; riduzione di varianza =Var⁡(gen.)−(nLnVar⁡L+nRnVar⁡R)=\operatorname{Var}(\text{gen.})-\big(\frac{n_L}{n}\operatorname{Var}_L+\frac{n_R}{n}\operatorname{Var}_R\big); foglia = media.

Esempio. x=[1..6]x=[1..6], y=[1,2,3,10,11,12]y=[1,2,3,10,11,12]: migliore t=3,5t=3{,}5, MSE 0,670{,}67, riduzione 20,2520{,}25, previsioni 22 e 1111.

Overfitting. Albero completo: varianza alta. Pre-potatura (profondità massima): semplice, può perdere split utili. Post-potatura a costo-complessità: Rα(T)=R(T)+α∣T∣R_\alpha(T)=R(T)+\alpha|T|; αeff(t)=R(t)−R(Tt)∣Tt∣−1\alpha_{\text{eff}}(t)=\frac{R(t)-R(T_t)}{|T_t|-1} con R(t)=ntNGini⁡(t)R(t)=\frac{n_t}{N}\operatorname{Gini}(t); si pota il nodo con αeff\alpha_{\text{eff}} minimo, si ricalcola, si sceglie con la validazione.

Pro: interpretabile, nessuna normalizzazione, predizione immediata. Contro: alta varianza ⇒\Rightarrow 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

Lezioni in cui compare

Teoria collegata