Esercizio - Albero di decisione ID3 sul dataset del tennis
Questa pagina non ha ancora la versione ripasso: qui sotto c'è il testo completo.
In questa pagina 4
Testo (slide della lezione sugli alberi). Dai 14 giorni della tabella (Outlook, Temperature, Humidity, Wind Play Tennis; Yes e No):
| # | 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 |
- Costruire l'albero ID3 con il guadagno d'informazione.
- Classificare i giorni (Sunny, Cool, High, Strong), (Rain, Hot, Normal, Weak), (Overcast, Cool, High, Strong).
- Ripetere la scelta della radice con l'indice di Gini.
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 → (entropia, guadagno d'informazione, Gini, ID3); logaritmi 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 →.
1. Albero con il guadagno d'informazione
Entropia della radice. , : .
Guadagno per ciascun attributo (media delle entropie dei figli pesata per le dimensioni):
| attributo | valore: (Yes, No), | media pesata | |
|---|---|---|---|
| Outlook | Sunny: (2,3) ; Overcast: (4,0) ; Rain: (3,2) | ||
| Temperature | Hot: (2,2) ; Mild: (4,2) ; Cool: (3,1) | ||
| Humidity | High: (3,4) ; Normal: (6,1) | ||
| Wind | Weak: (6,2) ; Strong: (3,3) |
(Verifica di un'entropia: : .)
La radice è Outlook. Il ramo Overcast ha solo «Yes»: foglia Yes.
Ramo Sunny (giorni 1, 2, 8, 9, 11: 2 Yes, 3 No, ). Per Humidity: High giorni 1, 2, 8: tutti No (); Normal giorni 9, 11: tutti Yes (): . Temperature darebbe (Hot: 0 Yes 2 No, ; Mild: 1 Yes 1 No, ; Cool: 1 Yes 0 No: media , ); Wind . Si sceglie Humidity.
Ramo Rain (giorni 4, 5, 6, 10, 14: 3 Yes, 2 No). Per Wind: Weak giorni 4, 5, 10: tutti Yes; Strong giorni 6, 14: tutti No: (massimo). Si sceglie Wind.
Outlook?
├── Sunny -> Humidity? ( High -> No | Normal -> Yes )
├── Overcast -> Yes
└── Rain -> Wind? ( Weak -> Yes | Strong -> No )Tutte le foglie sono pure: il training è classificato correttamente (accuracy ). Si ottiene lo stesso albero con l'implementazione ID3 del laboratorio.
2. Classificazione di nuovi giorni
- (Sunny, Cool, High, Strong): Outlook = Sunny Humidity = High No.
- (Rain, Hot, Normal, Weak): Outlook = Rain Wind = Weak Yes (la temperatura non viene mai usata).
- (Overcast, Cool, High, Strong): Outlook = Overcast Yes.
Le regole sono immediatamente leggibili e usano solo tre attributi su quattro: Temperature non compare, perché una volta fissati Outlook e Humidity/Wind non aggiunge informazione.
3. Con l'indice di Gini
. Gini ponderato dei figli:
- Outlook: Sunny , Overcast , Rain : (riduzione );
- Humidity: High , Normal : ;
- Wind: Weak , Strong : ;
- Temperature: Hot , Mild , Cool : .
Il valore minimo è (Outlook): stessa radice dell'entropia. Con dati reali le due misure scelgono quasi sempre lo stesso attributo.
Verifica
import numpy as np
from collections import Counter
def H(ys):
p = np.array(list(Counter(ys).values())) / len(ys); return -(p * np.log2(p)).sum()
# y = lista di 'Yes'/'No' per i 14 giorni; per ogni attributo A:
# IG = H(y) - sum(len(y_v)/len(y) * H(y_v) for y_v in sottoinsiemi per valore di A)
# risultati: Outlook 0.247, Humidity 0.152, Wind 0.048, Temperature 0.029