MODELLI PROBABILISTICI Classificazione di un data set di proteine con Weka SOFIA CIVIDINI
2 INTRODUZIONE Negli ultimi due decenni si è assistito ad un aumento esponenziale nella quantità dell informazione o dati che è stata immagazzinata in formato elettronico. Si è stimato che la quantità di informazione nel mondo raddoppi ogni venti mesi e che la grandezza ed il numero dei database aumentino in modo sempre più veloce. Questo fatto si deve soprattutto: all incremento del potere e della velocità di calcolo degli attuali computer alla possibilità che essi hanno acquisito di avere supporti molto grandi per immagazzinare e memorizzare anche notevoli quantità di dati all introduzione di nuove tecniche che si affiancano ai tradizionali metodi di analisi statistica e di data retrieval e che permettono di estrarre conoscenza, cioè informazioni significative (di valore), in seguito all esplorazione di questi enormi volumi di dati. L insieme di queste tecniche prende il nome di Knowledge Discovery in DataBases o Data Mining (anche se con il termine data mining sarebbe meglio considerare una tappa della Knowledge Discovery in DataBases). La Knowledge Discovery in DataBases integra vari campi di ricerca (statistica, pattern recognition, machine learning, ecc.) ed è un processo analitico che è stato progettato per esplorare dati ed estrarne conoscenza in termini di associazioni, patterns, regole o sequenze ripetute che sono nascoste nei dati stessi e che non sono note a priori. CLASSIFICAZIONE. La classificazione è forse la tecnica di Data Mining più comunemente applicata e viene utilizzata per analizzare grandi quantità di dati in modo automatico o semiautomatico ed estrarne conoscenza; in particolare la classificazione estrae conoscenza a livello di variabili categoriche o classi, mentre quando si hanno variabili numeriche o continue si parla di Previsione. Di solito, si ha a che fare con grandi quantità di dati (commerciali, finanziari, scientifici, clinici, ecc.) che possono anche essere: INCOMPLETI mancano delle osservazioni RUMOROSI ci sono dei valori anomali INCONSISTENTI esistono codici differenti per lo stesso item
3 RIDONDANTI presenza della medesima informazione Quindi, i dati prima di essere sottoposti a Classificazione devono prima subire una fase di PREPROCESSING che consiste di vari passaggi: Data Cleaning i dati originali che provengono da fonti differenti vengono ripuliti per eliminare rumore e trattare i casi di dati mancanti Relevance Analysis serve per individuare quegli attributi che non sono rilevanti per l analisi oppure che sono ridondanti Data Transformation in questa fase, i dati vengono generalizzati a livelli concettuali più elevati oppure trasformati in modo da assumere valori in determinati intervalli (normalizzazione). Esistono due tipi di classificazione e cioè: CLASSIFICAZIONE SUPERVISIONATA in questo tipo di approccio, il valore di Class Label di ogni tupla di dati (training sample) è noto. Si parla di Supervised Learning. CLASSIFICAZIONE NON-SUPERVISIONATA in questo altro tipo di approccio invece non si dispone di casi etichettati e non si conosce nemmeno quante sono le classi o categorie da apprendere. Si parla di Unsupervised learning o Clustering. Nell ambito della Classificazione Supervisionata, il processo di Data Classification viene diviso in due fasi: 1) LEARNING viene costruito un modello che descrive un determinato insieme di classi in seguito all analisi di tuple di dati secondo i loro attributi 2) CLASSIFICATION il modello costruito viene utilizzato per classificare nuovi casi Disponendo di un data set di cui è noto, per ogni tupla di dati, il valore della class label, si può dividere questo data set in modo che una parte venga utilizzata come Training Set nella fase di Learning e l altra parte venga invece utilizzata come Test Set per verificare l accuratezza del classificatore prima di passare alla fase di Classification con un data set nuovo. Infatti, utilizzare gli stessi dati sia nella fase di apprendimento che nella fase di verifica della performance di un classificatore è molto pericoloso, perché si rischia l overfitting, cioè di avere stime troppo ottimistiche riguardanti la sua prestazione a livello dei nuovi casi. Esistono dei metodi (basati sulla randomizzazione) per dividere il data set di partenza e per stimare così l accuratezza di un classificatore. Sono i seguenti:
4 Cross-validation con questa metodica, il data set viene diviso, in modo casuale, in k-folds, cioè in k sottoinsiemi che in maniera esclusiva vengono utilizzati come Test Set ; il ciclo viene quindi ripetuto k volte. L accuratezza complessiva viene ottenuta sommando il numero dei casi correttamente classificati nelle k iterazioni e dividendo questa somma per il numero dei casi dell insieme di dati iniziale. Esempio: se viene fatta una cross-validation a 10 folds, il data set viene diviso in 10 parti; 9 parti vengono usate come Training Set ed 1 parte come Test Set e tutto questo viene ripetuto per 10 volte con un fold diverso ogni volta. Hold Out in questo caso, il data set iniziale viene di solito diviso in modo tale che 2/3 di esso vengano usati come Training Set ed il resto come Test Set; la stima che si ottiene è di solito pessimistica in quanto viene utilizzata una porzione dei dati fissa per ottenere il classificatore. Esempio: si può utilizzare il 66% del data set come Training set ed il restante 34% come Test Set. Esistono anche schemi particolari che possono migliorare la performance di un classificatore unendo tra di loro più classificatori in modo da ottenerne uno composto. Questi sono: il Bagging combina le classificazioni predette da modelli multipli o dallo stesso tipo di modello per differenti learning data. il Boosting vengono assegnati dei pesi ad ogni Training Set e si apprendono i classificatori in sequenza; il Boosting genererà una sequenza di classificatori dove ogni classificatore consecutivo nella sequenza diventa un esperto nelle osservazioni da classificare che non sono state ben classificate da quelli precedenti ad esso; le classificazioni fatte dai diversi classificatori possono poi essere combinate per ricavare la miglior classificazione in assoluto. Un classificatore può essere valutato in base a diversi parametri: a. Accuratezza nella classificazione b. Velocità di costruzione c. Velocità di esecuzione d. Robustezza (accuratezza in presenza di rumore o dati mancanti)
5 L Accuratezza di un classificatore rappresenta la percentuale di istanze classificate correttamente (cioè la cui classe predetta coincide con la classe reale) sul numero totale di istanze classificate. Esistono altri parametri che permettono di valutare un classificatore. Vediamoli in dettaglio. 0.631 0.012 0.983 0.631 0.769 negativo 0.988 0.369 0.718 0.988 0.832 positivo 565 330 a = negativo 10 841 b = positivo Classe a: TP=565 FP=10 FN=330 Classe b: TP=841 FP=330 FN=10 La PRECISION è una misura di correttezza ed è uguale: Precision= True Positive/(True Positive + False positive) Esempio: precision classe negativa = 565/(565+10) = 0.983 Più il numero dei FP è basso, maggiore è la Precision che si avvicina ad 1. La RECALL è una misura di completezza ed è uguale: Recall= True Positive/(True Positive + False Negative) Esempio: recall classe negativa = 565/(565+330) = 0.631 Più il numero dei FN è basso, più la Recall si avvicina al massimo valore di 1. La F-MEASURE è uguale a: F-measure= 2*Recall*Precision/(Recall+Precision)
6 WEKA Weka è un open source software che è stato ideato dall Università di Waikato in Nuova Zelanda e rappresenta un estesa collezione di algoritmi di Machine Learning per lavori di Data Mining. Contiene strumenti per il pre-processing dei dati, per la classificazione e la regressione, per il clustering, per le regole di associazione e per la visualizzazione. Per il nostro lavoro di classificazione, abbiamo utilizzato per la maggior parte i classificatori presenti nella versione vecchia di Weka (3-2), mentre della versione più recente (3-4), abbiamo usato solo due classificatori e cioè JRip e AODE. Per analizzare il data set a disposizione, è stato usato l ambiente Explorer di Weka. Experimenter invece permette di mettere a confronto più modelli a partire da uno o più data set. Explorer possiede un set di pannelli, ognuno dei quali può essere adoperato per condurre un certo tipo di lavoro; questi sono elencati sotto: Figura 1; versione 3-2 Preprocess serve per importare e preparare i dati Classify serve per applicare ai dati gli algoritmi di classificazione o i modelli per la regressione (entrambi sono chiamati classifiers in Weka) Cluster serve per fare cluster analysis Associate serve per applicare algoritmi di apprendimento delle regole di associazione Select Attributes serve per selezionare sottogruppi di attributi per l analisi Visualize serve per visualizzare le proprietà grafiche dei dati Attraverso Open File nel pannello Preprocess, abbiamo caricato il nostro data set di proteine. Il file che era in un formato.xls è stato trasformato in.csv (comma separated values) affinchè potesse essere opportunamente riconosciuto da Weka, che a sua volta lo trasforma in formato.arff. Inoltre, abbiamo trasformato la classe da numerica in nominale per esigenze di software (come è spiegato
7 successivamente nella sezione risultati). Non è stato necessario sottoporre il data set a Preprocessing poiché non conteneva rumore o casi mancanti. Siamo nella sezione di Preprocess Figura 2 Questo è il nostro data set con 27 attributi, l ultimo dei quali rappresenta la classe. Il data set contiene 1746 istanze Come si può vedere dalla Figura 2, il data set ha 27 attributi di cui l ultimo rappresenta la classe e contiene 1746 istanze. Selezionando l attributo PROTEIN, nella finestra sulla destra si può notare che questa classe contiene due labels : negativo con 895 istanze e positivo con 851 istanze; la classe è di tipo nominale (Figura 3). Se invece selezioniamo un singolo attributo, per esempio Weight, nella finestra sulla destra ci appaiono le informazioni statistiche che lo riguardano come: minimo, massimo, media e deviazione standard (Figura 4).
8 Figura 3 Selezionando solamente l attributo Proteine, che corrisponde alla classe, si vede che esistono due Labels : negativo con 895 istanze e positivo con 851 istanze. Figura 4 Selezionando un attributo, a destra, si possono osservare le informazioni statistiche che lo riguardano come : massimo, minimo, media e deviazione standard.
9 Passiamo ora al pannello Classify. Weka possiede le implementazioni di tutte le principali tecniche di learning per la classificazione e per la regressione come: alberi di decisione, rule sets, classificatori Bayesiani, support vector machines, logistic and linear regression, multi-layer perceptron e metodi nearest-neighbour; contiene anche meta-classificatori per bagging e boosting. In questa sezione possiamo scegliere il tipo di classificatore da utilizzare, possiamo cambiarne eventualmente i parametri di default, applicare un certo tipo di filtro, scegliere il tipo di metodo con cui vogliamo valutare la performance del classificatore, ecc. (Figura 5). Nella sezione Classify, possiamo scegliere il tipo di classificatore, cambiarne eventualmente i paramentri di default, applicare o meno un filtro, scegliere il tipo di metodo con cui vogliamo valutare la performance del classificatore, ecc. Classificatore selezionato Questi parametri di default di IBk possono essere variati. Noi abbiamo cambiato il valore di KNN da 1 a 2, 5 e 12. Figura 5
10 Nella Figura 6, possiamo vedere il riquadro (Test options) dove scegliere il metodo per valutare la performance del classificatore precedentemente selezionato. Dopo avere fatto correre il programma per mezzo dell opzione Start, nella finestra grande a destra compare l output completo del classificatore con tutti i dettagli inerenti alla sua performance. In questo riquadro, si possono selezionare i metodi con cui si vuole valutare la performance del classificatore in esame. Noi abbiamo usato la Cross-validation e il Percentage split (detto anche Hold-out). Figura 6 In Weka, esiste anche un ulteriore opzione che permette di visualizzare gli alberi di decisione costruiti dai classificatori che si basano su questo tipo di algoritmo (Figura 7).
11 In Weka, esiste anche un opzione che dà la possibilità di visualizzare l albero di decisione costruito dal classificatore. Figura 7 COMMENTI AI RISULTATI WEKA Il data set che abbiamo analizzato è di proteine ed è costituito da 27 attributi per un totale di 1746 istanze complessive. I primi 26 attributi sono variabili che rappresentano delle caratteristiche strutturali o chimico-fisiche delle proteine in questione, mentre l ultimo attributo corrisponde alla Classe nella quale possiamo distinguere due labels class e cioè: -1 e +1. Per esigenze di software la classe è stata trasformata da numerica in nominale convertendo -1 in negativo e +1 in positivo. Inoltre, il file che contiene il data set è stato trasformato da file.xls a file.csv (comma separated values) che è un formato riconosciuto da Weka, il quale poi lo trasforma a sua volta in file.arff.
12 Per l analisi di classificazione sono stati utilizzati 18 classificatori presenti nella versione 3-2 di Weka e 2 classificatori presenti nella versione 3-4 di Weka che sono i seguenti: 1. ZeroR 2. DecisionStump 3. DecisionTable 4. HyperPipes 5. IB1 6. IBk 7. Id3 8. J48J48 9. J48Part 10. KernelDensity 11. K-Star 12. Naive Bayes Simple 13. Naive Bayes 14. OneR 15. Prism 16. AODE 17. JRip 18. VFI 19. ADTree 20. SMO Sono stati eseguiti 240 esperimenti in cui abbiamo analizzato la performance dei vari classificatori attraverso due metodi principali e cioè: Cross-validation Hold-out Per quanto riguarda la Cross-validation, abbiamo fatto per quasi tutti i classificatori tre esperimenti a 10 (valore di default), 6 e 3 folds, senza e con l applicazione di un filtro di discretizzazione. Per l Hold-out, abbiamo fatto tre esperimenti con un valore di training set pari al 66% (valore di default), all 80% e al 50% senza il filtro di discretizzazione, mentre con l applicazione del filtro abbiamo fatto solo un esperimento con il valore di default. Inoltre, abbiamo fatto prove con Cross-validation a 10 folds e Hold-out 66% aggiungendo il Bagging a quasi tutti i classificatori considerati per cercare di migliorarne la performance. Per DecisionStump, sono stati utilizzati anche due metaclassificatori per il Boosting e cioè AdaBoost e LogitBoost. Altri parametri sono stati variati rispetto a quelli di default anche per DecisionTable, IBk e NaiveBayes come verrà spiegato poi. Qui di seguito, riportiamo solo gli esperimenti che hanno dato i risultati migliori, mentre per gli output di tutti gli esperimenti fatti e i relativi
13 commenti si rimanda al file Risultati e commenti esperimenti eseguiti con Weka e alla Tabella riassuntiva. ZeroR Il Classificatore ZeroR assegna tutte le istanze alla classe di maggiore dimensione presente nel training-set senza mai considerare gli attributi di ciascuna istanza. Non ha molto senso usare questo schema per la classificazione, per cui gli esperimenti eseguiti con ZeroR ci servono solo come parametro di riferimento per la valutazione della performance dei classificatori considerati successivamente, nel senso che non si deve mai andare sotto il valore trovato con questo classificatore che dovrebbe rappresentare il peggior risultato possibile. Per questi motivi viene anche detto classificatore stupido. In tutti gli esperimenti eseguiti con ZeroR, questo classificatore assegna tutte le istanze del data set (n tot 1746) alla classe maggiormente rappresentata che nel nostro caso è quella negativa (-1) con 895 istanze contro le 851 della positiva (+1). La percentuale di istanze correttamente classificate da ZeroR è intorno al 51% circa. ZeroR cross-validation: 10 folds senza filtri Scheme: Test mode: weka.classifiers.zeror 10-fold cross-validation Correctly Classified Instances 895 51.26 % Incorrectly Classified Instances 851 48.74 % Kappa statistic 0 Mean absolute error 0.4997 Root mean squared error 0.4998 Relative absolute error 100.0002 % Root relative squared error 100.0002 % Total Number of Instances 1746 1 1 0.513 1 0.678 negativo 0 0 0 0 0 positivo 895 0 a = negativo 851 0 b = positivo
14 DecisionStump Questa è una classe per la costruzione e l uso di un semplice albero di decisione a un livello binario (alberi di decisione a un livello) con un ramo extra per i valori persi. Esso produce probabilità di classe. Fa fronte ai valori persi estendendo un terzo ramo dall albero, in altre parole, trattando il valore perso come un attributo separato. Di solito viene utilizzato insieme agli algoritmi di Boosting. La miglior performance che abbiamo ottenuto con DecisionStump (88% di istanze correttamente classificate) si è avuta utilizzando il metodo Hold-out 80% senza filtro di discretizzazione ed associando il classificatore LogitBoost per il boosting. Per gli altri esperimenti condotti con l uso di LogitBoost, la percentuale di istanze correttamente classificate si è mantenuta compresa tra circa l 85 e l 86%. Usando invece AdaBoost come algoritmo di boosting, abbiamo ottenuto delle percentuali di istanze classificate in modo corretto un po inferiori rispetto a LogitBoost e cioè in media intorno all 82%, tranne nel caso di Hold-out 50% senza filtro dove si è raggiunto il valore di 84.19%. Senza l uso degli algoritmi di boosting, i risultati ottenuti nei rimanenti esperimenti sono compresi tra circa l 80.50% e l 81.90%. In linea generale, DecisionStump tende a commettere più errori nel classificare le istanze della classe positiva. Non c è un equa ripartizione delle istanze non correttamente classificate tra le due classi negativa e positiva. Vedi il file Risultati e commenti esperimenti eseguiti con Weka e la Tabella riassuntiva. DecisionStump+LogitBoost Hold-out: 80 % senza filtri Scheme: weka.classifiers.logitboost -P 100 -I 10 -W weka.classifiers.decisionstump -- Test mode: split 80% train, remainder test Correctly Classified Instances 308 88 % Incorrectly Classified Instances 42 12 % Kappa statistic 0.7612 Mean absolute error 0.188 Root mean squared error 0.3068 Relative absolute error 37.644 % Root relative squared error 61.4004 % Total Number of Instances 350
15 0.809 0.042 0.955 0.809 0.876 negativo 0.958 0.191 0.821 0.958 0.884 positivo 148 35 a = negativo 7 160 b = positivo DecisionStump+AdaBoost cross-validation: 10 folds senza filtri Scheme: weka.classifiers.adaboostm1 -P 100 -I 10 -S 1 -W weka.classifiers.decisionstump -- Test mode: 10-fold cross-validation Correctly Classified Instances 1433 82.0733 % Incorrectly Classified Instances 313 17.9267 % Kappa statistic 0.6431 Mean absolute error 0.3316 Root mean squared error 0.3746 Relative absolute error 66.3602 % Root relative squared error 74.9397 % Total Number of Instances 1746 0.723 0.076 0.909 0.723 0.805 negativo 0.924 0.277 0.76 0.924 0.834 positivo 647 248 a = negativo 65 786 b = positivo DecisionTable Classificatore che costruisce e usa una semplice tabella di decisione. Decision Table adopera il wrapper method per trovare un buon sotto-insieme di attributi da includere nella tabella. Questo è fatto usando la prima migliore ricerca. La migliore percentuale di classificazione ottenuta con DecisionTable si è avuta usando il metodo Hold-out senza filtro di discretizzazione e settando il parametro useibk come true; si è così avuto l 87.04% di istanze correttamente classificate. Anche le rimanenti performance sono state comunque abbastanza buone con percentuali comprese tra l 84,48% e l 86,60%. Anche la ripartizione delle istanze
16 non correttamente classificate è stata equa tra le due classi negativa e positiva, il che ci indica che il classificatore commette la stessa percentuale di errore nel classificare entrambi i due tipi di proteine. DecisionTable Hold-out: 66% con useibk=true Scheme: weka.classifiers.decisiontable -X 1 -S 5 -I Test mode: split 66% train, remainder test Correctly Classified Instances 517 87.037 % Incorrectly Classified Instances 77 12.963 % Kappa statistic 0.7406 Mean absolute error 0.1822 Root mean squared error 0.3221 Relative absolute error 36.4561 % Root relative squared error 64.4549 % Total Number of Instances 594 0.864 0.122 0.884 0.864 0.874 negativo 0.878 0.136 0.857 0.878 0.867 positivo 266 42 a = negativo 35 251 b = positivo HyperPipes Implementazione di un classificatore HyperPipes. Per ogni categoria si costruisce un HyperPipes che contiene tutti i punti di quella categoria (essenzialmente registra i legami degli attributi osservati per ciascuna categoria). Le istanze-test sono classificate in accordo con la categoria che più contiene l istanza. Non manipola classi numeriche o valori persi nei casi-test. E un algoritmo molto semplice, ma ha il vantaggio di essere estremamente veloce. HyperPipes non ha mai dati buone percentuali di classificazione in nessun esperimento condotto. I suoi risultati sono equiparabili a quelli del classificatore ZeroR e non raggiungono mai valori superiori a circa il 63% (ottenuto con l uso di Bagging e Hold-out 66% senza filtro). Anche la distribuzione delle istanze non correttamente classificate tra le due classi negativa e positiva è pessima.
17 HyperPipes +Bagging Hold-out: 66% senza filtro Scheme: weka.classifiers.bagging -S 1 -I 10 -P 100 -W weka.classifiers.hyperpipes -- Test mode: split 66% train, remainder test Correctly Classified Instances 374 62.963 % Incorrectly Classified Instances 220 37.037 % Kappa statistic 0.2385 Mean absolute error 0.4881 Root mean squared error 0.4885 Relative absolute error 97.6956 % Root relative squared error 97.752 % Total Number of Instances 594 0.981 0.748 0.585 0.981 0.733 negativo 0.252 0.019 0.923 0.252 0.396 positivo 302 6 a = negativo 214 72 b = positivo IB1 Il classificatore IB1 usa una semplice misura di distanza per trovare l istanza di training più vicina all istanza di test che viene considerata. Se ci sono più istanze di training con la medesima distanza (che deve essere la minore possibile) dall istanza di test, viene presa l istanza di training che è stata trovata per prima. IB1 è una semplice implementazione dell algoritmo di Nearest Neighbour (NNA). La distanza tra due campioni Xi e Xj può essere misurata attraverso una funzione Euclidea. IB1, insieme ad IBk, ha dato la miglior performance di classificazione in assoluto tra tutti i classificatori presi in considerazione raggiungendo una percentuale di istanze correttamente classificate pari al 93.93% nell esperimento in cui è stata usata la Cross-validation a 10 folds senza filtro di discretizzazione. Anche il corrispondente esperimento con Bagging non ha migliorato ulteriormente questa percentuale che è rimasta tale. Le prestazioni di IB1 sono sempre state superiori all 87% in tutti gli esperimenti condotti. Ottima anche la distribuzione delle istanze non correttamente classificate tra le due classi negativa e positiva.
18 IB1 cross-validation: 10 folds senza filtro Scheme: Test mode: weka.classifiers.ib1 10-fold cross-validation Correctly Classified Instances 1640 93.929 % Incorrectly Classified Instances 106 6.071 % Kappa statistic 0.8785 Mean absolute error 0.0607 Root mean squared error 0.2464 Relative absolute error 12.1497 % Root relative squared error 49.2945 % Total Number of Instances 1746 0.942 0.063 0.94 0.942 0.941 negativo 0.937 0.058 0.939 0.937 0.938 positivo 843 52 a = negativo 54 797 b = positivo IBk E un classificatore K-Nearest Neighbour. Estende IB1 usando una misura di distanza per trovare le k-istanze di training più vicine all istanza-test considerata. Questo algoritmo non ha una fase di training, i records esempio sono semplicemente immagazzinati. Nella fase di testing, un record non classificato è comparato con tutti i records immagazzinati fino a che si trova quello più vicino. Il record nuovo viene assegnato alla stessa classe di quello più vicino. Un estensione di questo classificatore è di usare più di un nearest neighbour, cosicché la class label sia calcolata in dipendenza da parecchi neighbours. Anche IBk, come il precedente IB1, ha data la miglior performance in assoluto tra tutti i classificatori adoperati con una percentuale del 93.93% nell esperimento condotto con il metodo della Cross-validation a 10 folds senza filtro di discretizzazione; d altro canto, IBk e IB1 sono molto simili tra loro e nel nostro esperimento, eseguito con parametri di default, il valore di k è settato ad 1 come per IB1. Anche in questo caso la percentuale di errore commessa nel classificare le istanze sbagliate è equivalente per entrambe le categorie proteiche. Anche nei
19 restanti esperimenti le percentuali di classificazioni corrette si mantengono sempre superiori all 88.89%. Per questo classificatore, abbiamo provato a variare anche il valore dei k-nearest neighbour portandolo da 1 a 2, 5 e 12; la percentuale delle istanze correttamente classificate però è stata inferiore a quella dei corrispondenti esperimenti con i parametri di default (tra 88.89% e 91.81%). Anche in questo caso, l aggiunta del Bagging non ha migliorato il risultato. IBk cross-validation: 10 folds senza filtro Scheme: weka.classifiers.ibk -K 1 -W 0 Test mode: 10-fold cross-validation Correctly Classified Instances 1640 93.929 % Incorrectly Classified Instances 106 6.071 % Kappa statistic 0.8785 Mean absolute error 0.0613 Root mean squared error 0.2462 Relative absolute error 12.2615 % Root relative squared error 49.2634 % Total Number of Instances 1746 0.942 0.063 0.94 0.942 0.941 negativo 0.937 0.058 0.939 0.937 0.938 positivo 843 52 a = negativo 54 797 b = positivo Id3 E un classificatore che costruisce un albero di decisione. Riconosce solo attributi nominali. Quindi, è necessario applicare un filtro di discretizzazione per poterlo usare con il nostro data set in cui gli attributi sono numerici. Questo classificatore non ha mai dato una buona performance poiché non è mai riuscito a classificare tutte le istanze (circa il 5-7.4% delle istanze non sono mai state classificate).
20 Id3 cross-validation: 10 folds con filtro di discretizzazione Scheme: weka.classifiers.filteredclassifier -B weka.classifiers.id3 -F "weka.filters.discretizefilter -B 10 -R first-last" Test mode: 10-fold cross-validation Correctly Classified Instances 1392 79.7251 % Incorrectly Classified Instances 267 15.2921 % Kappa statistic 0.6773 Mean absolute error 0.1529 Root mean squared error 0.3911 Relative absolute error 32.2198 % Root relative squared error 80.2885 % UnClassified Instances 87 4.9828 % Total Number of Instances 1746 0.858 0.182 0.836 0.858 0.847 negativo 0.818 0.142 0.842 0.818 0.83 positivo 740 122 a = negativo 145 652 b = positivo J48J48 L idea di questo algoritmo è di formare un albero di decisione attraverso il frazionamento dei dataset in pezzettini sempre più piccoli. Poi si può decidere come classificare un record seguendo l albero finché si arriva all estremità, dove si trova quale classe abbiamo. Con questo classificatore abbiamo ottenuto delle performance di classificazione molto buone con percentuali di istanze correttamente classificate superiori in generale a circa l 83% e con una punta massima del 90.74% usando il metodo Hold-out senza filtro con Bagging (l aggiunta del Bagging migliora del 5.22% la performance di J48J48 rispetto allo equivalente esperimento che è stato eseguito senza). Considerando tutti gli esperimenti, la distribuzione delle istanze non classificate in maniera corretta è abbastanza equa tra le due classi negativa e positiva.
21 J48J48+Bagging Hold-out: 66 % senza filtro Scheme: weka.classifiers.bagging -S 1 -I 10 -P 100 -W weka.classifiers.j48.j48 -- -C 0.25 -M 2 Test mode: split 66% train, remainder test Correctly Classified Instances 539 90.7407 % Incorrectly Classified Instances 55 9.2593 % Kappa statistic 0.8146 Mean absolute error 0.1558 Root mean squared error 0.2675 Relative absolute error 31.1819 % Root relative squared error 53.5343 % Total Number of Instances 594 0.906 0.091 0.915 0.906 0.91 negativo 0.909 0.094 0.9 0.909 0.904 positivo 279 29 a = negativo 26 260 b = positivo J48PART Classe per generare una PART decision list. Induce regole if-then per le istanze di training date. PART ottiene regole da alberi di decisione costruiti parzialmente. La performance di J48Part è stata molto buona in quasi tutte le prove con un valore minimo di istanze correttamente classificate pari all 82.76% ed un valore massimo pari al 93.77%, che si è avuto con il metodo Hold-out 66% senza filtro e con Bagging. Buona anche la ripartizione tra le due classi delle istanze non correttamente classificate. J48Part+Bagging Hold-out: 66 % senza filtro Scheme: weka.classifiers.bagging -S 1 -I 10 -P 100 -W weka.classifiers.j48.part -- -C 0.25 -M 2 Test mode: split 66% train, remainder test Correctly Classified Instances 557 93.771 % Incorrectly Classified Instances 37 6.229 % Kappa statistic 0.8755 Mean absolute error 0.1393
22 Root mean squared error 0.2455 Relative absolute error 27.8759 % Root relative squared error 49.1278 % Total Number of Instances 594 0.919 0.042 0.959 0.919 0.939 negativo 0.958 0.081 0.916 0.958 0.937 positivo 283 25 a = negativo 12 274 b = positivo KernelDensity E un classificatore kernel density molto semplice. KernelDensity è un ottimo classificatore perché in tutti gli esperimenti considerati ha sempre dato percentuali di classificazione superiori al 90.74% con anche un ottima distribuzione delle istanze non classificate correttamente tra le due classi proteiche negativa e positiva. La performance migliore si è ottenuta con il metodo della Cross-validation a 10 folds senza filtro di discretizzazione, dove si è raggiunta una percentuale del 93.64% di istanze correttamente classificate. Il Bagging non è stato applicato perché la classificazione diventava molto costosa in termini di tempo. KernelDensity cross-validation: 10 folds senza filtro Scheme: weka.classifiers.kerneldensity Test mode: 10-fold cross-validation Correctly Classified Instances 1635 93.6426 % Incorrectly Classified Instances 111 6.3574 % Kappa statistic 0.8728 Mean absolute error 0.0624 Root mean squared error 0.2453 Relative absolute error 12.4835 % Root relative squared error 49.0782 % Total Number of Instances 1746 0.935 0.062 0.94 0.935 0.938 negativo 0.938 0.065 0.932 0.938 0.935 positivo
23 837 58 a = negativo 53 798 b = positivo K-Star K-Star è un classificatore basato sull istanza, cioè la classe di un istanza di test è basata sulla classe di quelle istanze di training simili ad essa. Come determinato da alcune funzioni di similarità. L assunzione di classificatori instance-based come K-Star, IB1, PEBLS e altri è che istanze simili avranno classi simili. Anche K-Star si è rivelato un ottimo classificatore e la sua performance è sempre stata superiore al 90.57%. La percentuale più alta di istanze correttamente classificate si è ottenuta con Cross-validation 10 folds senza filtro dove si è raggiunto il valore di 93.07%. Molto buona anche la precision (0.94 per negativo e 0.92 per positivo). Anche per K-Star l uso del Bagging diventava troppo costoso in termini di tempo. K-Star cross-validation: 10 folds senza filtro Scheme: weka.classifiers.kstar.kstar -B 20 -M a Test mode: 10-fold cross-validation Correctly Classified Instances 1625 93.0699 % Incorrectly Classified Instances 121 6.9301 % Kappa statistic 0.8614 Mean absolute error 0.07 Root mean squared error 0.2473 Relative absolute error 13.9989 % Root relative squared error 49.4692 % Total Number of Instances 1746 0.926 0.065 0.938 0.926 0.932 negativo 0.935 0.074 0.923 0.935 0.929 positivo 829 66 a = negativo 55 796 b = positivo
24 Naive Bayes Simple E un semplice classificatore Naive Bayes. Gli attributi numerici sono modellati attraverso una distribuzione normale. Questo classificatore ha dato percentuali di classificazioni corrette comprese tra circa l 82% e l 84%. La sua performance migliore è pari a 84.34% ed è stata ottenuta con Hold-out 66% e filtro di discretizzazione. In linea generale, prevalgono gli errori di classificazione a carico delle istanze della classe positiva. Naive Bayes Simple Hold-out: 66 % con filtro di discretizzazione Scheme: weka.classifiers.filteredclassifier -B weka.classifiers.naivebayessimple -F "weka.filters.discretizefilter -R firstlast" Test mode: split 66% train, remainder test Correctly Classified Instances 501 84.3434 % Incorrectly Classified Instances 93 15.6566 % Kappa statistic 0.6896 Mean absolute error 0.158 Root mean squared error 0.3902 Relative absolute error 31.6255 % Root relative squared error 78.0727 % Total Number of Instances 594 0.718 0.021 0.974 0.718 0.826 negativo 0.979 0.282 0.763 0.979 0.858 positivo 221 87 a = negativo 6 280 b = positivo Naive Bayes E un classificatore NaiveBayes che usa un estimator classes. I valori precisi dell estimatore numerico sono scelti in base all analisi dei dati di training. Naive Bayes implementa il classificatore probabilistico Naive Bayesian. Di default si usa la distribuzione normale per modellare attributi numerici; comunque, l opzione k istruisce il classificatore ad usare invece il kernel density estimator. Questo può migliorare la performance. Il classificatore NaiveBayes in Weka può manipolare
25 solo circa 7.000-record dei data set di training e di test. Il tempo di esecuzione dell esperimento con l opzione k è più lungo di quello con la distribuzione normale, ma la correttezza è maggiore. Per quanto riguarda il classificatore Naive Bayes, le percentuali di classificazione sono state comprese tra circa l 82 e l 84%. La miglior performance si è ottenuta con il metodo Hold-out 66% con applicato un filtro di discretizzazione ed è stata pari a 84.34%. Anche con il settaggio dell opzione Use Kernel Estimator uguale a true, i risultati non hanno mai superato l 84%. Come per in NBS, vengono commessi più errori nel classificare le istanze della class label positiva. Naive Bayes Hold-out: 66 % con filtro di discretizzazione Scheme: weka.classifiers.filteredclassifier -B "weka.classifiers.naivebayes " -F "weka.filters.discretizefilter -R first-last" Test mode: split 66% train, remainder test Correctly Classified Instances 501 84.3434 % Incorrectly Classified Instances 93 15.6566 % Kappa statistic 0.6896 Mean absolute error 0.158 Root mean squared error 0.3902 Relative absolute error 31.6255 % Root relative squared error 78.0727 % Total Number of Instances 594 0.718 0.021 0.974 0.718 0.826 negativo 0.979 0.282 0.763 0.979 0.858 positivo 221 87 a = negativo 6 280 b = positivo Naive Bayes Hold-out: 66 % senza filtro KernellEstimator: True (-k) Scheme: weka.classifiers.naivebayes -K Test mode: split 66% train, remainder test Correctly Classified Instances 499 84.0067 % Incorrectly Classified Instances 95 15.9933 % Kappa statistic 0.6828 Mean absolute error 0.1574 Root mean squared error 0.388 Relative absolute error 31.5084 %
26 Root relative squared error 77.6467 % Total Number of Instances 594 0.718 0.028 0.965 0.718 0.823 negativo 0.972 0.282 0.762 0.972 0.854 positivo 221 87 a = negativo 8 278 b = positivo OneR E un classificatore 1R. OneR produce semplici regole basate su un solo attributo. Il classificatore OneR ha dato percentuali di classificazione che partono da un minimo di circa il 75% fino ad un valore massimo di 81.21% con il metodo Holdout 50% senza filtro di discretizzazione. Il valore della precision è superiore per la class label negativa (0.91) rispetto a quella positiva (0.75) dove il numero delle istanze non correttamente classificate è di gran lunga superiore in quasi tutti gli esperimenti condotti. OneR Hold-out: 50 % senza filtro Scheme: weka.classifiers.oner -B 6 Test mode: split 50% train, remainder test Correctly Classified Instances 709 81.2142 % Incorrectly Classified Instances 164 18.7858 % Kappa statistic 0.6246 Mean absolute error 0.1879 Root mean squared error 0.4334 Relative absolute error 37.5776 % Root relative squared error 86.6041 % Total Number of Instances 873 0.694 0.069 0.91 0.694 0.788 negativo 0.931 0.306 0.751 0.931 0.832 positivo 304 134 a = negativo 30 405 b = positivo
27 PRISM Per usare Prism è sempre necessario utilizzare il filtro di discretizzazione; considera solo attributi numerici. Gli esperimenti condotti con Prism senza l applicazione del Bagging hanno dato tutti pessimi risultati in quanto questo classificatore non è mai stato in grado di classificare tutte le istanze (dal 4.50 al 5.61% di istanze non classificate). Questo problema è stato risulto con l uso del Bagging che ha migliorato notevolmente la performance di Prism permettendogli di classificare tutte le istanze del data set con una percentuale di istanze correttamente classificate pari all 85.39% come massimo valore raggiunto con la Cross-validation a 10 folds e filtro di discretizzazione. Prism commette una percentuale di errore maggiore nel classificare le istanze della class label negativa. Prism cross-validation: 10 folds con filtro di discretizzazione Scheme: weka.classifiers.filteredclassifier -B weka.classifiers.prism -F "weka.filters.discretizefilter -R first-last" Test mode: 10-fold cross-validation Correctly Classified Instances 1447 82.8751 % Incorrectly Classified Instances 217 12.4284 % Kappa statistic 0.7385 Mean absolute error 0.1243 Root mean squared error 0.3525 Relative absolute error 26.0936 % Root relative squared error 72.2342 % UnClassified Instances 82 4.6964 % Total Number of Instances 1746 0.937 0.201 0.829 0.937 0.88 negativo 0.799 0.063 0.925 0.799 0.858 positivo 794 53 a = negativo 164 653 b = positivo Prism+Bagging cross-validation: 10 folds con filtro di discretizzazione Scheme: weka.classifiers.filteredclassifier -B "weka.classifiers.bagging - S 1 -I 10 -P 100 -W weka.classifiers.prism --" -F "weka.filters.discretizefilter -R first-last" Test mode: 10-fold cross-validation
28 Correctly Classified Instances 1491 85.3952 % Incorrectly Classified Instances 255 14.6048 % Kappa statistic 0.7062 Mean absolute error 0.1639 Root mean squared error 0.3243 Relative absolute error 32.7929 % Root relative squared error 64.8739 % Total Number of Instances 1746 0.955 0.253 0.799 0.955 0.87 negativo 0.747 0.045 0.941 0.747 0.833 positivo 855 40 a = negativo 215 636 b = positivo AODE AODE è un classificatore di tipo bayesiano e realizza una classificazione altamente accurata. Occorre applicare un filtro di discretizzazione perché gli attributi devono essere nominali. Fa parte della versione nuova di Weka (3-4). Negli esperimenti che abbiamo condotto con questo classificatore, abbiamo ottenuto delle performance di classificazione comprese tra circa l 82.70% come valore minimo e l 86.94% come valore massimo (questa performance è stata ottenuta con l uso del Bagging e cross-validation 10 folds con filtro di discretizzazione). Esiste una certa dispartità generale nella distribuzione delle istanze non correttamente classificate tra le due class label (più FP per la classe positiva rispetto a quelli della negativa). AODE+Bagging cross-validation:10 folds con filtro di discretizzazione Scheme: weka.classifiers.meta.bagging -P 100 -S 1 -I 10 -W weka.classifiers.meta.filteredclassifier -- -W "weka.classifiers.bayes.aode -F 0" -F "weka.filters.supervised.attribute.discretize -R first-last" Test mode: 10-fold cross-validation Correctly Classified Instances 1518 86.9416 % Incorrectly Classified Instances 228 13.0584 % Kappa statistic 0.7399 Mean absolute error 0.1476 Root mean squared error 0.3223 Relative absolute error 29.5323 %
29 Root relative squared error 64.4837 % Total Number of Instances 1746 0.783 0.04 0.954 0.783 0.86 negativo 0.96 0.217 0.808 0.96 0.878 positivo 701 194 a = negativo 34 817 b = positivo JRip Questa classe implementa un propositional rule learner, Repeated Incremental Pruning to Produce Error Reduction (RIPPER) che è stato proposto da William W. Cohen come ottimizzazione della versione IREP. Anche questo classificatore fa parte della versione di Weka nuova. Anche JRip ha dato dei risultati abbastanza buoni con performance comprese tra circa l 82.50% e l 87.20%; quest ultima è la miglior prestazione ed è stata ottenuta con il metodo Hold Out 66% senza filtro. Non sempre abbiamo una distribuzione omogenea dei FP tra le due classi. JRip Hold-out: 66 % senza filtro Scheme: weka.classifiers.rules.jrip -F 3 -N 2.0 -O 2 -S 1 Test mode: split 66% train, remainder test Correctly Classified Instances 518 87.2054 % Incorrectly Classified Instances 76 12.7946 % Kappa statistic 0.7427 Mean absolute error 0.1676 Root mean squared error 0.3327 Relative absolute error 33.4808 % Root relative squared error 66.4392 % Total Number of Instances 594 0.862 0.116 0.901 0.862 0.881 negativo 0.884 0.138 0.84 0.884 0.861 positivo 282 45 a = negativo 31 236 b = positivo
30 VFI Classificazione attraverso voting feature intervals. Gli intervalli sono costruiti intorno a ciascuna classe per ciascun attributo. I calcoli della classe sono registrati per ogni intervallo su ogni attributo. La classificazione avviene attraverso votazione. E stato aggiunto un semplice schema per pesare gli attributi. Il peso maggiore è assegnato agli intervalli più confidenti, dove la confidenza è una funzione dell entropia. I valori percentuali della performance di VFI nel classificare le istanze in modo corretto sono compresi tra un minimo di circa 77% ed un massimo di 84%; quest ultimo valore è stato ottenuto con il metodo Hold-out 66% più filtro di discretizzazione e Bagging. Il Bagging ha migliorato solo dello 0.5% la performance di VFI rispetto al corrispondente esperimento senza, quindi il miglioramento della performance è dovuto più che altro al filtro di discretizzazione (negli esperimenti con Hold-out 66% senza e con filtro, l uso del filtro migliora la performance di VFI del 4.55%). VFI+Bagging Hold-out: 66 % con filtro di discretizzazione Scheme: weka.classifiers.filteredclassifier -B "weka.classifiers.bagging - S 1 -I 10 -P 100 -W weka.classifiers.vfi -- -B 0.6" -F "weka.filters.discretizefilter -R first-last" Test mode: split 66% train, remainder test Correctly Classified Instances 499 84.0067 % Incorrectly Classified Instances 95 15.9933 % Kappa statistic 0.6823 Mean absolute error 0.3465 Root mean squared error 0.3873 Relative absolute error 69.3435 % Root relative squared error 77.4918 % Total Number of Instances 594 0.74 0.052 0.938 0.74 0.828 negativo 0.948 0.26 0.772 0.948 0.851 positivo 228 80 a = negativo 15 271 b = positivo
31 ADTree Negli esperimenti condotti con il classificatore ADTree, fin tanto che non abbiamo usato il Bagging, abbiamo ottenuto dei valori percentuali di istanze classificate correttamente compresi tra 81.71% e 85.86%. Con l utilizzo del Bagging invece, la performance di questo classificatore ha raggiunto un valore massimo di 88.05% con il metodo Hold-out 66% senza filtro di discretizzazione; in questo esperimento diminuisce anche la percentuale degli errori commessi nel classificare le istanze della class label positiva. ADTree+Bagging Hold-out: 66 % senza filtro Scheme: weka.classifiers.bagging -S 1 -I 10 -P 100 -W weka.classifiers.adtree.adtree -- -B 10 -E -3 Test mode: split 66% train, remainder test Correctly Classified Instances 523 88.0471 % Incorrectly Classified Instances 71 11.9529 % Kappa statistic 0.762 Mean absolute error 0.2279 Root mean squared error 0.3082 Relative absolute error 45.6139 % Root relative squared error 61.6669 % Total Number of Instances 594 0.808 0.042 0.954 0.808 0.875 negativo 0.958 0.192 0.823 0.958 0.885 positivo 249 59 a = negativo 12 274 b = positivo SMO Il classificatore SMO implementa il sequential minimal optimization algorithm di Platt. Invece di essere uno dei metodi più veloci per il learning support vector machine, l ottimizzazione minimale sequenziale è spesso lenta nel convergere verso una soluzione, particolarmente quando i dati non sono linearmente separabili. La performance di classificazione di SMO ha dato percentuali superiori all 84.65% con il massimo valore pari all 86.88% ottenuto con il metodo della
32 Cross-validatione 3 folds e filtro di discretizzazione. Anche per questo classificatore non c è una distribuzione omogenea delle istanze non classificate correttamente tra le due class labels. SMO cross-validation: 3 folds con filtro di discretizzazione Scheme: weka.classifiers.filteredclassifier -B "weka.classifiers.smo -C 1.0 -E 1.0 -A 1000003 -T 0.0010 -P 1.0E-12" -F "weka.filters.discretizefilter -R first-last" Test mode: 3-fold cross-validation Correctly Classified Instances 1517 86.8843 % Incorrectly Classified Instances 229 13.1157 % Kappa statistic 0.738 Mean absolute error 0.2117 Root mean squared error 0.3159 Relative absolute error 42.3746 % Root relative squared error 63.1943 % Total Number of Instances 1746 0.839 0.1 0.898 0.839 0.868 negativo 0.9 0.161 0.842 0.9 0.87 positivo 751 144 a = negativo 85 766 b = positivo Nella pagina successiva viene mostrata una tabella che riassume le migliori performance di tutti i classificatori che sono stati presi in esame e i metodi con cui sono state ottenute. I migliori in assoluto sono stati IB1 e IBK con il 93.93%, seguiti da J48Part, KernelDensity e K-Star che hanno comunque dato risultati superiori al 93%. Come possiamo osservare, tra i primi cinque migliori risultati prevale il metodo della cross-validation rispetto a quello dell Hold Out. Come abbiamo già visto in precedenza, IB1 e IBk sono classificatori che utilizzano un modello di classificazione basato su esempi: il Nearest Neighbour, di cui possiamo vedere ora un po più in dettaglio le caratteristiche. K-Nearest Neighbour Questo tipo di classificatori memorizzano tutti gli esempi del Training set ed assegnano la classe ad un istanza valutando la somiglianza con gli esempi memorizzati la cui classe è nota.
33 ogni istanza corrisponde ad un punto n-dimensionale il vicinato di una nuova istanza (punto) è costituito dalle k-istanze (punti) del training set che sono meno distanzi da essa dipende dalla funzione di distanza che è stata scelta, per esempio distanza Euclidea sempre per quanto riguarda la distanza, se gli attributi sono nominali, si assegna 0 se i valori sono uguali, 1 se i valori sono differenti, mentre se gli attributi sono numerici, si fa una differenza l apprendimento è veloce in quanto il Training set è solo memorizzato; sono detti anche classificatori lazy in Weka. Tabella che mostra le migliori performance di classificazione di tutti i classificatori considerati e il modo con cui sono state ottenute. CLASSIFICATORE Metodo usato Percentuale di istanze correttamente classificate IB1 C.V. 10folds 93.93% IBk C.V. 10folds 93.93% J48Part Hold Out 66%+Bagging 93.77% KernelDensity C.V. 10folds 93.64% K-Star C.V. 10folds 93.07% J48J48 Hold Out 66%+Bagging 90.74% ADTree Hold Out 66%+Bagging 88.05% DecisionStump Hold Out 80%+LogitBoost 88% JRip Hold Out 66% 87.20% DecisionTable Hold Out 66% ; Use IBk True 87.04% AODE C.V. 10folds+Bagging+Filtro 86.94% SMO C.V. 3folds+Filtro 86.88% Prism C.V. 10folds+Bagging+Filtro 85.39% Naive Bayes Simple Hold Out 66%+Filtro Discretize 84.34% Naive Bayes Hold Out 66%+Filtro Discretize 84.34% VFI Hold Out 66%+Bagging+Filtro 84% OneR Hold Out 50% 81.21% HyperPipes Hold Out 66%+Bagging 62.96% ZeroR Hold Out 66% 51.85% Id3 - presenza di istanze non classificate