Salta al contenuto
Note per Studenti Esercizio - Importanza delle feature di un albero sul dataset wine

Esercizio - Importanza delle feature di un albero sul dataset wine

Questa pagina non ha ancora la versione ripasso: qui sotto c'è il testo completo.

In questa pagina 5

Testo (laboratorio LAB5). Dataset wine: 178 vini, 13 misure chimiche, 3 classi (cultivar). Con una divisione stratificata 80%/20%80\%/20\% (training 141141: 47+56+3847+56+38; test 3737) addestrare un albero di decisione (Gini, profondità massima 4) e:

  1. calcolare l'importanza delle feature con la riduzione di impurità ponderata e normalizzata;
  2. spiegare come si estende a una foresta e che informazione dà;
  3. valutare l'accuracy per profondità 1, 2, 3.

Teoria usata: Alberi 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 → (Gini, profondità); 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 → (importanza delle feature, foreste); come uso interpretativo vedi 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) →.

Formula

Per ogni nodo interno pp che divide in sinistra e destra: ΔGini⁡p=Gini⁡(p)−(nLnpGini⁡(L)+nRnpGini⁡(R)),wp=npNΔGini⁡p.\Delta\operatorname{Gini}_p=\operatorname{Gini}(p)-\Big(\frac{n_L}{n_p}\operatorname{Gini}(L)+\frac{n_R}{n_p}\operatorname{Gini}(R)\Big),\qquad w_p=\frac{n_p}{N}\Delta\operatorname{Gini}_p. L'importanza grezza di una feature è ∑wp\sum w_p sui nodi che la usano; poi si divide per la somma di tutte le importanze (normalizzazione a 11).

1. Calcolo

L'albero di profondità 4 ha come primi nodi:

nodo feature e soglia campioni npn_p Gini del nodo Gini ponderato dei figli contributo wp=np141ΔGini⁡w_p=\frac{n_p}{141}\Delta\operatorname{Gini}
radice proline ≤750\le750 141141 0,65850{,}6585 0,41910{,}4191 141141(0,6585−0,4191)=0,2394\frac{141}{141}(0{,}6585-0{,}4191)=0{,}2394
figlio color_intensity ≤4,8\le4{,}8 8787 0,49830{,}4983 0,16950{,}1695 87141⋅0,3288=0,2029\frac{87}{141}\cdot0{,}3288=0{,}2029
nipote flavanoids ≤2,14\le2{,}14 5454 0,29150{,}2915 0,12380{,}1238 54141⋅0,1677=0,0642\frac{54}{141}\cdot0{,}1677=0{,}0642
altri flavanoids, magnesium, malic_acid, alcohol restanti

Sommando i contributi di tutti i nodi per ciascuna feature (per flavanoids ci sono tre nodi: 0,0642+0,0281+0,0280=0,12030{,}0642+0{,}0281+0{,}0280=0{,}1203; per malic_acid due: 0,0203+0,0106=0,03090{,}0203+0{,}0106=0{,}0309) si ottengono le importanze grezze: proline 0,23940{,}2394; color_intensity 0,20290{,}2029; flavanoids 0,12030{,}1203; malic_acid 0,03090{,}0309; magnesium 0,02720{,}0272; alcohol 0,01890{,}0189; le altre sette feature valgono 00. La somma è 0,63960{,}6396. Normalizzate (ogni valore diviso per 0,63960{,}6396):

feature importanza
proline 0,3740{,}374
color_intensity 0,3170{,}317
flavanoids 0,1880{,}188
malic_acid 0,0480{,}048
magnesium 0,0420{,}042
alcohol 0,0300{,}030
tutte le altre 00

(Gli stessi valori della tabella del notebook.) Tre feature (proline, intensità del colore e flavonoidi) spiegano l'88%88\% della riduzione di impurità; sette feature non sono mai usate dall'albero.

2. Foreste e significato

In una foresta casuale si calcola l'importanza di ogni albero e se ne fa la media, poi si normalizza a somma 11; con le foreste i valori sono più stabili perché non dipendono da un singolo albero (che può cambiare molto con piccoli cambiamenti dei dati). È un approccio globale di spiegabilità: dice quali variabili contano per l'intero modello, non perché una singola previsione sia stata presa (quella è un'analisi locale). Usi: scartare feature quasi inutili (efficienza), capire il fenomeno, indirizzare la raccolta dati. Cautela: misura quanto una feature serve al modello, non è una relazione causale, e favorisce le feature con molti valori distinti; due feature correlate si dividono l'importanza.

3. Profondità

Accuracy sul test: profondità 1: 0,7300{,}730; 2: 0,9460{,}946; 3: 0,9730{,}973; 4: 0,9730{,}973 (36 casi su 37 giusti). Con un solo split (proline) si separano male tre classi; con tre livelli l'accuracy è già al 97%97\%.

Codice

python
importances = np.zeros(13); N = tree.nodes[0].n_samples
for node in tree.nodes.values():
    if node.feature is not None:                                       # nodo interno
        importances[node.feature] += node.n_samples / N * (node.impurity - node.split_impurity)
importances /= importances.sum()
# con scikit-learn: DecisionTreeClassifier(max_depth=4).fit(X, y).feature_importances_
# foresta: RandomForestClassifier(...).fit(X, y).feature_importances_

Lezioni in cui compare

Teoria collegata