Prof. Claudio Sartori

Data mining


Informativa Privacy

Classificazione con alberi di decisione in Weka

Questo esempio illustra l'uso del classificatore C4.5 (J48) in Weka. I dati usati sono quelli utilizzati nelle altre esercitazioni (bank-data.csv). Si assume che siano stati eseguiti gli opportuni passi di pre-processing. In questo caso non è indispensabile la discretizzazione, ma si è tuttavia optato per una conversione dell'attributo "Children" in booleano. Inoltre è ovviamente stato eliminato l'attributo ID.

La versione di dati utilizzata è in "bank.arff" e le istanze non classificate sono in "bank-new.arff".

I dati caricati sono mostrati in Figura 1.

Attiviamo J48, l'algoritmo di classificazione che implementa C4.5 e non richiede discretizzazione degli attrbuti numerici, a differenza dell'originale ID3.

Figura 2-a     Figura 2-b

Possiamo specificare i vari parametri, come mostrato in Figura 3. Nell'esempio accetteremo i valori default, che eseguono alcuni passi di pruning.

Fra le opzioni di test selezioniamo 10-fold cross-validation. un metodo sufficientemente accurato quando non si fornisce un insieme separato di dati di test. La versione ASCII del modello generato è mostrata in Figura 4.

Questa informazione può essere mostrata in finestre separate, come mostrato in Figura 5-aFigura 5-b

Si noti che l'accuratezza di classificazione del nostro modello è soltanto 69%. Questo può indicare l'opportunità di lavoro aggiuntivo, sia di pre-processing che di selezione dei parametri corretti per la classificazione. Tuttavia, a titolo di esempio continueremo con questi parametri.

Weka permette anche una visualizzazione grafica dell'albero di classificazione. Questo è ottenuto con "right click" sul result set, e selezionando "Visualize tree", e ridimensionando se necessario. L'albero è mostrato in Figura 6.

Useremo ora il modello appreso per classificare nuove istanze. La Figura 7 mostra una porzione del file con le nuove istanze. La sezione iniziale è ovviamente identica a quello dei dati di training, però in questo caso l'attributo "pep" è sconosciuto. Nel pannello principale, sotto "Test options" selezionare il bottone "Supplied test set" e il bottone "Set...". Questo attiverà una finestra che permette di aprire il file con le istanze da classificare, come in Figura 8-a  e Figura 8-b.

In questo caso apriamo il file "bank-new.arff" e premiamo il bottone "Start" per generare il modello dai dati di training e applicarlo al nuovo file di test, predicendo i valori di "pep". Il risultato è mostrato in Figura 9. In questo caso, il sommario dei risultati nel pannello destro non mostra alcuna statistica, poiché nel file utilizzato l'attributo predetto ha valore sconosciuto.

Naturalmente, in questo esempio siamo interessati a sapere come il modello ha classificato le nuove istanze, dobbiamo quindi creare un nuovo file con i valori predetti risultanti dal modello. Questo può essere fatto molto semplicemente usando l'interfaccia a linea di comando, ma è possibile anche con l'interfaccia grafica, usando l'approccio "indiretto" mostrato di seguito.

Per prima cosa, eseguire right-click sul risultato più recente nel pannello "Result list", e selezionare "Visualize classifier errors". Questo aprirà una finestra separata con un grafico bidimensionale, come mostrato in Figura 10Figura 11. Siamo interessati non tanto a ciò che il grafico rappresenta, ma a salvare i risultati di classificazione nel file "bank-predicted.arff", come mostrato in Figura 12. Il file contiene le nuove istanze, estese con la colonna del valore predetto di "pep". La porzione iniziale del file è mostrata in Figura 13.

Si noti che sono stati aggiunti due attributi alle istanze originali: "Instance_number" e "predictedpep", l'ultimo valore dopo "?".

Utilizzo della linea di comando (raccomandato)

L'interfaccia grafica di Weka è molto comoda per scegliere e aggiustare i parametri e visualizzare i risultati. Viceversa, per applicare i modelli a nuovi dati è molto più diretto e flessibile l'impiego della linea di comando, utilizzando comunque i parametri stabiliti in precedenza tramite la GUI.

L'interfaccia a linea di comando è attivata da "Simple CLI" nella finestra principale. Il comando per generare il modello di classificazione è indicato sotto, e contiene il riferimento al nome del pacchetto che implementa il modello, i parametri il file di input al modello (-t ) e il file di descrizione del modello (-d )

java weka.classifiers.trees.J48 -C 0.25 -M 2 -t directory-path\bank.arff -d directory-path\bank.model

Le opzioni -C 0.25 e -M 2 sono quelle selezionate in precedenza tramite la GUI (Figura 3). Dopo l'attivazione della linea di comando si vede ciì che è mostrato in Figura 13.

Il modello "bank.model" è utilizzato per classificare nuovi dati con il seguente comando:

java weka.classifiers.trees.J48 -p 9 -l directory-path\bank.model -T directory-path \bank-new.arff

L'opzione -p 9 indica che si vuole predere il valore dell'attributo 9 ("pep"). -l e -T specificano il file del modello e il file dei dati da classificare, rispettivamente.

Il risultato è un output a 4 colonne, come mostrato di seguito

0 YES 0.75 ? 1 NO 0.7272727272727273 ? 2 YES 0.95 ? 3 YES 0.8813559322033898 ? 4 NO 0.8421052631578947 ?

La prima colonna è il numero sequenziale di istanza, la seconda il valore predetto, la terza la confidenza (accuratezza stimata della predizione) e la quarta il valore dell'attributo predetto nei dati originali (in questo caso ignoto). Una parte del risultato finale è mostrata in Figura 14.

L'output mostrato sopra è più diretto rispetto a quello della GUI, e inoltre la presenza della confidenza stimata permette di filtrare le sole predizioni più sicure (ad esempio, quelle sopra l'85%).

Per qualsiasi problema su questa pagina contattare il webmaster.