Machine Learning via Decision Trees: C4.5

Machine Learning via Decision Trees: C4.5
C4.5 Algorithms for Machine Learning
•
•
•
•
•
Apprendimento di alberi decisionali
Lo sviluppo del so,ware è cessato, in favore di C5.0, ma rimane uno dei pun> di riferimento nella propria classe di algoritmi. Ul<ma release: 8.0
Algoritmo scriAo in C per Unix: disponibile su: hAp://
www.rulequest.com/Personal/c4.5r8.tar.gz
Tutorial su c4.5: hAp://www2.cs.uregina.ca/~dbd/cs831/notes/
ml/dtrees/c4.5/tutorial.html
La pagina di manuale (man) per C4.5 è disponibile sul sito del corso.
Costruzione dell'albero: algoritmo base
Algoritmo base, usato in CLS
→ T: insieme degli esempi (training set)
→ {C1,C2,...,Ck}: insieme delle classi; → Considera l’insieme T:
→ if T contiene uno o più esempi, tutti appartenenti alla medesima classe then
→ singola foglia con etichetta la classe
→ if T contiene casi che appartengono a più classi then
→partizionamento di T in piu’ sottoinsiemi secondo un test su un attributo: nodo associato al test, con un sottoalbero per ogni possibile risultato del test stesso
→richiama l’algoritmo su ogni ramo/sottoinsieme
Condizioni di terminazione
In realtà, C4.5 si ferma se:
• T con>ene uno o più esempi, tuE appartenen> alla medesima •
•
•
classe
→ singola foglia con e<cheAa la classe
T non con>ene nessun esempio (insieme vuoto)
→ singola foglia con e<cheAa la classe piu’ frequente nell’insieme padre
Nessun test riesce a generare almeno due insiemi con 2*MINOBJ esempi
→ singola foglia con per e<cheAa la classe più frequente (alcuni esempi saranno mal classifica<)‫‏‬
Altre condizioni...
Scelta dell’aXributo di spliEng
• Entropia di un insieme S di esempi:
• Entropia di una par>zione P= (T0, T1,...) di un insieme T di esempi:
• Guadagno di una par>zione P= (T0, T1,...) di un insieme T di esempi:
gain(P) = info(T) - infoP(T)
• Spli>nfo:
Scelta dell’aXributo di spliEng
• Criterio per la scelta dell’aXributo di split:
• Dividendo per spli<nfo si evita di fare branching su aAribu< con un •
numero eccessivo di valori (perché a rischio di overfiWng)
Il che vuol dire che per avere il comportamente visto a lezione dovremo forzare il programma ad usare solamente il guadagno (gain) per scegliere l’aAributo di split
Esercizio 1
•
•
Dal sito del corso, scaricate il dataset “golf” (è un esempio che avete già visto a lezione!)
Scaricare C4.5 dal sito del corso. Si esegue con:
./c4.5 -­‐f <filestem> -­‐v <verbosity level>
•
•
Fate esperimen< cambiando il livello di verbosità dell’output
Cercate di individuare nell’output:
• L’albero decisionale che viene appreso
• I pun< in cui vengono decisi gli aAribu< di split
• I valori di guadagno degli aAribu< presi in considerazione
• Cercate di osservare come l’algoritmo traAa gli aAribu< con<nui
Qualcosa di più “user friendly”
1. EffeAuate il login
2. C4.5 è implementato nella suite di strumen< per data mining “WEKA”, installata sulle macchine
3. Dal sito del corso, scaricate il data set “weather”
4. Aprite il file “weather.arff” con un editor di testo
5. Avviate WEKA, da riga di comando
weka
6. Aprite il file “weather.arff” da Weka
Cosa c’è in un file .arff?
1. Il nome della “relazione” (con il significato che ha in algebra relazionale)
@relation weather
2. Gli aAribu< (l’ul<mo è la classe – di default)
@attribute outlook {sunny, overcast, rainy}
@attribute temperature real
@attribute humidity real
@attribute windy {TRUE, FALSE}
@attribute play {yes, no}
3. I da< (ques< dovremmo conoscerli...)
@data
sunny,85,85,FALSE,no
sunny,80,90,TRUE,no
...
Cosa c’è in un file .arff?
No Outlook D1 sunny D2 sunny D3 sunny D4 sunny D5 sunny D6 overcast D7 overcast D8 overcast D9 overcast D10 rain D11 rain D12 rain D13 rain D14 rain Temp (°F) 75 80 85 72 69 72 83 64 81 71 65 75 68 70 Humid (%) 70 90 85 95 70 90 78 65 75 80 70 80 80 96 Windy Class
T Play
T Don't Play
F Don't Play
F Don't Play
F Play
T Play
F Play
T Play
F Play
T Don't Play
T Don't Play
F Play
F Play
F Play
All’opera!
Histograms
1. Il riquadro in basso a destra mostra mediante un istogramma la distribuzione delle classi a seconda dell’aAributo selezionato
•
Attributi discreti: distribuzione per ogni valore
•
Attributi continui: dominio diviso in “bins”, distribuzione per ogni bin
2. Le associazioni classe-­‐colore si possono inferire selezionando come aAributo la classe stessa
3. “Visualize all” visualizza gli istogrammi per tuW gli aAribu<
Classificazione
1. Nella pagina “Classify” possiamo scegliere:
•
•
•
Che classificatore u<lizzare
Come effeAuare il tes<ng
Quale aAributo considerare come classe
2. Come classificatore u<lizzare J4.8 (un ri-­‐
codifica in Java di C4.5)
3. EffeAuare il tes<ng sul training set
4. Come classe scegliere “play”
Classificazione
1. Facendo click sul nome del classificatore si può accedere ad altre opzioni:
•
binarySplits: use binary splits on nominal attributes
•
confidenceFactor: the confidence factor used for pruning (smaller values incur more pruning).
•
minNumObj: the minimum number of instances per leaf.
•
saveInstanceData: save the training data for visualization.
•
Unpruned: no pruning is performed.
2. Provate ad avviare la classificazione
Output (1)
=== Run information ===
Scheme:
Relation:
Instances:
Attributes:
Test mode:
weka.classifiers.trees.J48 -C 0.25 -M 2
weather
14
5
outlook
temperature
humidity
windy
play
evaluate on training data
PREAMBOLO
Output (2)
J48 pruned tree
-----------------outlook = sunny
|
humidity <= 75: yes (2.0)
|
humidity > 75: no (3.0)
outlook = overcast: yes (4.0)
outlook = rainy
|
windy = TRUE: no (2.0)
|
windy = FALSE: yes (3.0)
Questo è l'albero
decisionale che
conosciamo...
Che si può visualizzare!
Click destro sulla lista
dei risulta<, poi “vizualize
tree”
Output (3)
=== Evaluation on training set ===
=== Summary ===
Correctly Classified Instances 14 100 %
Incorrectly Classified Instances 0 0 %
Kappa statistic 1 Mean absolute error 0 Root mean squared error 0 Relative absolute error 0 %
Root relative squared error 0 %
Total Number of Instances 14
... e ques< sono I risulta< della valutazione del classificatore sul training set: nessun errore è commesso
Output (4)
=== Confusion Matrix ===
a b <-­‐-­‐ classified as
9 0 | a = yes
0 5 | b = no
“Falsi posi<vi”
“Falsi nega<vi”
Error Based Pruning
•
•
•
•
c4.5 u<lizza una tecnica chiamata error-­‐based pruning
Prima di salvarlo, l'algoritmo tenta di semplificare l'albero
Per ogni foglia C4.5 s<ma una probabilità di classificazione erronea su esempi sconosciu> basandosi su alcune considerazioni sta<s<che
Per ogni nodo la probabilità di errore è la somma di quella dei soAonodi/foglie
Ad ogni nodo:
• Se la s<ma di errore può essere diminuita sos<tuendo quel nodo con una foglia, C4.5 lo fa
• Se la s<ma di errore può essere diminuita sos<tuendo quel nodo con il suo ramo più “pesante”, C4.5 lo fa
Esercizio 3
1. Provate ad apprende un albero sul dataset “cars2004”, u<lizzando come classe “sport car”, con e senza error based pruning
• Come sono i due alberi?
• Che prestazioni hanno sul training set?
2. Provate ad effeAuare la validazione sul file “cars2004_test_noname.arff”.
Esercizio 1: Language Detec>on
Esercizio 1: Language Detec>on
Si vuole progeAare un sistema in grado di individuare automa<camente la lingua in cui è scriAa una breve porzione di testo.
Esempi:
• The doctor, who was the family physician, saluted him, but he scarcely took any no<ce. -­‐-­‐> english
• J'ai couru chez toi, je ne t'ai plus trouvée, tu sais la parole que je t'avais donnée, je la <ens. -­‐-­‐ > french
• Conosci tu qualche hossanieh poco scrupoloso che si possa comperare con un bel pugno d'oro? -­‐-­‐ > italian
Esercizio 1: Language Detec>on
Scaricate dal sito del corso l’archivio “language.zip”. All’interno del paccheAo troverete due file (“tset_data.txt” e “vset_data.txt” con il training set ed il valida<on set in formato “grezzo”
Training e valida<on set non sono in formato arff
• Perché non è chiaro quali features possano cos<tuire un input adeguato per il classificatore!
• Nei casi pra<ci, questo è quello che succede il 99% delle volte.
• L’individuazione di un buon insieme di features e di un buon classificatore sono pertanto due componen< di un unico problema di progeXazione.
Esercizio 1: Language Detec>on
Insieme al dataset, troverete uno script “generate_arff.py” che svolge gran parte delle operazioni necessarie ad produrre un file arff, tranne l’estrazione delle features (che è compito vostro).
Lo script “generate_arff” è scriAo in Python, linguaggio che u<lizzeremo anche in una/due altre occasioni:
• Python è un linguaggio interpretato (compilato just in <me...).
• Un interprete Python è pre-­‐installato sulla maggior parte dei sistemi Linux e su MacOSX
• Può essere installato soAo Windows, scaricandolo da hAp://
www.python.org/
• Non è par<colarmente efficiente, ma rende molto rapida l’aWvità di sviluppo.
Rudimen> di Python
Python è loosely typed (le variabili non hanno un <po prefissato).
• Tipi primi<vi:
• a = 2 (int)
• b = 2.4 (float)
• s = “ciao mondo” o ‘ciao mondo’ (stringhe)
• Boolean: True, False
StruAure da<:
• Liste (sequenze dinamiche): l = [1, 3, 5, 7]
• Tuple (immutabili): t = (1, 3, 5, 7)
Indicizzazione:
• liste e tuple: l[0] (primo elemento), l[-­‐1] (ul<mo elemento)
• Stringhe: s[0] (prima leAera), s[-­‐1] (ul<ma leAera)
Rudimen> di Python
•
•
•
Le istruzioni terminano con il fine linea, niente “;”
Per scrivere una istruzione su più linee, si va a capo con “\”
Il “\” non è necessario se si va a capo tra una coppia di parentesi aperte:
Es. l = [1, 2,
3, 4]
•
Niente “{}” per racchiudere blocchi di istruzione: i blocchi sono individua< mediante l’indentazione
Rudimen> di Python
Istruzioni condizionali:
if <condizione>:
<blocco istruzioni>
Esempio:
if a == 0:
a += 1
print “Ho appena incrementato ‘a’”
elif a == 1:
a -­‐= 1
print “Ho appena decrementato ‘a’”
else:
print “Nessuno incremento”
Rudimen> di Python
Cicli
for <variabile> in <oggeAo enumerabile>:
<blocco istruzioni>
Esempi
for a in [1, 2, 3]:
print a
for i in range(3):
print i
•
•
Le liste, le stringhe, le tuple sono enumerabili
“range(n)” res<tuisce una lista con i numeri interi da 0 a n-­‐1
Rudimen> di Python
List Comprehension
[<espression> for <variabile> in <enumerabile> if <condizione>]
Esempi
Numeri pari da 0 a 8: [2*i for i in range(5)]
Quadra< dei numeri interi da 0 a 4: [i**2 for i in range(5)]
Numeri pari da 0 a 8 (bis): [i for i in range(10) if i % 2 == 0]
Rudimen> di Python
Definizione di una funzione:
def <nome funzione>(<parametro>, <parametro>, ...):
<blocco istruzioni>
Esempio:
def pari(n):
return i % 2 == 0
Una funzione è un oggeAo! Quindi può essere passata come parametro ad un’altra funzione.
Si possono u<lizzare librerie di classi ed oggeW (moduli):
import <nome modulo>
Esercizio 2: Shape Recogni>on
Esercizio 2: Shape Recogni>on
In un impianto industriale per la lavorazione del legno un par<colare macchinario deve eseguire una qualche operazione solo sui tagli quadra<.
Le tavole non arrivano al macchinario in modo ordinato: prima del macchinario sono sta< introdoW dei sensori oWci ed una unità di pre-­‐processing the forniscono una descrizione del pezzo in arrivo soAo forma di una poligonale:
Esercizio 2: Shape Recogni>on
I pezzi possono avere diversa dimension e forma irregolare. Poiché non vengono carica< in modo ordinato possono trovarsi in posizioni diverse del nastro trasportatore.
Si richiede di meAere a punto una soluzione basata su alberi decisionali per il riconoscimento dei pezzi su cui occorre intervenire (i quadra<).
Esercizio 2: Shape Recogni>on
Scaricate dal sito del corso il dataset “shapes”. All’interno del paccheAo troverete:
• due file (“tset_data.txt” e “vset_data.txt”) con i da< per il training set ed il valida<on set in formato “grezzo”
• due cartella “tset” conten< una immagine per ciascuno dei pezzi nel training e nel valida<on set.
• uno script per la costruzione del file “.arff”, da personalizzare come nel caso precedente.