+ All Categories
Home > Documents > Classificazione di un data set di proteine con Weka · 2011. 3. 30. · la grandezza ed il numero...

Classificazione di un data set di proteine con Weka · 2011. 3. 30. · la grandezza ed il numero...

Date post: 14-Feb-2021
Category:
Upload: others
View: 0 times
Download: 0 times
Share this document with a friend
33
MODELLI PROBABILISTICI Classificazione di un data set di proteine con Weka SOFIA CIVIDINI
Transcript
  • 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 semi-

    automatico 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.

    === Detailed Accuracy By Class === TP Rate FP Rate Precision Recall F-Measure Class 0.631 0.012 0.983 0.631 0.769 negativo 0.988 0.369 0.718 0.988 0.832 positivo === Confusion Matrix === a b

  • 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:

    � 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

    Figura 1; versione 3-2

  • 7

    successivamente nella sezione risultati). Non è stato necessario sottoporre il data

    set a Preprocessing poiché non conteneva rumore o casi mancanti.

    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).

    Questo è il nostro data set con 27 attributi, l’ultimo dei quali rappresenta la classe. Il data set contiene 1746 istanze

    Siamo nella sezione di Preprocess

    Figura 2

  • 8

    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 3

    Selezionando un attributo, a destra, si possono osservare le informazioni statistiche che lo riguardano come : massimo, minimo, media e deviazione standard.

    Figura 4

  • 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 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).

    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

  • 11

    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.

    In Weka, esiste anche un’opzione che dà la possibilità di visualizzare l’albero di

    decisione costruito dal classificatore.

    Figura 7

  • 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:

    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

    11. K-Star

    12. Naive Bayes Simple

    13. Naive Bayes

    14. OneR

    15. Prism

    16. AODE

    17. JRip

    18. VFI

    19. ADTree

    20. SMO

    1. ZeroR

    2. DecisionStump

    3. DecisionTable

    4. HyperPipes

    5. IB1

    6. IBk

    7. Id3

    8. J48J48

    9. J48Part

    10. KernelDensity

  • 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: weka.classifiers.ZeroR Test mode: 10-fold cross-validation === Summary === 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 === Detailed Accuracy By Class === TP Rate FP Rate Precision Recall F-Measure Class 1 1 0.513 1 0.678 negativo 0 0 0 0 0 positivo === Confusion Matrix === a b

  • 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 === Summary === 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

    === Detailed Accuracy By Class === TP Rate FP Rate Precision Recall F-Measure Class 0.809 0.042 0.955 0.809 0.876 negativo 0.958 0.191 0.821 0.958 0.884 positivo === Confusion Matrix === a b

  • 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 === Summary === 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 === Detailed Accuracy By Class === TP Rate FP Rate Precision Recall F-Measure Class 0.864 0.122 0.884 0.864 0.874 negativo 0.878 0.136 0.857 0.878 0.867 positivo === Confusion Matrix === a b

  • 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 === Summary === 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 === Detailed Accuracy By Class === TP Rate FP Rate Precision Recall F-Measure Class 0.981 0.748 0.585 0.981 0.733 negativo 0.252 0.019 0.923 0.252 0.396 positivo === Confusion Matrix === a b

  • 18

    IB1 cross-validation: 10 folds senza filtro Scheme: weka.classifiers.IB1 Test mode: 10-fold cross-validation === Summary === 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 __________________________________________ === Detailed Accuracy By Class === TP Rate FP Rate Precision Recall F-Measure Class 0.942 0.063 0.94 0.942 0.941 negativo 0.937 0.058 0.939 0.937 0.938 positivo === Confusion Matrix === a b

  • 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 === Summary === 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 === Detailed Accuracy By Class === TP Rate FP Rate Precision Recall F-Measure Class 0.942 0.063 0.94 0.942 0.941 negativo 0.937 0.058 0.939 0.937 0.938 positivo === Confusion Matrix === a b

  • 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 === Summary === 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 === Detailed Accuracy By Class === TP Rate FP Rate Precision Recall F-Measure Class 0.858 0.182 0.836 0.858 0.847 negativo 0.818 0.142 0.842 0.818 0.83 positivo === Confusion Matrix === a b

  • 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 === Summary === 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 === Detailed Accuracy By Class === TP Rate FP Rate Precision Recall F-Measure Class 0.906 0.091 0.915 0.906 0.91 negativo 0.909 0.094 0.9 0.909 0.904 positivo === Confusion Matrix === a b

  • 22

    Root mean squared error 0.2455 Relative absolute error 27.8759 % Root relative squared error 49.1278 % Total Number of Instances 594 === Detailed Accuracy By Class === TP Rate FP Rate Precision Recall F-Measure Class 0.919 0.042 0.959 0.919 0.939 negativo 0.958 0.081 0.916 0.958 0.937 positivo === Confusion Matrix === a b

  • 23

    === Confusion Matrix === a b

  • 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 first-last" Test mode: split 66% train, remainder test === Summary === 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 === Detailed Accuracy By Class === TP Rate FP Rate Precision Recall F-Measure Class 0.718 0.021 0.974 0.718 0.826 negativo 0.979 0.282 0.763 0.979 0.858 positivo === Confusion Matrix === a b

  • 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 === Summary === 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 === Detailed Accuracy By Class === TP Rate FP Rate Precision Recall F-Measure Class 0.718 0.021 0.974 0.718 0.826 negativo 0.979 0.282 0.763 0.979 0.858 positivo === Confusion Matrix === a b

  • 26

    Root relative squared error 77.6467 % Total Number of Instances 594 === Detailed Accuracy By Class === TP Rate FP Rate Precision Recall F-Measure Class 0.718 0.028 0.965 0.718 0.823 negativo 0.972 0.282 0.762 0.972 0.854 positivo === Confusion Matrix === a b

  • 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 === Summary === 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 === Detailed Accuracy By Class === TP Rate FP Rate Precision Recall F-Measure Class 0.937 0.201 0.829 0.937 0.88 negativo 0.799 0.063 0.925 0.799 0.858 positivo === Confusion Matrix === a b

  • 28

    === Summary === 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 === Detailed Accuracy By Class === TP Rate FP Rate Precision Recall F-Measure Class 0.955 0.253 0.799 0.955 0.87 negativo 0.747 0.045 0.941 0.747 0.833 positivo === Confusion Matrix === a b

  • 29

    Root relative squared error 64.4837 % Total Number of Instances 1746 === Detailed Accuracy By Class === TP Rate FP Rate Precision Recall F-Measure Class 0.783 0.04 0.954 0.783 0.86 negativo 0.96 0.217 0.808 0.96 0.878 positivo === Confusion Matrix === a b

  • 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 === Summary === 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 === Detailed Accuracy By Class === TP Rate FP Rate Precision Recall F-Measure Class 0.74 0.052 0.938 0.74 0.828 negativo 0.948 0.26 0.772 0.948 0.851 positivo === Confusion Matrix === a b

  • 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 === Summary === 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 === Detailed Accuracy By Class === TP Rate FP Rate Precision Recall F-Measure Class 0.808 0.042 0.954 0.808 0.875 negativo 0.958 0.192 0.823 0.958 0.885 positivo === Confusion Matrix === a b

  • 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 === Summary === 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 === Detailed Accuracy By Class === TP Rate FP Rate Precision Recall F-Measure Class 0.839 0.1 0.898 0.839 0.868 negativo 0.9 0.161 0.842 0.9 0.87 positivo === Confusion Matrix === a b

  • 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


Recommended