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

Esercizio - Albero di decisione ID3 sul dataset del tennis

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

Versione ripasso

Dati: 14 giorni, 99 Yes e 55 No. Teoria: 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 della radice: H=−0,643log⁡20,643−0,357log⁡20,357=0,940H=-0{,}643\log_20{,}643-0{,}357\log_20{,}357=0{,}940.

Guadagno per attributo:

  • Outlook IG=0,247IG=\mathbf{0{,}247} (Sunny (2,3)(2,3) 0,9710{,}971, Overcast (4,0)(4,0) 00, Rain (3,2)(3,2) 0,9710{,}971);
  • Humidity 0,1520{,}152, Wind 0,0480{,}048, Temperature 0,0290{,}029.

Radice Outlook: Overcast è foglia Yes.

  • Ramo Sunny: Humidity (IG=0,971IG=0{,}971; High tutti No, Normal tutti Yes).
  • Ramo Rain: Wind (IG=0,971IG=0{,}971; Weak tutti Yes, Strong tutti No).

Classificazione dei nuovi giorni:

  • (Sunny, Cool, High, Strong) →\to No;
  • (Rain, Hot, Normal, Weak) →\to Yes (la temperatura non serve);
  • (Overcast, Cool, High, Strong) →\to Yes.

Con Gini: Gini⁡(S)=0,459\operatorname{Gini}(S)=0{,}459; la divisione migliore è ancora Outlook, con Gini ponderato 0,3430{,}343.

Gini per attributo (ponderato, minore è migliore): Outlook 0,3430{,}343, Humidity 0,3670{,}367, Wind 0,4290{,}429, Temperature 0,4400{,}440.

Errori tipici:

  • usare il logaritmo naturale invece di log⁡2\log_2 nell'entropia;
  • non pesare i figli per le loro dimensioni;
  • confondere il guadagno con l'entropia del nodo.

Controllo: tutte le foglie sono pure, quindi l'accuracy sul training è 14/14=114/14=1. Con ID3 la temperatura non compare nell'albero finale.

Esercizi su questo argomento

Teoria collegata