Classificatore di funghi: pattern recognition in Matlab
Premessa
La classificazione di una grossa mole di dati non è semplice. Usare strumenti e librerie consolidate (come PRTools di Matlab) può essere molto vantaggioso se non addirittura indispensabile. Questo vale sia quando il numero di elementi da classificare è enorme, sia quando sono diversi i parametri (o attributi) su cui la classificazione può avere luogo. La libreria PRTools di Matlab implementa diversi algoritmi di classificazione (anche basati su reti neurali) e mette a disposizione dell'utente funzioni per la selezione delle caratteristiche.
Obiettivo del progetto
Creare un sistema di classificatori e combinatori capace di classificare funghi in base al loro habitat di appartenenza con errore inferiore al 15%, usando PRTools di Matlab.
Data set, training set e test set
Dalla pagina web
http://mlearn.ics.uci.edu/databases/mushroom/
è stato prelevato il file agaricus-lepiota.data, che contenente dati relativi a diverse specie di funghi. Nel file sono presenti 8124 tipi di funghi e per ciascuno di questi sono indicati 23 diversi attributi, opportunamente codificati (istruzioni di codifica contenute nel file agaricus-lepiota.names). Tutte le codifiche sono alfanumeriche, quindi sono state ricondotte a codifiche numeriche per poter utilizzare le funzioni Matlab; inoltre alcuni dati del dodicesimo attributo sono non classificati (al posto di valori validi è indicato un punto interrogativo ?). Le entry che contengono dati incerti sono state eliminate dal data set (che si è ridotto a 5664 specie, a seguito delle eliminazioni).
I funghi del data set possono appartenere ad uno fra sei habitat differenti: grasses, leaves, meadows, paths, urban, waste, woods.
Dal dataset sono stati estratti poi il training set (75% di entry - 4233 funghi) e il test set (il restante 25% - 1411 funghi). L'estrazione è stata fatta senza un criterio ben preciso: in particolare le prime 4233 specie sono state usate come training set, le restanti 1411 come test set.
Prove di classificazione con classificatori 'semplici'
La prima prova è stata fatta utilizzando classificatori lineari o quadratici o basati su densità normale; ogni classificatore è stato addestrato sul training set ed è stato poi testato sul test set al fine di valutare gli errori commessi dallo stesso.
Questa tabella contiene i classificatori provati: nome del classificatore, tipo, tasso di errore stimato, numero di elementi classificati in maniera errata.
La migliore classificazione viene fatta dal classificatore lineare LOGLC, mentre l’errore più alto è dato dal classificatore UDC, con una percentuale di errata classificazione al di sopra dello 82%.
Anche se l'errore ottenuto rientra già nelle specifiche di progetto si è comunque cercato di migliorare provando a combinare fra di loro i due classificatori migliori, utilizzando diversi combinatori.
I valori indicati si riferiscono alla percentuale di errata classificazione.
Sono diversi i combinatori che restituiscono un errore pari a quello precedentemente tornato dalla LOGLC, ma nessuno riesce a scendere al di sotto di questo valore.
Risultati migliori si possono ottenere combinando LOGLC con un classificatore TREEC. TREEC da solo da una percentuale di errore di circa il 29%, ma combinati insieme, questi due classificatori danno percentuali di errore inferiori a quelle di LOGLC.
Con alcuni combinatori si ottiene una percentuale di errore del solo 13.17%.
Prove di classificazione con reti multistrato
Si è tentata una classificazione tramite reti multistrato, variando il numero di neuroni dello strato nascosto. E' stato utilizzato il classificatore BPXNC, provato con 3, 6, 9, 12, 15, 20 e 25 neuroni
Il risultato migliore si ottiene con 25 neuroni nello strato nascosto anche se comunque l’errore rimane elevato.
Selezione individuale
Al fine di tentare di migliorare i risultati sono state impiegate le tecniche di feature selection per selezionare le features più significative ai fini della classificazione. Per prima cosa si è provato ad effettuare la selezione individuale: si è proceduto utilizzando i classificatori LOGLC e NMC
La prima colonna della matrice indica la posizione nella graduatoria, la seconda colonna indica la corretta classificazione associata alla feature indicata nella terza colonna (selezione individuale). In base al classificatore con la quale viene prodotta la classifica si possono avere risultati sostanzialmente diversi.
La selezione individuale è stata in seguito applicata utilizzando i due classificatori TREEC e KNNC.
Selezione in avanti
Ai dati è stata anche applicata la selezione in avanti.
I risultati della selezione in avanti prodotti dal LOGLC sono stati utilizzati per cercare di diminuire la percentuale di errore ritornata dai classificatori lineari, senza tuttavia ottenere alcun miglioramento.
Applicando la selezione all'algoritmo TREEC si ottiene il migliore risultato (75.72%) di corretta classificazione, se si usano le feature 12, 20, 21, 8. Sulla base di questa osservazione i dati sono stati riadattati ed il nuovo training set è stato usato per riaddestrare i classificatori usati precedentemente.
Questa tabella evidenzia le differenze fra i tassi di errore prima e dopo l’applicazione della selezione: la riduzione di features diminuisce il tasso di errore. Attraverso l'uso dei combinatori si posono ancora migliorare i risultati.
Compatibile con
Ris. min. 1024x768
© 2008-2010 Alessio Amato