Salta al contenuto
Note per Studenti Esercizio - Albero di decisione ID3 sul dataset del tennis

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 →\to Play Tennis; 99 Yes e 55 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
  1. Costruire l'albero ID3 con il guadagno d'informazione.
  2. Classificare i giorni (Sunny, Cool, High, Strong), (Rain, Hot, Normal, Weak), (Overcast, Cool, High, Strong).
  3. 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. pYes=914=0,643p_{\text{Yes}}=\frac9{14}=0{,}643, pNo=514=0,357p_{\text{No}}=\frac5{14}=0{,}357: H=−0,643log⁡20,643−0,357log⁡20,357=0,643⋅0,637+0,357⋅1,485=0,410+0,530=0,940H=-0{,}643\log_20{,}643-0{,}357\log_20{,}357=0{,}643\cdot0{,}637+0{,}357\cdot1{,}485=0{,}410+0{,}530=0{,}940.

Guadagno per ciascun attributo (media delle entropie dei figli pesata per le dimensioni):

attributo valore: (Yes, No), HH media pesata IGIG
Outlook Sunny: (2,3) 0,9710{,}971; Overcast: (4,0) 00; Rain: (3,2) 0,9710{,}971 5140,971+4140+5140,971=0,693\frac5{14}0{,}971+\frac4{14}0+\frac5{14}0{,}971=0{,}693 0,247\mathbf{0{,}247}
Temperature Hot: (2,2) 11; Mild: (4,2) 0,9180{,}918; Cool: (3,1) 0,8110{,}811 4141+6140,918+4140,811=0,911\frac4{14}1+\frac6{14}0{,}918+\frac4{14}0{,}811=0{,}911 0,0290{,}029
Humidity High: (3,4) 0,9850{,}985; Normal: (6,1) 0,5920{,}592 7140,985+7140,592=0,788\frac7{14}0{,}985+\frac7{14}0{,}592=0{,}788 0,1520{,}152
Wind Weak: (6,2) 0,8110{,}811; Strong: (3,3) 11 8140,811+6141=0,892\frac8{14}0{,}811+\frac6{14}1=0{,}892 0,0480{,}048

(Verifica di un'entropia: (2,3)(2,3): −25log⁡225−35log⁡235=0,4⋅1,322+0,6⋅0,737=0,529+0,442=0,971-\frac25\log_2\frac25-\frac35\log_2\frac35=0{,}4\cdot1{,}322+0{,}6\cdot0{,}737=0{,}529+0{,}442=0{,}971.)

La radice è Outlook. Il ramo Overcast ha solo «Yes»: foglia Yes.

Ramo Sunny (giorni 1, 2, 8, 9, 11: 2 Yes, 3 No, H=0,971H=0{,}971). Per Humidity: High →\to giorni 1, 2, 8: tutti No (H=0H=0); Normal →\to giorni 9, 11: tutti Yes (H=0H=0): IG=0,971−0=0,971IG=0{,}971-0=0{,}971. Temperature darebbe 0,5710{,}571 (Hot: 0 Yes 2 No, H=0H=0; Mild: 1 Yes 1 No, H=1H=1; Cool: 1 Yes 0 No: media 25⋅0+25⋅1+15⋅0=0,4\frac25\cdot0+\frac25\cdot1+\frac15\cdot0=0{,}4, IG=0,971−0,4=0,571IG=0{,}971-0{,}4=0{,}571); Wind 0,0200{,}020. Si sceglie Humidity.

Ramo Rain (giorni 4, 5, 6, 10, 14: 3 Yes, 2 No). Per Wind: Weak →\to giorni 4, 5, 10: tutti Yes; Strong →\to giorni 6, 14: tutti No: IG=0,971IG=0{,}971 (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 14/14=114/14=1). Si ottiene lo stesso albero con l'implementazione ID3 del laboratorio.

2. Classificazione di nuovi giorni

  • (Sunny, Cool, High, Strong): Outlook = Sunny →\to Humidity = High →\to No.
  • (Rain, Hot, Normal, Weak): Outlook = Rain →\to Wind = Weak →\to Yes (la temperatura non viene mai usata).
  • (Overcast, Cool, High, Strong): Outlook = Overcast →\to 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⁡(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. Gini ponderato dei figli:

  • Outlook: Sunny 1−0,42−0,62=0,481-0{,}4^2-0{,}6^2=0{,}48, Overcast 00, Rain 0,480{,}48: 5140,48+0+5140,48=0,343\frac5{14}0{,}48+0+\frac5{14}0{,}48=0{,}343 (riduzione 0,1160{,}116);
  • Humidity: High 1−(37)2−(47)2=0,4901-(\frac37)^2-(\frac47)^2=0{,}490, Normal 1−(67)2−(17)2=0,2451-(\frac67)^2-(\frac17)^2=0{,}245: 0,5⋅0,490+0,5⋅0,245=0,3670{,}5\cdot0{,}490+0{,}5\cdot0{,}245=0{,}367;
  • Wind: Weak 1−(68)2−(28)2=0,3751-(\frac68)^2-(\frac28)^2=0{,}375, Strong 0,50{,}5: 8140,375+6140,5=0,429\frac8{14}0{,}375+\frac6{14}0{,}5=0{,}429;
  • Temperature: Hot 0,50{,}5, Mild 0,4440{,}444, Cool 0,3750{,}375: 4140,5+6140,444+4140,375=0,440\frac4{14}0{,}5+\frac6{14}0{,}444+\frac4{14}0{,}375=0{,}440.

Il valore minimo è 0,3430{,}343 (Outlook): stessa radice dell'entropia. Con dati reali le due misure scelgono quasi sempre lo stesso attributo.

Verifica

python
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

Lezioni in cui compare

Teoria collegata