1 Introduzione
2 Introduzione alle tecniche di data mining
3 La piattaforma WEKA
4 Preprocessing dei dati
5 Classificazione di dati proteomici utilizzando Weka:Risultati sperimentali
6 Conclusioni
Appendice
Bibliografia
Ringraziamenti
Capitolo 1
Introduzione
Negli ultimi vent'anni, le scoperte nella biologia molecolare e gli strumenti disponibili per la ricerca in questo campo hanno permesso un rapido sequenziamento di grandi porzioni dei genomi di molte specie. Infatti, alcuni genomi batterici, tanto quanto quelli di alcuni eucarioti semplici (e.g., Saccharomyces cerevisiae) ed eucarioti più complessi (C. elegans and Drosophila) sono stati completamente sequenziati. Il progetto del genoma umano, costruito in modo da sequenziare tutti e 24 i cromosomi, sta anch'esso proseguendo e una prima bozza è stata completata nella primavera del 2000.
Famosi database di sequenza, come GenBank e EMBL, stanno crescendo in maniera esponenziale. Questa mole di informazioni ha fatto nascere il bisogno di un attento immagazzinamento, organizzazione e indicizzazione delle informazioni di sequenza. La scienza dell'informazione è stata applicata alla biologia per produrre la disciplina chiamata bioinformatica.
1.1 Bioinformatica
La bioinformatica consiste nella registrazione, annotazione, immagazzinamento, analisi e ricerca/recupero di sequenze di acido nucleico (geni e RNA), sequenze proteiche e informazioni strutturali. Questo include database di sequenze e informazioni strutturali così come metodi per accedere, cercare, visualizzare e recuperare le informazioni. I dati di sequenza possono essere usati per fare predizioni delle funzioni dei geni recentemente identificati, stimare distanze evoluzionali nella ricostruzione filogenetica, determinare i siti attivi degli enzimi, per annoverare solo qualche uso.
1.2 Proteomica
La proteomica è definita come l’analisi sistematica in larga scala dell’espressione proteica sotto stato normale e perturbato (stressato, malato, e/o drogato) e generalmente riguarda la separazione, identificazione e caratterizzazione di tutte le proteine in un campione di cellula o di tessuto. Il significato del termine è stato anche espanso ed è ora usato più largamente per fare riferimento all’approccio di analisi di quali proteine un particolare tipo di cellula sintetizza, quanto ne sintetizza, come le cellule modificano le proteine dopo la sintesi e come tutte queste proteine interagiscono.
La proteomica non include solo l’identificazione e quantificazione delle proteine, ma anche la determinazione della loro localizzazione, modifiche, interazioni, attività e, infine, la loro funzione. Inizialmente comprendente solo l’elettroforesi su gel bi-dimensionale (2D) per la separazione e identificazione delle proteine, la proteomica ora fa capo a ogni procedura che caratterizza grandi insiemi di proteine. La crescita esplosiva di questo campo è guidata da molte forze: la genomica e la rivelazione di molte nuove proteine; potenti tecnologie proteiche, come i recenti approcci alla spettrografia di massa e gli innovativi strumenti computazionali e i metodi per processare, analizzare, e interpretare immense quantità di dati.
Il fulcro della ricerca nella biologia molecolare, nel passato, è stato orientato intorno ai geni invece che alle proteine. Ciò non vuol dire che i ricercatori non si siano dedicati allo studio delle proteine, ma piuttosto che gli approcci e le tecniche più comunemente usati riguardavano prima lo studio degli acidi nucleici e più avanti quello delle proteine implicate.
La principale ragione di tutto ciò è che le tecnologie disponibili e le caratteristiche inerenti gli acidi nucleici, hanno fatto si che i geni fossero più semplici da analizzare e studiare. Questa situazione è cambiata recentemente e continua a cambiare grazie al fatto che nuovi, più potenti metodi sono stati sviluppati per analizzare sia gli acidi nucleici che le proteine. La maggioranza dei processi che avvengono in una cellula non sono causati dai geni, ma dalle proteine che essi codificano. Una malattia può sorgere quando un gene/proteina e sovra o sotto espresso o quando una mutazione in un gene risulta in una proteina malformata, o quando una mutazione post-traslazionale altera la funzione di una proteina. Quindi per comprendere veramente un processo biologico, le proteine rilevanti devono essere studiate direttamente. Ma ci sono più sfide nello studiare proteine che nello studiare i geni, a causa della loro complessa struttura tridimensionale che è connessa alla loro funzione.
1.3 Spettrometria di massa
Vi è una vasta gamma di tecnologie usate nella proteomica, ma il paradigma centrale è stato l’uso dell’elettroforesi bidimensionale (2D-GE) seguita della spettrometria di massa (MS). 2D-GE è usata per separare le proteine tramite il punto isoelettrico e poi la dimensione.
Le proteine individuali sono successivamente rimosse dal gel e preparate, poi analizzate dall’MS per determinare la loro identità e caratteristiche. Ci sono molti tipi di analizzatori di massa usati nella proteomica che includono quadrupoli, time-of-flight (TOF) e ion trap. Ognuno di questi ha le sue proprie capacità. Il recente sviluppo di tecniche a ionizzazione morbida, il cui nome è matrix-assisted laser desorption ionization (MALDI) e electro-spray ionization (ESI), ha permesso di introdurre grandi biomolecole nell’analizzatore di massa senza decomporre completamente la loro struttura o perfino lasciandole completamente integre, in relazione alla progettazione dell’esperimento. Più avanti verrà trattato nello specifico lo strumento di spettrometria Maldi-TOF.
1.4 Obiettivi della tesi
Obiettivo del lavoro di tesi e la sperimentazione di tecniche di classificazione di data mining su dati proteomici generati da spettrometro di massa il dataset che verrà analizzato è un dataset contenente dati fittizi. Il lavoro è cosi organizzato: inizialmente verrà descritto il processo di data mining e degli alberi decisionali, strumenti che acquistano sempre maggiore importanza nella classificazione di pattern proteomici, successivamente viene descritto il funzionamento della piattaforma WEKA, un software open source che permette un’analisi dei dati estremamente approfondita grazie alle numerose funzionalità presenti e soprattutto alla possibilità che esso offre di utilizzare le maggiori tecniche di data mining presenti. Inoltre negli obiettivi della tesi rientra anche l’implementazione di un modulo software che svolga una serie di operazioni di preprocessing utili alla successiva analisi con le tecniche di data mining di spettri provenienti da strumenti di spettrometria. Lo scopo principale dell’implementazione di questo modulo è quello di convertire spettri in forma grezza (raw) provenienti dagli spettrometri in un file di formato ARFF di modo che sia possibile trattare i dati con la piattaforma WEKA. Dopo questa prima fase di trasformazione dei dati si prosegue all’analisi del dataset ottenuto con la piattaforma WEKA utilizzando una serie di tecniche di data mining, nello specifico gli alberi decisionali, allo scopo di inferire dai campioni di natura biologica dei pattern che permettano di costruire un classificatore che dopo una fase di training riesca a distinguere la differenza tra le due classi delle istanze provenienti dai suddetti campioni.
Capitolo 2
Introduzione alle tecniche di data mining
Come già premesso nell’introduzione scopo della seguente tesi è quello di classificare i dati proteomici cercando dei pattern utili all’individuazione di informazioni nascoste. Gli strumenti utili per questa tipologia di analisi costituiscono una disciplina chiamata data mining.
Verrà posta particolare attenzione alla descrizione degli alberi decisionali poiché questo è il modello scelto per la sperimentazione sui dati spettrometrici.
Il data mining è un processo analitico studiato per esplorare i dati (di solito grandi quantità di dati) alla ricerca di pattern consistenti e/o relazioni sistematiche tra variabili e quindi validare i risultati applicando i pattern ottenuti a nuovi sottoinsiemi di dati. L’obiettivo ultimo del data mining è la predizione e il data mining predittivo è il tipo più comune di data mining e quello che ha le applicazioni commerciali più dirette.
Il data mining è una materia interdisciplinare relativamente recente e poggia le sue radici su vari campi di applicazione tra i quali l’intelligenza artificiale, la statistica, le basi di dati e il machine learning.
Come è possibile vedere nella figura il data mining è parte di un processo più ampio che ha il nome di Knowledge Discovery in Databases.

Figura 2.1 Processo di Knowledge Discoveries Databases
Non ci soffermeremo sulle fasi precedenti al data mining poiché non rientra
nello scopo di questa tesi ma verrà comunque fatto un breve cenno.
2.1 Data mining
2.1.1 Selezione e preprocessing
Questa sezione di solito inizia con la preparazione dei dati che può comportare la pulizia e la trasformazione dei dati, selezionare sottoinsiemi di record e, nel caso di dataset con un grande numero di attributi, adottare qualche metodo preliminare di selezione per portare il numero di attributi in un insieme gestibile(considerando il metodo statistico usato). Poi, in relazione alla natura del problema analitico, questo primo stadio può comportare da una semplice scelta di predittori per un modello di regressione lineare , all’elaborazione di analisi esplorative usando un’ampia varietà di metodi grafici e statistici in modo da identificare le variabili più rilevanti e determinare la complessità e/o la natura generale del modello che verrà preso in considerazione nel fase di data mining.
2.1.2 Processo di data mining
Il processo di data mining vero e proprio consiste nello studio di vari modelli e la scelta del migliore basato sulla loro performance predittiva.
Questa potrebbe sembrare un’operazione semplice, ma spesso e volentieri è un processo abbastanza complicato. Ci sono una varietà di tecniche sviluppate per raggiungere questo obiettivo molte delle quali sono basate su ciò che viene chiamato “valutazione competitiva dei modelli” cioè applicare modelli differenti allo stesso dataset e poi comparare la loro performance per scegliere il migliore. Queste tecniche che sono spesso considerate il cuore del data mining predittivo includono: bagging (votazione e media), boosting, stacking e meta-learning .
Parleremo più avanti dei vari modelli disponibili nel data mining ma è bene soffermarsi sui metodi che permettono la valutazione della bontà di un modello.
La stima dell’errore è un buon metodo per la verifica della bontà di un modello, bisogna fare una distinzione tra il training set e il test set, il dataset di training è quella parte del dataset completo che viene usata per allenare il classificatore. C’è da dire che le misure di errore sul dataset di training non sono dei buoni indicatori delle performance future del modello che si sta usando. Quando si fanno delle verifiche sul modello, insomma, si divide il dataset disponibile assegnando di solito ai 2/3 di questo il ruolo di training dataset e alla restante parte quello di test dataset .
Validazione incrociata
Se si ha solo una modesta quantità di dati per costruire il modello, una validazione semplice potrebbe portare a dei risultati errati perché l’insieme di dati usato per il training o il test potrebbe non essere rappresentativo. Ogni classe nel dataset dovrebbe essere rappresentata dalla giusta proporzione sia nel training set che nel test set. La validazione incrociata è un metodo che permette di usare tutti i dati disponibili. I dati sono divisi casualmente in due insiemi uguali per stimare l’accuratezza predittiva del modello. Prima, un modello viene costruito sul primo insieme e usato per predire i risultati sul secondo e calcolare il tasso di errore. Poi un modello è costruito sul secondo insieme e usato per predire i risultati nel primo insieme e calcolare di nuovo il tasso di errore. Quindi ci sono due stime di errore indipendenti con cui si può fare la media e dare una migliore stima della reale accuratezza del modello costruito su tutti i dati. Tipicamente, viene usata una validazione incrociata a 10 fold (partizioni). In questo metodo i dati sono divisi casualmente in 10 gruppi disgiunti.
Il processo induttivo di alcuni modelli come ad esempio degli alberi decisionali è abbastanza instabile, piccoli cambiamenti nei training set possono facilmente risultare nella scelta di un attributo differente a un nodo particolare, ciò implica che ci saranno delle istanze test per cui alberi decisionali applicati allo stesso training set produrranno risultati diversi.
Esistono alcune tecniche che combinano le decisioni di differenti modelli per produrne uno finale più robusto. Alcune di queste sono le seguenti:
Bagging (votazione, media)
Il concetto di bagging (votazione per la classificazione, media per il problemi di regressione) si applica all’area del data mining predittivo, per combinare le classificazioni predette da modelli multipli o dallo stesso tipo di modello applicato su dati differenti.
E’ usato anche per mettere in evidenza l’instabilità intrinseca dei risultati quando si applicano modelli complessi a dataset relativamente piccoli.
Boosting
Il concetto di boosting si applica all’area del data mining predittivo per generare modelli multipli o classificatori e derivare pesi per combinare le predizioni da questi modelli in una singola predizione.
Gli alberi di classificazione e regressione sono progettati per raggiungere la migliore accuratezza predittiva possible. Operativamente, la più accurata predizione è definita come la predizione con costi minimi. La nozione di costi è stata sviluppata come un modo di generalizzare l’idea che la migliore predizione ha il più basso rapporto di classificazioni sbagliate. Nella maggior parte delle applicazioni, il costo è misurato in termini di proporzioni di casi classificati erroneamente.
Costi di classificazione errata. Alcune volte è desiderabile una classificazione più accurata per alcune classi più che per altre per ragioni non correlate alle relative dimensioni della classe. A prescindere dalla frequenza relativa,i portatori di una malattia che sono contagiosi hanno bisogno di essere predetti più accuratamente che i portatori di una malattia che non è contagiosa per gli altri.
Se si assume che c’è una piccola perdita nell’evitare una persona non contagiosa ma c’è un grande rischio nel non evitare una persona contagiosa, dovrebbero essere specificati dei costi di classificazione errata più alti per classificare erroneamente un portatore contagioso come non contagioso che per classificare erroneamente una persona non contagiosa per una contagiosa.
Esistono una serie di misure utili a valutare i costi, tra le quali il numero di falsi positivi, il numero di falsi negativi, precision, recall, etc… .
Un falso positivo avviene quando il risultato è predetto scorrettamente come positivo invece è negativo, invece un falso negativo avviene quando un risultato è predetto scorrettamente come negativo invece è positivo.
La misura precision è uguale al rapporto tra il numero dei veri positivi e il numero dei veri positivi sommati ai falsi positivi.
La misura recall è uguale al rapporto tra il numero dei veri positivi e il numero dei veri positivi sommato ai falsi negativi.
Vi sono delle tecniche grafiche disponibili per valutare modelli di data mining conosciute come ROC. La curva ROC disegna il numero di positivi inclusi nell’insieme di dati sull’asse verticale, espressi come una percentuale del numero totale di positivi e sull’asse orizzontale il numero di negativi inclusi nell’insieme di dati espressi come percentuale del numero totale di negativi.

Figura 2.2 Curva di ROC
Analizzando un a curva ROC si possono ottenere interessanti informazioni:
1. Essa mostra il tradeoff tra la sensitività e la specificità (ogni aumento in sensitività sarà accompagnato da una diminuzione di specificità).
2. Quanto più la curva segue il bordo a sinistra e in alto dello spazio ROC, tanto più accurato è il test.
3. Quanto più la curva è vicina alla diagonale a 45 gradi dello spazio ROC, tanto meno accurato è il test.
4. L’inclinazione della linea tangente al punto di taglio dà il rapporto di probabilità per quel valore del test.
5. L’area sotto la curva è una misura di accuratezza.
2.2 Tecniche di data mining
Di seguito faremo una breve descrizione dei vari modelli di data mining per poi soffermarci sugli alberi decisionali.
Le tecniche di data mining si dividono in predittive e descrittive.
Descrittive: descrivono gli insiemi di dati in oggetto in maniera concisa e semplificata, presentandone interessanti proprietà generali;
Predittive: costruiscono modelli dei dati il cui scopo è predire il comportamento di nuovi insiemi di dati.
I modelli predittivi sono costruiti, o allenati, usando dati per cui il valore della variabile di risposta è già noto. Questo tipo di allenamento viene chiamato training supervisionato, perché i valori calcolati o stimati sono comparati con i risultati conosciuti. Le tecniche descrittive come il clustering invece sono di training non supervisionato perché non c’è un risultato già noto che guidi l’algoritmo.
2.2.1 Alberi decisionali
Una delle più diffuse tecniche di Data mining esistenti è quella degli alberi di decisione, questa è un modello predittivo che, come il nome implica, può essere rappresentato come un albero.
Un albero decisionale prende come input un oggetto o una situazione descritti da un insieme di attributi e dà in uscita una “decisione” cioè il valore di output predetto sull’input inserito. Gli attributi in input possono essere discreti o continui. Anche l’output può essere discreto o continuo.
L’apprendimento di una funzione a valori discreti è chiamato classificazione; l’apprendimento di una funzione a valori continui è chiamato regressione.
Il problema della costruzione di un albero decisionale può essere espresso ricorsivamente. Prima si seleziona un attributo da posizionare al nodo radice e costruire un ramo per ogni possibile valore.
Cosi facendo si divide il dataset in dataset più piccoli. Il processo può ora essere ripetuto ricorsivamente per ogni ramo, usando solo quelle istanze che nel passaggio corrente raggiungono il ramo. Se in ogni momento tutte le istanze al nodo hanno la stessa classificazione, si blocca lo sviluppo di quella parte dell’albero. Un albero decisionale raggiunge la sua decisione eseguendo una serie di test. Ogni nodo interno all’albero corrisponde ad un test del valore di una delle proprietà e i rami provenienti dal nodo sono etichettati con i possibili valori del test. Ogni nodo-foglia nell’albero specifica il valore da ritornare se quella foglia viene raggiunta.
La figura mostra un esempio di albero decisionale i nodi interni sono rappresentati da ellissi e i nodi foglia da quadrati.
Figura 2.3 Esempio di albero decisionale
Quando si ha la disponibilità di un grande insieme di ipotesi disponibili, bisogna stare attenti a non usare questa vasta scelta per trovare regolarità insignificanti nei dati. Questo problema è chiamato overfitting (sovrastima). Un modo per risolvere questo problema è quello di usare delle tecniche di sfoltitura (pruning).
Pruning
Vi sono due strategie generali di pruning applicabili agli alberi decisionali:
o pre-pruning
o post-pruning
Pre-pruning
Il pre-pruning riguarda la scelta di fermare lo sviluppo dei sottoalberi durante il processo di costruzione dell’albero decisionale.
Applicando il pre-pruning si individua una misura del livello di associazione tra un attributo e la classe, in un determinato nodo dell'albero e si divide un nodo solo se esiste un attributo che ha un livello di associazione che supera una soglia prefissata.
Il metodo di pre-pruning ha vari problemi come scegliere il valore di soglia e quello che viene chiamato early stopping, cioé l’interruzione prematura della costruzione dell'albero.
Post-pruning
Nella tecnica del post-pruning si utilizza un insieme di dati indipendenti sia da quelli di test che da quelli di training. Si calcola il tasso di errore dell'albero prima e dopo dell'operazione di sfoltimento e si sceglie di effettuare lo sfoltimento se il tasso di errore diminuisce. La maggior parte degli algoritmi di induzione di alberi decisionali preferisce usare il post-pruning che dà spesso risultati migliori.
Vi sono due opzioni possibili per sfoltire l’albero con la tecnica del post-pruning:
Subtree-replacement
Utilizzando il subtree-raising viene rimpiazzato un sottoalbero con una foglia. Questa è un’operazione che peggiora le prestazioni dell'albero sull'insieme di addestramento, ma può migliorarle su un insieme di dati indipendente.
Subtree-raising
Questa operazione risale l’albero tagliando delle porzioni, essa è più complessa della precedente e non è ben chiaro se offra una vera utilità.
Un problema frequente nel processo di induzione di un albero decisionale è la scelta di una funzione euristica che serva a decidere le divisioni da compiere nell’albero. Un principio generale che si segue in questi casi è quello del rasoio di Ockham che afferma che bisogna sempre preferire la più semplice delle ipotesi purché questa sia consistente con i dati. Applicando questo principio agli alberi decisionali, esso implica che bisogna costruire un albero più piccolo possibile.
I metodi per decidere le divisioni in un albero sono diversi, forse quello più noto è quello basato sul concetto di entropia mutuato dalla teoria dell’informazione, vi è poi il test del chi quadrato e l’analisi quadratica del discriminante. Ritorneremo su queste tecniche parlando delle varie implementazioni in commercio di algoritmi di induzione di alberi decisionali.
2.2.2 Algoritmi di induzione di alberi decisionali
C4.5
C4.5 è una versione migliorata dell’algoritmo ID3, uno dei primi algoritmi di induzione di alberi decisionali, che venne introdotto nel 1970 da Quinlan.
C4.5 prende i predittori e i loro valori di divisioni basandosi sul guadagno informativo che la o le divisioni permettono. Il guadagno rappresenta la differenza tra la quantità di informazione di cui si ha bisogno per fare una predizione corretta prima che una divisione sia fatta e dopo che la divisione è stata fatta. Se la quantità di informazione richiesta è molto minore dopo che la divisione è stata fatta allora la divisione ha diminuito il disordine del segmento singolo originale. Il guadagno è definito come la differenza tra l’entropia del segmento originale e le entropie accumulate dai risultanti segmenti divisi. Molte delle tecniche presenti in C4.5 sono presenti anche in C&RT, proseguiremo quindi con la descrizione di C&RT.
C&RT (classification and regression trees)
Uno dei grandi vantaggi di C&RT è che l’algoritmo ha la validazione del modello e la scoperta del modello ottimo costruiti profondamente dentro l’algoritmo. C&RT riesce in questo compito costruendo un albero molto complesso e sfoltendolo per portarlo all’ottimalità basandosi sui risultati di una validazione incrociata. L’albero è sfoltito basandosi sulla performance delle varie versioni sfoltite dell’albero sull’insieme dei dati di test. L’albero più complesso raramente raggiunge il meglio sui dati lasciati da parte poiché è stato sovrastimato dai dati di training. Usando la validazione incrociata, l’albero che si comporterà meglio su dati nuovi, sconosciuti, può essere scelto.
CHAID
Un’altra tecnologia molto popolare per l’induzione di alberi decisionali è CHAID o Chi-quadrato rivelatore automatico di interazioni. CHAID è simile a C&RT nel modo di costruire l’albero decisionale ma differisce nel modo in cui sceglie le divisioni. Invece dell’entropia o della metrica di Gini, per scegliere divisioni ottimali la tecnica poggia sul test del chi quadrato usato nelle tabelle di contingenza per determinare quale predittore categorico è il più lontano dall’indipendenza con i valori predittivi.
Poiché CHAID si poggia sulle tabelle di contingenza per formare il suo test di significatività per ogni predittore tutti i predittori devono essere o categorici o forzati a diventare categorici tramite il binning.
Chaid è un albero decisionale che è costruito dividendo sottoinsiemi dello spazio in due o più nodi ripetutamente, iniziando dall’intero insieme di dati. Per determinare la migliore divisione ad ogni nodo, l’algoritmo fonde ogni paio permissibile di categorie di variabili predittive (l’insieme di coppie permissibili è determinato dal tipo della variabile predittiva studiata) se non ci sono differenze statisticamente significative nella coppia rispetto alla variabile bersaglio. Il processo viene ripetuto fino a quando non viene trovata una coppia non significativa. Il risultante insieme di categorie della variabile predittiva è la migliore divisione rispetto alla variabile predittiva. Questo processo è ripetuto per tutte le variabili predittive. La divisione che fornisce la migliore predizione viene scelta. Il processo si ripete ricorsivamente fino a quando una delle regole di stop non si attiva.
QUEST
Quest è un algoritmo di classificazione che produce un albero decisionale binario come C&RT.
Al contrario di CHAID e C&RT, che gestiscono la selezione di variabili e la selezione del punto di divisione simultaneamente durante il processo di costruzione dell’albero, QUEST li gestisce separatamente.
E’ risaputo che metodi come C&RT tendono a selezionare variabili con più valori discreti, ciò permette più divisioni nel processo di costruzione dell’albero. Questo introduce squilibri (bias) nel modello, che riduce la generalizabilità nei risultati. Un’altra limitazione di C&RT è l’investimento computazionale nella ricerca delle divisioni. QUEST è progettato per risolvere questo problema. QUEST ha dimostrato di essere molto migliore di altri metodi di ricerca in termini di squilibri nella selezione delle variabili e costi computazionali. In termini di accuratezza nella classificazione, variabilità nei punti di divisione e dimensioni dell’albero, tuttavia, i migliori metodi sono quelli che adottano le divisioni univariate.
Per ogni divisione, l’associazione tra ogni variabile predittiva e il bersaglio è calcolata usando il test ANOVA F o il test di Levene (per predittori continui o ordinali) o il chi-quadrato di Pearson (per predittori nominali). L’analisi a discriminante quadratico è adottata per trovare il punto di divisione ottimale per la variabile predittiva. Il processo si ripete ricorsivamente fino a quando una delle regole di stop non scatta.
Capitolo 3
La piattaforma Weka
Weka è un software sviluppato nell’università di Waikato in nuova Zelanda. L’acronimo Weka abbrevia la seguente dicitura: “ Waikato Enviroment for Knowledge Analysis”. Il sistema è scritto in java, un linguaggio orientato agli oggetti che è disponibile per tutte le maggiori piattaforme. Weka è stato testato sui sistemi operativi Windows, Linux e Macintosh. Weka può essere usato a più livelli. In primis esso offre le implementazioni della maggior parte degli algoritmi di apprendimento esistenti che si possono applicare ad insiemi di dati. Esso include anche una varietà di strumenti per trasformare insiemi di dati, come gli algoritmi per la discretizzazione, la normalizzazione, il ricampionamneto, la selezione etc… Weka possiede anche potenti strumenti per il preprocessing dei dati, chiamati filtri. Nella maggior parte delle applicazioni di data mining, la componente di machine learning è solo una piccola parte di un sistema software molto più grande. Se si intende progettare un’applicazione di data mining da zero c’è la possibilità di sfruttare le potenzialità di Weka all’interno del proprio software. Weka permette di fare questo con il minimo sforzo.
Figura 3.1 Schermata iniziale della piattaforma Weka
3.1 Panoramica della piattaforma
Nel piattaforma Weka sono presenti più ambienti per lavorare sui dati.
La piattaforma Weka offre la possibilità di utilizzare tre diversi ambienti, questi sono:
1. Weka Explorer
2. Weka Experiment
3. Weka Knowledge Flow
Di seguito verrà fatta una breve descrizione del Weka Experiment e del Weka Kowledge Flow per poi passare ad una trattazione dettagliata dell’ambiente Explorer.
3.1.1 Weka Experiment
L’ambiente Weka Experiment permette all’utente di creare, eseguire modificare e analizzare esperimenti, in una maniera più conveniente di quella possibile quando si processano gli schemi individualmente. Ad esempio, è possibile creare un esperimento che esegue alcuni algoritmi su una serie di dataset e poi analizza i risultati per determinare se uno degli algoritmi è statisticamente migliore degli altri.
3.1.2 Knowledge Flow
L’ambiente knowledge Flow fornisce un’alternativa all’Explorer come interfaccia grafica per gli algoritmi principali di Weka. Il Knowledge Flow è ancora incompleto quindi alcune funzionalità presenti nell’Explorer non sono disponibili. D’altra parte, ci sono cose che possono essere fatte con il Knowledge Flow ma non con l’Explorer.
L’ambiente Knowledge Flow presenta un interfaccia ispirata al flusso di dati. Si possono selezionare i componenti di Weka da una barra degli strumenti, posizionarli in un tavolo di lavoro e connetterli insieme in modo da formare un flusso di conoscenza per processare ed analizzare i dati. Ad oggi tutti i classificatori ed i filtri Weka sono disponibili nel Knowledge Flow insieme a qualche strumento extra. I componenti per il clustering saranno disponibili nella prossima release.
3.2 Weka Knowledge Explorer:
(schermata iniziale)
3.2.1 Sezione TAB
In cima alla finestra, appena sotto la barra del titolo , vi è una riga di tab.
Ogni tab corrisponde ad uno strumento di lavoro disponibile, qui di seguito sono descritte le varie funzioni.
I tab sono i seguenti:
1. Preprocess. Sceglie e modifica i dati su cui lavorare.
2. Classify. Effettua il training e testa gli schemi di apprendimento che classificano o eseguono una regressione.
3. Cluster. Inferisce gruppi dai dati.
4. Associate. Inferisce regole di associazione dai dati.
5. Select Attributes. Seleziona i più rilevanti attributi nei dati.
6. Visualize. Mostra una rappresentazione in 2D dei dati.

Figura 3.2 Interfaccia grafica del Knoledge Explorer di WEKA
3.2.2 Status Box
Lo status box appare nella parte inferiore della finestra, sotto il log box.
Mostra i messaggi che tengono informato su cosa sta succedendo.
Cliccando con il tasto destro del mouse dovunque all’interno dello status box si apre un piccolo menù. Il menù ha due opzioni.
1. Available memory. Mostra nel log box la quantità di memoria disponibile.
2. Run Garbage Collector. Forza il Java garbage collector a cercare la memoria di cui non c’è più bisogno e liberarla, rendendo disponibile più memoria per le operazioni successive.
3.2.3 Icona dello status
A destra dello status box vi è l’icona dello status. Quando nessun processo è in esecuzione l’uccello rimane fermo. Il numero a fianco del simbolo dà il numero di processi concorrenti in esecuzione. Quando il sistema è fermo è zero, ma cresce quando il numero dei processi aumenta.
3.2 Strumenti di Weka
3.3.1 Preprocessing
Nella sezione di preprocess i dati possono essere importati da un file in vari formati possono essere letti da un url o da un database sql (JDBC)
Il più semplice e più comune modo per inserire i dati in WEKA è quello di immagazzinarli in un file ARFF(Attribute-Relation File Format).

Figura 3.3 Esempio di File ARFF
La Base Relation e la Working Relation
Allo scopo di mantenere il dataset che viene caricato senza modifiche Weka mantiene una copia di questo in quella che si chiama la base relation. La working relation invece è una copia della base relation, completa di ogni modifica che è stato fatta con i filtri nel pannello di preprocess. Quando una relazione è appena caricata in WEKA, la working relation è la stessa della base relation. Non appena un filtro è stato applicato sui dati, la working relation cambia ma la base relation resta la stessa.
I box che descrivono le relazioni hanno tre campi:
1. Relation. Il nome della relazione, come è dato dal file in cui è stato caricato.
2. Istances. Il numero di istanze nei dati.
3. Attributes. Il numero di attributi nei dati.
Lavorare con i filtri
Gli strumenti di preprocessing in Weka sono chiamati filtri.
Weka possiede filtri per la discretizzazione, la normalizzazione, il ricampionamneto, la selezione e la trasformazione di attributi e altro.
Ma non possiede filtri per importare e preprocessare dati spettrali, per questo nella tesi è stato implementato un modulo che converte gli spettri in formato ARFF.
3.3.2 Classificazione
I classificatori in WEKA sono modelli per predire quantità nominali e numeriche
Gli schemi di apprendimento implementati includono:
o Alberi di decisione e liste
o Classificatori basati sulle istanze
o Support vector machines
o Reti bayesiane
o Regressione logistica
o Regole di associazione
o E altri….
Inoltre i meta-classificatori includono:
o Bagging
o Boosting
o Stacking
o Apprendimento pesato logicamente
o E altri….
Selezione di un classificatore
In cima alla sezione di classificazione vi è un box denominato Classifier. Questo box ha un campo testuale che dà il nome del classificatore correntemente selezionato e le sue opzioni.
Opzioni di test
Il risultato dell’applicazione del classificatore scelto sarà testato in accordo alle opzioni che sono state scelte. Ci sono quattro modalità di test:
1. Use training set. Il classificatore è valutato su quanto bene predice la classe di istanze sul quale è stato effettuato il training.
2. Supplied test set. Il classificatore è valutato su quanto bene predice la classe dell’insieme di istanze caricate da un file.
3. Cross-validation. Il classificatore è valutato in base alla validazione incrociata, usando il numero di fold che vengono inseriti nel campo di testo Folds.
4. Percentage split. Il classificatore è valutato su quanto bene predice una certa percentuale di dati che sono stati tenuti fuori dal testing. La quantità di dati tenuti fuori dipende dal valore inserito nel campo %.
Vi sono inoltre ulteriori opzioni per testare i dati:
1. Output model. Il modello di classificazione del training set completo è mostrato in output di modo che può essere rappresentato, visualizzato, etc… .
2. Output per-class stats. Le statistiche precision/recall e false/true per ogni classe sono mostrate in output.
3. Output entropy evaluation methods. La misura di valutazione dell’entropia è inclusa nell’output.
4. Output confusion matrix. La matrice di confusione delle predizioni del classificatore è inclusa nell’output.
5. Store predictions for visualizations. Le predizioni del classificatore sono memorizzate così che possono essere visualizzate.
6. Cost-sensitive evaluation. Gli errori sono valutati rispetto alla matrice di costo.
7. Random seed for xval / % Split. Questo specifica il seme casuale utilizzato quando i dati vengono randomizzati prima di essere divisi per scopi di valutazione.
L’attributo Class
I classificatori in WEKA sono progettati per essere capaci di predire un singolo attributo “class”, che è il bersaglio per la predizione. Alcuni classificatori possono apprendere solo classi nominali; altri possono apprendere solo classi numeriche (problemi di regressione); altri ancora possono apprendere entrambe.
In modalità predefinita, la classe è l’ultimo attributo nei dati. Si può anche addestrare il classificatore a predire un attributo differente di quello “class”.
Fase di testing
Quando il classificatore, le opzioni di test e la classe sono state scelte, il processo di apprendimento può iniziare. Quando il training è completo alcune cose succedono. L’area chiamata Classifier output a destra della visualizzazione è riempita con testo che descrive i risultati del training e del test.
Il Classifier Output Text
L’output è diviso in alcune sezioni:
1. Run information. Una lista di informazioni che mostra le opzioni dello schema di apprendimento, il nome della relazione, le istanze, gli attributi e la modalità di test che è stata adottata nel processo.
2. Classifier model (training set completo). Una rappresentazione testuale del modello di classificazione che è stato prodotto dai dati di training completi.
I risultati della modalità di training scelti sono divisi in questo modo:
1. Summary. Una lista di statistiche che riassumono con quale accuratezza il classificatore è stato capace di predire la vera classe delle istanze utilizzando la modalità di test scelta.
2. Detailed Accuracy By Class. Una divisione più dettagliata per-classe dell’accuratezza di predizione del classificatore.
3. Confusion Matrix. Mostra quante istanze sono state assegnate per ogni classe. Gli elementi mostrano il numero di test di esempio di cui la classe attuale è la riga e in cui la classe predetta è la colonna.
La Result List.
Dopo aver addestrato alcuni classificatori, la result list conterrà alcune entrate. Questa è composta da alcuni oggetti:
1. View main window. Mostra l’output nella finestra centrale.
2. View in separate window. Apre una nuova finestra indipendente per visionare i risultati.
3. Save result buffer. Fa comparire una finestra di dialogo che permette di salvare un file di testo che contiene l’output testuale.
4. Load model. Carica un oggetto di un modello già pre-addestrato da un file binario.
5. Save model. Salva un oggetto modello in un file binario. Gli oggetti sono salvati nella forma java “serialized object”.
6. Re-evaluate model on current test set. Prende il modello che è stato costruito e testa la sua performance sul data set che è stato specificato con il bottone Set…. Sotto l’opzione Supplied test set.
7. Visualize classifier error. Fa comparire una finestra di visualizzazione che rappresenta i risultati della classificazione. Le istanze correttamente classificate sono rappresentate da croci, quelle classificate scorrettamente invece sono rappresentate da quadrati.
8. Visualize tree. Mostra una rappresentazione grafica della struttura del modello di classificazione.
9. Visualize margin curve. Genera un disegno che illustra il margine di predizione. Il margine è definito come la differenza tra la probabilità predetta dalla classe attuale e la più alta probabilità predetta dalle altre classi. Per esempio, gli algoritmi di boosting possono raggiungere performance migliori sui dati di test aumentando il margine dei dati di training.
10. Visualize threshold curve. Genera un grafico che illustra i tradeoff nella predizione che sono ottenuti variando il valore di soglia tra le classi. Per esempio, con il valore di soglia predefinito di 0,5, la probabilità predetta di ‘positive’ deve essere più grande di 0,5 perché l’istanza da predire sia ‘positive’. Il disegno può essere usato per visualizzare il tradeoff precision/recall, la curva di analisi ROC (rapporto tra veri positivi e falsi positivi), e per altri tipi di curve.
11. Visualize cost curve. Genera un disegno che da una rappresentazione esplicita del costo previsto.

Figura 3.4 Panoramica dello strumento Classifier
3.3.3 Clustering
Le tecniche di clustering si applicano quando non sono note classi da predire e le istanze devono essere divise in gruppi naturali. Questi gruppi presumibilmente riflettono qualche meccanismo esistente nel dominio da cui le istanze vengono prese, un meccanismo che fà si che alcune istanze abbiano una maggiore somiglianza tra altre rispetto a quella che potrebbero avere con le rimanenti. Il clustering richiede tecniche diverse rispetto a quelle di classificazione e associazione.
Sono presenti in Weka tre differenti metodi di clustering.
Il primo è K-means che forma gruppi partizionando le istanze in gruppi distinti. La seconda è la tecnica di clustering incrementale che è stata sviluppata nel 1980 ed è incorporata in un paio di sistemi chiamati COBWEB (per attributi nominali) e CLASSIT (per attributi numerici). Questi metodi raggruppano le istanze gerarchicamente. Essi si poggiano su una misura di utilità chiamata “Category utility”.
La terza tecnica è un metodo di clustering statistico basato sulla mistura di modelli aventi differenti distribuzioni di probabilità una per ogni gruppo che, a differenza degli altri due metodi, assegna le istanze ai gruppi probabilisticamente.
Modalità di raggruppamento
Le prime tre opzioni sono le stesse della classificazione: Use training set, Supplied test set e Percentage split, eccetto che ora i dati sono assegnati a gruppi invece di cercare di predire una classe specifica. La quarta modalità, Classes to clusters evaluation, compara la qualità con cui i gruppi scelti combaciano con una classe pre-assegnata nei dati.
3.3.4 Regole associative
WEKA possiede un solo schema per l’apprendimento con l’associazione, chiamato ‘apriori’. Apriori può identificare dipendenze statistiche tra gruppi di attributi e può calcolare tutte quelle regole che hanno un supporto minimo dato ed eccedono una data confidenza.
Non ci sono altri associatori tra cui scegliere.
3.3.5 Selezionare gli attributi
Ricerca e valutazione
La selezione degli attributi riguarda la ricerca attraverso tutte le possibili combinazioni di attributi nei dati per trovare quali sottoinsiemi di attributi funziona meglio per la predizione. Per fare questo, due oggetti devono essere configurati: un valutatore di attributi e un metodo di ricerca. Il valutatore determina quale metodo è usato per assegnare un valore a ogni sottoinsieme di attributi. Il metodo di ricerca determina quale stile di ricerca è usato.
Opzioni
Il box attribute selection mode ha due opzioni.
1. Use full training set. Il valore del sottoinsieme di attributi è determinato usando l’insieme completo dei dati di training.
2. Validazione incrociata. Il valore del sottoinsieme di attributi è determinato da un processo di validazione incrociata. I campi Fold e Seed specificano il numero di fold e il seme casuale usato quando si mischiano i dati.
3.3.6 Visualizzazione
La sezione di visualizzazione di WEKA permette di visualizzare una rappresentazione bidimensionale della working relation corrente
Cambiare la vista
I punti di dati sono rappresentati nell’area principale della finestra. In cima vi sono due liste a discesa per selezionare gli assi da rappresentare. Quella a sinistra mostra quale attributo usare per l’asse x; quella a destra mostra quale usare per l’asse y. Sotto il selettore dell’asse x vi è una lista a discesa per scegliere lo schema dei colori. Questo permette di colorare i punti basandosi sull’attributo selezionato. Sotto l’area di rappresentazione una legenda descrive a quali valori corrispondono i colori.
A destra dell’area di rappresentazione vi è una serie di strisce orizzontali. Ogni striscia rappresenta un attributo, e i punti con essa mostrano la distribuzione di valori dell’attributo. Questi valori sono sparsi casualmente in verticale per aiutare a vedere la concentrazione di punti. Sopra la strisce degli attributi vi è un cursore scorrevole chiamato jitter, che è uno spostamento casuale dato a tutti i punti nella rappresentazione. Aumentare la quantità di jitter è utile per mettere in evidenza concentrazioni di punti. Senza lo jitter, un milione di istanze allo stesso punto non sembrerebbero differenti da una singola istanza isolata.
Figura 3.5 Finestra di visualizzazione
Selezionare le istanze
Ci potrebbero essere situazioni dove è utile selezionare un sottoinsieme dei dati utilizzando uno strumento di visualizzazione. Un caso speciale di questo tipo è lo UserClassifier, che permette di costruire un classificatore personale selezionando le istanze interattivamente.
Sotto il bottone del selettore dell’asse y c’è una lista a discesa che permette di scegliere un metodo di selezione. Un gruppo di punti di dati può essere selezionato in quattro modi:
1. Select instance. Cliccando un punto di dati individuale appare una finestra che mostra i suoi attributi. Se più di un punto appare allo stesso posto, viene mostrato più di un insieme di attributi.
2. Rectangle. Si può creare un rettangolo, trascinandolo, che seleziona i punti al suo interno.
3. Poligon. Si può costruire un poligono a forma libera che seleziona i punti al suo interno.
4. Polyline. Si può costruire una polilinea che distingue i punti di un lato con quelli di un altro. La figura finale è aperta (in opposizione al poligono che è sempre chiuso).
Quando un’area del disegno è stata selezionata usando Rectangle, Polygon, o Polyline diventa grigia. A questo punto, cliccando il tasto Submit si rimuovono tutte le istanze dal disegno eccetto quelle con l’area selezionata in grigio. Una volta che tutti i punti sono stati rimossi dal grafico, il tasto Submit diventa il tasto Reset. Questo tasto annulla le rimozioni precedenti e riporta al grafico originale con tutti i punti inclusi. Per ultimo, il tasto Save permette salvare le istanze visibili correntemente in un nuovo file ARFF.
In questo capitolo è stata descritta la piattaforma Weka, dopo una breve descrizione dei vari ambienti disponibili in Weka, è stata descritta ampiamente l’ambiente Explorer che, come vedremo nel quinto capitolo, verrà utilizzato per analizzare un dataset contenente spettri, allo scopo di trovare alcuni discriminanti.
Capitolo 4
Preprocessing dei dati
In questo capitolo ci soffermeremo sulla descrizione del formato dei dati e sugli strumenti implementati per la trasformazione degli stessi.
Dopo una breve introduzione sulla spettrometria di massa si passerà alla descrizione del formato dei dati utilizzato dalla piattaforma Weka, cioè il formato Arff, per concludere con una descrizione dei dati provenienti dallo spettrometro e la descrizione dei moduli implementati utili alla trasformazione dei dati.
4.1 Maldi-TOF
Con l’aumento della ricerca interdisciplinare, il bisogno di metodi quantitativi accurati per l’analisi di biomolecole è andato via via crescendo sia per i chimici che per i biologi. La spettrometria di massa è emersa come un importante strumento per analizzare e caratterizzare grandi biomolecole di complessità variabile. La tecnica MALDI (matrix assisted laser desorption/ionization), sviluppata nel 1987, ha aumentato il limite superiore per la massa per l’analisi di biomolecole a oltre 300,000 Da e ha fatto si che l’analisi di grandi biomolecole con la spettrometria di massa diventasse più facile e più sensibile.
Uno spettrometro di massa, è uno strumento analitico in grado di misurare la massa di una molecola, detta analita, dopo che essa sia stata ionizzata, ossia dopo che gli sia stata impartita una carica elettrica.
Gli spettrometri di massa TOF agiscono di modo che quando un gruppo di ioni temporalmente e spazialmente ben definiti differiscono per rapporti massa/carica (m/z) sono soggetti allo stesso campo elettrico applicato e hanno la possibilità di muoversi in una regione con un campo elettrico costante, attraverseranno questa regione in un tempo che dipende dal loro rapporto m/z.
Gli spettrometri di massa danno come risultati delle analisi una serie di valori massa intensità chiamati spettri che vengono inseriti in un file di testo come da figura:

Figura 4.1 Esempio di spettro grezzo
4.2 Formato ARFF
Un file ARFF è un file di testo ASCII che descrive un lista di istanze che condividono un insieme di attributi. I file ARFF sono stati sviluppati per essere usati nel “WEKA machine learning software”.
4.2.1 Descrizione dei file ARFF.
I file ARFF contengono due sezioni distinte. La prima sezione è l'header che è seguita dalla sezione data.
Dato lo spettro in figura 2.1, il corrispondente file ARFF è mostrato nella figura seguente:
Figura 4.2 Porzione di un file ARFF
Un file ARFF contiene più spettri, in figura viene mostrato un file con 29 masse e 13 picchi.
4.2.2 La sezione HEADER
L'header del file ARFF contiene il nome della relazione, una lista degli attributi(le colonne dei dati) e i loro tipi.
La dichiarazione @relation
Il nome della relazione è definito come la prima linea del file ARFF. Il formato è:
@relation <relation-name>
dove <relation-name> è una stringa.
La dichiarazione @attribute
La dichiarazione Attribute prende la forma di una sequenza ordinata di @attribute. Ogni attributo nel dataset ha la sua dichiarazione che definisce univocamente il nome di quell’attributo e il suo tipo di dato.
L'ordine in cui gli attributi sono dichiarati indica la posizione nella colonna nella sezione dati del file.
Il formato della dichiarazione @attribute è :
@attribute <attribute-name> <datatype>
Dove <attribute-name> deve iniziare con un carattere alfabetico.
Il <datatype> può essere uno dei seguenti tipi correntemente supportati da Weka:
1. numerico
2. <nominal-specification>
3. stringa
4. date [<date-format>]
Dove <nominal-specification> e <date-format> sono definiti sotto.
Attributi numerici
Gli attributi numerici possono essere numeri interi o reali.
Attributi nominali
I valori nominali sono definiti fornendo una <nominal-specification> che enumera i possibili valori: {<nominal-name1>, <nominal-name2>, <nominal-name3>, ...}
Attributi stringa
Gli attributi stringa permettono di creare attributi contenenti valori testuali arbitrari. Questo è molto utile in applicazioni di text-mining. Gli attributi stringa sono dichiarati come segue:
@ATTRIBUTE LCC string
Attributi data
La dichiarazione degli attributi data sono della forma :
@attribute <name> date [<date-format>]
dove <name> è il nome per l'attributo e <date-format> è una stringa opzionale che specifica come i valori data dovrebbero essere analizzati e stampati (questo è lo stesso formato usato da SimpleDateFormat).
Date devono essere specificati nella sezione data come le corrispondenti rappresentazione stringa di data/ora.
4.2.3 La sezione DATA
La sezione DATA del file contiene la linea di dichiarazione del data e le dichiarazione delle linee di istanza.
La dichiarazione @data La dichiarazione @data è una linea singola che denota l'inizio del segmento di dati nel file. Il formato è:
@data
Instance data
Ogni istanza è rappresentata da una singola linea, con ritorno carrello che denota la fine dell'istanza.
I valori Attributi per ogni istanza sono delimitati da virgole. Devono apparire nell'ordine in cui sono stati dichiarati nella sezione header.
I valori mancanti sono rappresentati da un punto interrogativo come:
@data
4.4,?,1.5,?,…
I valori di stringa e attribute nominali sono case sensitive e ogni spazio contenuto deve essere contornato da trattini, come segue :
@relation LCCvsLCSH
@attribute LCC string
@attribute LCSH string
@data
AG5, 'Encyclopedias and dictionaries.;Twentieth century.'
AS262, 'Science -- Soviet Union -- History.'
AE5, 'Encyclopedias and dictionaries.'
AS281, 'Astronomy, Assyro-Babylonian.;Moon -- Phases.'
AS281, 'Astronomy, Assyro-Babylonian.;Moon -- Tables.'
Le date devono essere specificate nella sezione data usando la rappresentazione stringa specificata nella dichiarazione degli attributi. Per esempio:
@RELATION Timestamps
@ATTRIBUTE timestamp DATE "yyyy-MM-dd HH:mm:ss"
@DATA
"2001-04-03 12:12:12"
"2001-05-03 12:59:55"
4.3 Conversione di spettri in formato ARFF
Una problematica frequente, quando si trattano spettri in forma grezza (raw) è il formato in cui questi dati devono essere convertiti per costruire un dataset su cui applicare gli algoritmi di classificazione.
Usualmente i singoli spettri vengono salvati su un file in formato txt, questi file contengono una serie di coppie di valori massa/intensità che sono suddivisi da un separatore (virgola, punto e virgola, spazio, tabulazione, etc…).
Per poter lavorare sugli spettri c’è la necessità di estrapolare le coppie massa/intensità dai file txt.
Nel modulo software implementato ogni coppia massa intensità viene inserita in un oggetto mZCouple, questi oggetti vengono inseriti in un oggetto chiamato Zspectrum che è un array di mZCouple e ogni oggetto Zspectrum viene a sua volta inserito in un contenitore di spettri chiamato SpectraContainer in modo da formare un struttura di questo tipo:
Figura 4.3 Rappresentazione grafica di un contenitore di spettri
Qui di seguito verrà descritta l’interfaccia grafica del tool sviluppato, più avanti verranno descritte le problematiche di implementazione del suddetto tool.
Premendo sul tab file del menu viene visualizzata la seguente schermata
Figura 4.4 Menu dell’interfaccia grafica
Come mostra l’immagine seguente c’è la possibilità di aprire un file o una directory
Figura 4.5 Sottomenu Open del menu File
I comandi Open Spectrum e Open Spectra permettono di caricare rispettivamente un spettro in formato txt o un contenitore di spettri, cioè una directory contenenti file txt. Bisogna però prestare attenzione a configurare nel modo giusto alcune opzioni ad esempio, come specificato prima, ogni file txt può avere separatori diversi, cliccando sull’opzione settings… si accede ad una finestra di dialogo come questa
Figura 4.6 Finestra di dialogo settings
dove si può scegliere il separatore e si possono cambiare alcune opzioni relative al parsing dei file txt, in particolare permette di mantenere le intensità negative e per valori molto piccoli permette di mantenere la notazione esponenziale.
Nell’ipotesi di costruire classificatori con due classi, dopo aver caricato lo spettro verrà chiesta la classe relativa allo stesso, che può essere healthy o diseased.
Si può inoltre importare un file ARFF che verrà trasformato in un contenitore di spettri come quello già descritto, realizzando la funzione di conversione inversa, ad esempio utile se i dati devono essere trasferiti via rete.
Figura 4.7 Sottomenu Import del menu File
La restante funzione disponibile è quella di esportare il contenitore di spettri in tre formati:
o CSV
E’ un semplice formato di file, riconosciuto anche dal foglio elettronico Excel.
o TXT
Consiste in un file di testo.
o ARFF
Il formato proprietario di Weka.
Figura 4.8 Sottomenu Export del menu File
Lo strumento software è stato implementato in linguaggio java utilizzando il kit di sviluppo java 1.5 (JDK), con la piattaforma di sviluppo NetBeans 4.0.
Il codice è sostanzialmente diviso in tre sezioni, la prima è un insieme di classi che definiscono la struttura dei dati, queste sono state implementate utilizzando le collezioni generiche. Le relazioni esistenti tra queste classi è stata già brevemente descritta sopra.
La seconda sezione del codice riguarda l’implementazione delle funzioni che effettuano la lettura, il parsing e la scrittura di file.
I valori presenti nei file txt che contengono gli spettri grezzi presentano la seguente forma:
{massa separatore intensità Fine linea}
{….. ….. ….. …... }
{ Fine file }
Lo scopo del metodo di parsing è quello di estrapolare i valori di massa e intensità dai file txt e inserirli nelle apposite strutture dati, per fare questo c’è stato bisogno di individuare il separatore presente nel file, di molta utilità in questo compito è stato il metodo split() contenuto nel package regular expressions facente parte del jdk 1.5.
La figura seguente mostra parte dell’implementezione della funzione di conversione di un contenitore di spettri in un file ARFF:

Figura 4.9 Porzione di codice riguardante la funzione che implementa la scrittura di un file ARFF
In questo capitolo sono state descritte le proprietà del formato ARFF ed il modulo software che permette di lavorare sugli spettri raw di modo da poterli inserire in una struttura che faciliti il compito di analisi degli stessi ed inoltre il suddetto modulo software offre delle funzioni che permettono di creare un file ARFF che contenga un dataset di spettri,
l’utilità di questa serie di operazioni diverrà evidente più avanti in questo lavoro di tesi quando verranno descritti i risultati ottenuti dalla sperimentazione di alcuni campioni biologici con la piattaforma Weka.
Capitolo 5
Classificazione di dati proteomici usando Weka: risultati sperimentali
In questo capitolo verranno descritti i risultati della classificazione di un dataset proveniente dall’analisi di alcuni campioni biologici con lo strumento Maldi-TOF che come abbiamo visto precedentemente fornisce una serie di file txt che vengono inseriti in un file ARFF grazie al modulo software che è stato già descritto nel precedente capitolo del presente lavoro di tesi. L’ambiente utilizzato per costruire i classificatori sul dataset è il modulo Explorer della piattaforma Weka. Gli schemi di classificazione che verranno utilizzati in questa analisi sono due, il primo è l’algoritmo di induzione di alberi decisionali alternati che verrà descritto di seguito, il secondo invece è il C4.5 già descritto precedentemente. Dopo aver esposto i vari paramentri modificabili di questi due algoritmi verranno esposti i risultati ottenuti da questa analisi.
5.1 Il dataset utilizzato per la sperimentazione
Il dataset su cui verranno fatte le sperimentazioni proviene dall’analisi di alcuni campioni biologici con lo strumento di spettrometria di massa Maldi-TOF. Esso è composto da venti spettri ognuno dei quali è composto da 34672 attributi e contiene venti istanze. Le istanze di classe uno sono formate da 10 repliche di un esperimento fatto sullo stesso campione (siero). Le istanze di classe due sono altre dieci repliche effettuate sullo stesso siero in cui sono state aggiunte due proteine, la mioglobina e l’insulina.. Su questo dataset non è stata applicata nessuna tecnica di normalizzazione.
5.2 Alberi decisionali alternati
L’applicazione delle procedure di boosting agli algoritmi di induzione di alberi decisionali ha dimostrato di produrre classificatori molto accurati. Questi classificatori sono nella forma di un voto di maggioranza su un numero di alberi decisionali. Sfortunatamente questi classificatori sono spesso grandi, complessi e difficili da interpretare. Esiste un algoritmo chiamato “alternating decision tree” che è una generalizzazione degli alberi decisionali. I classificatori di questo tipo sono facili da interpretare.
Ogni nodo è sostituito da due nodi, un nodo di predizione e un nodo di decisione. Il nodo di decisione è identico a quello degli alberi decisionali, mentre il nodo di predizione è associato ad un numero reale.
Come negli alberi decisionali, un’istanza è mappata nel percorso lungo l’albero dalla radice a una delle foglie. Tuttavia, diversamente dagli alberi decisionali, la classificazione associata con il percorso non è l’etichetta della foglia, invece è il segno della somma della predizione lungo il percorso.
Questa seconda rappresentazione è chiamata un albero alternato perché consiste nell’alternare strati di nodi di predizione e nodi di split.
Si associa con ogni nodo di decisione una semplice regola della forma seguente:
if(precondition) then
if(condition) then output p1
else output p2
else output 0
E’ chiaro che attraverso questa trasformazione si può rappresentare un albero decisionale come la somma di regole base ognuna delle quali corrisponde a uno dei nodi decisionali nell’albero.
La precondizione è la congiunzione delle condizioni che portano a un dato nodo di decisione, la condizione è la decisione associata con il nodo e p1 e p2 sono le predizioni associate con i due figli del nodo di decisione.
In figura viene mostrato un esempio di albero alternato come si può vedere i nodi di decisione sono rappresentati da quadrati, quelli di predizione da ellissi.
Figura 5.1 Esempio di albero alternato
Una delle caratteristiche utili negli alberi di decisione alternati è che essi danno, oltre alla classificazione, una misura della confidenza che viene chiamata margine di classificazione.
Possiamo vedere quindi, il valore assoluto della somma come una misura della confidenza della classificazione e chiamarlo margine di classificazione.
Gli alberi alternati possono essere definiti come una somma di semplici regole base. Come risultato, diviene semplice applicare un algoritmo di boosting al problema di inferire alberi decisionali alternati dagli esempi. L’unica cosa speciale in questo caso è che l’insieme di regole base che sono considerate ad ogni stadio non è costante ma cresce mentre l’albero viene costruito.
L’algoritmo inizia trovando la migliore predizione costante per l’intero dataset. Questa predizione è posta alla radice dell’albero. Poi costruisce l’albero iterativamente, sommando una regola base alla volta. La regola base sommata corrisponde a un sottoalbero con un nodo di decisione come sua radice e due nodi di predizione come foglie. Questo sottoalbero è sommato come un figlio del nodo predittore che può essere un nodo foglia o no.
Di seguito verranno descritti sommariamente i parametri presenti nei due algoritmi di induzione di alberi decisionali.
5.3 Parametri modificabili negli algoritmi di classificazione di Weka
5.3.1 Alberi decisionali alternati
Number of boosting iterations
Configura il numero di iterazioni di boosting da compiere. C’è bisogno di sistemare manualmente questo parametro per soddisfare il dataset e il tradeoff complessità/accuratezza desiderato. Più iterazioni di boosting risulteranno in alberi più larghi ma renderanno l’apprendimento più lento. Ogni iterazione aggiungerà tre nodi all’albero (1 split + 2 predizioni) se non avviene un merging.
Random seed
Configura il seme casuale da usare per la ricerca casuale.
Search path
Configura il tipo di ricerca da eseguire quando si costruisce l’albero. L’opzione di default (search all paths) eseguirà una ricerca esaustiva. Gli altri metodi di ricerca sono euristici, quindi non garantiscono di trovare una soluzione ottimale ma sono molto più veloci.
Expand the heaviest paths
Ricerca il percorso con le istanze con maggior peso.
Extend the z-pure path
ricerca il percorso determinato dalla migliore stima z-pure.
Extend a random path: Il metodo più veloce, ricerca semplicemente un singolo percorso casuale ad ogni iterazione.
5.3.2 C4.5
Confidence factor
Il fattore di confidenza usato per il pruning (valori più piccoli causano un pruning più elevato).
minNumObj
Questo parametro elimina i test per cui la maggior parte delle istanze di training hanno lo stesso risultato. Questi test non sono incorporati nell’albero decisionale a meno che non hanno almeno due risultati che hanno un numero minimo di istanze uguali. Il valore definito per questo minimo è due ma dovrebbe essere aumentato per dataset dove è presente molto disturbo.
numFolds
Determina la quantità di dati usati per il pruning ad errore ridotto. Un fold è usato per il pruning, il resto per costruire l’albero.
Reduced error pruning
Permette di scegliere se usare il pruning ad errore ridotto invece che quello del C4.5.
Seed
Il seme usato per randomizzare i dati quando viene usato il pruning ad errore ridotto.
Subtree raising
Permette di scegliere se considerare l’opzione di subtree raising nel pruning.
5.4 Descrizione dell’output
Prima di passare all’interpretazione dei risultati ottenuti analizzando il dataset, verrà qui di seguito esaminato punto per punto l’output che lo strumento di classificazione dell’ambiente Weka Explorer mostra dopo aver applicato gli schemi al dataset.
La prima parte è un albero decisionale rappresentato in forma testuale. Nella struttura ad albero, una colonna introduce l’etichetta della classe che è stata assegnata ad una particolare foglia, seguita dal numero di istanze che raggiungono quella foglia, espresse come un numero decimale perché l’algoritmo usa istanze frazionate per gestire i valori mancanti (negli alberi alternati l’etichetta della classe viene seguita dal margine di classificazione). Sotto la struttura ad albero viene stampato il numero di foglie e poi il numero totale di nodi nell’albero.
La seconda parte dell’output dà le stime sulla performance predittiva dell’albero, generate dal modulo di valutazione di Weka.Questo insieme di misure è ottenuto utilizzando la validazione incrociata stratificata a dieci fold. il modulo di valutazione mostra in output il numero di istanze classificate correttamente e quelle classificate in modo errato affiancando questi valori da una percentuale, inoltre esso mostra alcune misure derivate dalle probabilità di classe assegnate dall’albero. Più specificamente esso mostra l’errore medio assoluto e l’errore della radice media quadrata, la statistica kappa, etc…. Successivamente viene mostrato in output una serie di informazioni che vanno sotto il nome di accuratezza dettagliata per classe, qui si possono vedere informazioni quale i falsi negativi, i falsi positivi ed in più i parametri precision e recall. Il sommario dei risultati termina con una matrice di confusione. La matrice di confusione ha una riga e una colonna per ogni classe. Ogni elemento della matrice mostra il numero di istanze test per cui la classe attuale è la riga e la classe predetta è la colonna. Buoni risultati corrispondono ad alti numeri sulla diagonale e piccoli numeri sulla altre posizioni.
La sezione finale dell’output presenta i risultati ottenuti usando la validazione incrociata stratificata a dieci fold.
Qui di seguito vengono mostrati i risultati ottenuti utilizzando gli schemi J48 e Adtree. Questi risultati verranno commentati più avanti.
Figura 5.2 risultati ottenuti con lo schema Adtree
Figura 5.3 Risultati ottenuti con lo schema J48
5.5 Risultati sperimentali
L’obiettivo dell’analisi di questo dataset consiste nel trovare uno o più discriminanti tra questi attributi che permettano di mettere in evidenza le differenze esistenti tra le istanze che hanno come classe healthy e quelle che hanno come classe diseased.
Come premesso i modelli che sono stati utilizzati per questa analisi sono l’algoritmo C4.5, che in Weka viene chiamato j48, e gli alberi decisionali alternati.
La scelta degli alberi decisionali come schema di apprendimento su questo dataset è giustificata dal fatto che in genere i modelli basati su alberi decisionali, per quanto molto semplici, offrono dei risultati spesso e volentieri paragonabili se non migliori a quelli di algoritmi più complessi.
Dopo una prima analisi effettuata con i suddetti algoritmi, senza variare nessuno dei parametri, gli algoritmi danno i seguenti risultati:
Per quanto riguarda il j48, esso divide l’insieme delle istanze al variare dell’attributo MZ8500.971010, precisamente se questo attributo è minore o uguale di 150.962 allora le istanze rientrano nella classe uno altrimenti nella classe due. Il classificatore costruito con questo algoritmo ottiene il l’95% delle istanze classificate correttamente.
Utilizzando invece l’algoritmo di induzione degli alberi decisionali alternati, si ottiene un valore diverso da quello ottenuto con il J48, cioè il valore MZ5722.114421, se questo attributo è minore di 332.052 allora le istanze sono classificate come uno altrimenti come due. Questo algoritmo classifica le istanze con una precisione dell’85%, esso inoltre fornisce un margine di precisione per classe di 3,739.
Come è possibile vedere nelle seguenti figure,

Figura 5.4 Albero decisionale ottenuto con lo schema Adtree
Figura 5.5 Albero decisionale ottenuto con lo schema J48
è evidentemente superfluo adottare qualsiasi tecnica di pruning disponibile con il J48. Variando gli altri parametri permessi con i due algoritmi non si ottengono risultati diversi da quelli precedentemente esposti.
I risultati della sperimentazione hanno diviso le istanze in base alla presenza di due picchi, il primo a 5722 rappresenta l’insulina, il secondo picco che rappresenta la mioglobina, lo troviamo a 8500, esso è un picco molto basso ed è il bicarico (isotopo) del picco che invece è presente a massa/carica 16000. Pertanto la differenza tra le due classi è la presenza di entrambe le proteine mioglobina ed insulina nella classe 2.
I risultati ottenuto mostrano che l’insieme delle istanze viene diviso dai due attributi appena menzionati, è molto interessante constatare che i due algoritmi riescano a trovare ognuno un valore diverso, in egual modo giusto, ma nessuno dei due riesca ad individuare tutti e due i valori.
Capitolo 6
Conclusioni
Nel presente lavoro di tesi sono state eseguite alcune analisi su dati spettrometrici provenienti da campioni biologici. Questa tipologia di analisi si inquadra nella ricerca estremamente importante di bio-markers utili alla diagnosi precoce di malattie tumorali.
Il lavoro di tesi si struttura inizialmente con una trattazione del processo di data mining, una materia di studio interdisciplinare che si occupa dell’analisi sui dati, soffermandosi sui modelli di induzione di alberi decisionali, Nel terzo capitolo viene presentata la piattaforma Weka, un ambiente ideato per supportare il processo di data mining in tutte le sue componenti, viene descritto in particolare l’ambiente Weka Explorer. Il lavoro prosegue poi con una descrizione dettagliata di un modulo software che è stato implementato allo scopo di lavorare con gli spettri grezzi provenienti dal Maldi-TOF
Il contributo della tesi viene esposto nel secondo capitolo, come già descritto sopra, e nel quinto capitolo, dove viene presentato l’algoritmo di induzione di alberi decisionali alternati e successivamente vengono esposti i risultati ottenuta dell’analisi di un dataset contenente spettri, l’analisi viene eseguita con l’ambiente Weka Explorer, utilizzando gli algoritmi di induzione di alberi decisionali alternati e l’algoritmo C4.5.
Appendice
Di seguito viene riportata l’implementazione in java della classe TextFile, che contiene le principali funzioni di conversioni presenti nel modulo software.
package it.unicz.bioinfolab.ms.io;
import java.io.*;
import it.unicz.bioinfolab.ms.support.*;
class TextFile{
public static boolean verify(File fileName, String regex, int startline){
try{
BufferedReader in = new BufferedReader(new FileReader(fileName));
//Scan every line until current line number equals 'startline'
for(int i=0; i<startline; i++){
if(in.readLine()==null)
return false;
}//end for
String s = in.readLine();
if(s.indexOf(regex) != -1)
return true;
else
return false;
} catch(IOException ioe){
return false;
}
}//end method
public static boolean verifyARFF(File fileName){
try{
BufferedReader in = new BufferedReader(new FileReader(fileName));
int sizeofSpectrum = 0;
String s; String broken[];
while((s=in.readLine())!=null){
if(s.startsWith("@data")){
while((s=in.readLine())!=null){
if(s.trim().equals(""))
continue;
else{
broken = s.split(",");
if(sizeofSpectrum==0){
sizeofSpectrum=broken.length;
} else if(sizeofSpectrum != broken.length){
return false;
}//end else
}//end else
}
}//end if
}//end external while
return true;
} catch(IOException ioe){
return false;
}
}//end method
public static String read(File fileName, String regex, int startline)
throws IOException{
try{
StringBuilder sb = new StringBuilder();
BufferedReader in = new BufferedReader(new FileReader(fileName));
//Scan every line until current line number equals 'startline'
for(int i=0; i<startline; i++){
in.readLine();
}//end for
String s;
while((s = in.readLine()) != null) {
sb.append(s);
sb.append(regex);
}
in.close();
return sb.toString();
} catch(IOException ioe){
throw new IOException();
}
}//end method
public static SpectraContainer readARFF(File arffFile)
throws IOParseARFFException{
try{
BufferedReader in = new BufferedReader(new FileReader(arffFile));
// ********************CONTAINERS************************
SpectraContainer spectraContainer = new SpectraContainer();
java.util.ArrayList<Double> mz = new java.util.ArrayList<Double>();
ZSpectrum spectrum = new ZSpectrum();
// ********************************************************
String s;
//Most extern loop
while((s = in.readLine()) != null) {
//if one encours the TAG @attribute
if(s.toLowerCase().startsWith("@attribute")){
///Support variables
int j; String mzNumber; int testcast;
do{
mzNumber = "";
s = s.replaceFirst("@attribute ", "");
s = s.replaceFirst(" numeric","");
//It extracts the number inside the remaining string
for(j=0; j<s.length(); j++){
if(s.charAt(j)=='.')
mzNumber += s.charAt(j);
else{
try{
//Following line could raise an exception
testcast = Integer.parseInt(""+s.charAt(j));
mzNumber += testcast;
} catch(NumberFormatException nfe){}
}//end else
}//end for
if(mzNumber.equals("")){
throw new IOParseARFFException(arffFile.getName());
}
//Insert this number in the mz ArrayList
mz.add(Double.valueOf(mzNumber));
}
while((s = in.readLine()).contains("numeric"));
//Jump down @attribute Class
}//end if
//else if one encours the TAG @data
else if(s.toLowerCase().startsWith("@data")){
String sdata; String[] broken;
for(int j=0; (sdata = in.readLine()) != null; j++){
if(!sdata.trim().equals("")){
broken = sdata.split(",");
spectrum = new ZSpectrum();
for(int i=0; i<broken.length-1; i++){
spectrum.add(new mZCouple<Double,Double>(mz.get(i),
Double.valueOf(broken[i])));
}//end for
spectrum.setType(broken[broken.length-1]);
spectrum.setFileName("MS_EXP"+j);
spectraContainer.setSpectrum(spectrum);
}//end if
else continue;
}//end for
}//end else if (DATA)
//else if one encours in a blank line
else if(s.trim().equals("")){
continue;
}//end else if
}//end while
in.close();
return spectraContainer;
} catch(IOException ioe){
throw new IOParseARFFException(arffFile.getName());
} catch(NumberFormatException nfe){
throw new IOParseARFFException(arffFile.getName());
}
}//end method
public static void write(String fileName, ZSpectrum spectrum,
String separator, String outFolder) throws IOException {
File folder = new File(outFolder);
if(!folder.exists()){
folder.mkdir();
}
PrintWriter out = new PrintWriter(
new BufferedWriter(new FileWriter(outFolder+File.separator+fileName)));
for(int i=0; i<spectrum.size(); i++){
out.println(spectrum.get(i).getMZ()+separator+spectrum.get(i).getIntensity());
}
out.close();
}//end method
public static void write_arff(SpectraContainer spectraContainer,
String outFolder, String relationName) throws IOException {
StringBuilder sb = new StringBuilder();
//If output folder doesn't exists, we create it!
File folder = new File(outFolder);
if(!folder.exists()){
folder.mkdir();
}
PrintWriter out = new PrintWriter(
new BufferedWriter(
new FileWriter(
outFolder+File.separator+relationName+".arff")));
//Get first spectrum to build following attributes
ZSpectrum spectrum = spectraContainer.getSpectrum(0);
//RELATION FIELD
sb.append("@relation '"+relationName+"'");
sb.append("\n");
sb.append("\n");
//Detect of extact class number in the dataset
java.util.Vector<String> classes = new java.util.Vector<String>();
for(int i=0; i<spectraContainer.size(); i++){
if(!classes.contains(spectraContainer.getSpectrum(i).getType()))
classes.add(spectraContainer.getSpectrum(i).getType());
}//end for
//ATTRIBUTE FIELDS
for (int i=0; i<spectrum.size(); i++){
sb.append("@attribute");
sb.append(" ");
sb.append("MZ");
sb.append(spectrum.get(i).getMZ());
sb.append(" ");
sb.append("numeric");
sb.append("\n");
}
sb.append("@attribute");
sb.append(" ");
sb.append("Class");
sb.append("{");
for(int i=0; i<classes.size()-1; i++){
sb.append(classes.get(i));
sb.append(",");
}//end for
sb.append(classes.get(classes.size()-1));
sb.append("}");
sb.append("\n");
sb.append("\n");
//DATA FIELDS
sb.append("@data"+"\n");
for (int i=0; i<spectraContainer.size(); i++){
spectrum = spectraContainer.getSpectrum(i);
for (int j=0; j<spectrum.size(); j++){
sb.append(spectrum.get(j).getIntensity());
sb.append(",");
}
sb.append(spectrum.getType());
sb.append("\n");
}//end for
out.print(sb);
out.close();
}//end method
public static String[] breaks(String file, String regex ) {
ZSpectrum spectum = new ZSpectrum();
String[] txt = file.split(regex);
return txt;
}//end method
}//end class
Bibliografia
1. Emanuel F. Petricoin III, Ali M. Ardekani, Ben A. Hitt, Peter J. Levine, Vincent A. Fusaro, Seth M. Steinberg, Gordon B. Mills, Charles Simone, David A. Fishman, Elise C. Kohn, and Lance A. Liotta. Use of proteomic patterns in serum to identify ovarian cancer. Lancet, pages 572–577, 2003.
2. Leo Breiman, Jerome H. Friedman, Richard A. Olshen, and Charles J. Stone. Classification and Regression Trees. Wadsworth & Brooks, 1984.
3. Yoav Freund and Llew Mason. The alternating decision tree learning algorithm. In Proc. 16th Int. Conf. on Machine Learning, pages 124-133. Morgan Kaufmann, 1999.
4. V. Gopalakrishnan, E. Williams, S. Ranganathan, R. Bowser, M. E. Cudkowic, M. Novelli, W. Lattazi, A. Gambotto, and B. W. Day. Proteomic data mining challenges in identification of disease-specific biomarkers from variable resolution mass spectra. In Proceedings of SIAM Bioinformatics Workshop 2004, Lake Buena Vista, FL, April 2004.
5. Ryan H. Lilien, Hany Farid, Bruce R. Donald. Probabilistic Disease Classification of Expression-Dependent Proteomic Data from Mass Spectrometry of Human Serum. Journal of Computational Biology, pages 925-946, 2003.
6. H. Witten and E. Frank. Data Mining: practical machine learning tools and techniques with Java implementations. Morgan Kaufmann, 2000.
7. Christopher K. Mathews, K.E. van Holde, Kevin G. Ahern. Biochimica. 88 408 1287-3. Casa Editrice Ambrosiana, Milano, terza edizione, giugno 2004.
8. Stuart Russel, Peter Norvig. Artificial intelligence: a modern approach. 0 13 080302-2. Prentice Hall, USA, second edition, 2003.
9. Quinlan,J.R.: C4.5: Programs for Machine Learning. Morgan Kauffman, 1993.
10. B. Wu, T. Abbott, D. Fishman, W. McMurray, G. Mor, K. Stone, D. Ward, K. Williams, and H. Zhao. Comparison of statistical methods for classification of ovarian cancer using mass spectrometry data. Bioinformatics, 1(19):1636–43, September 2003.
11. Cay S. Horstmann, Gary Cornell. Java 2 tecniche avanzate. 88 386 4251-6. McGraw-Hill, Milano, 2002.
12. R. Meir and G. Rätsch. An introduction to boosting and leveraging. In S. Mendelson and A. Smola, editors, Advanced Lectures on Machine Learning, LNCS, pages 119-184. Springer, 2003.
13. R.E. Schapire. A brief introduction to boosting. In Proceedings of the Sixteenth International Joint Conference on Artificial Intelligence, 1999.
14. J.R. Quinlan. Bagging, boosting, and C4.5. In Proceedings of the Thirteenth National Conference on Artificial Intelligence and the Eighth Innovative Applications of Artificial Intelligence Conference, pages 725-730, Menlo Park, August4-8 1996. AAAI Press / MIT Press.
15. StatSoft, Inc. (2004). Electronic Statistics Textbook. Tulsa, OK:StatSoft.WEBhttp://www.statsoft.com/textbook/stathome.htm
16. Mario Cannataro, Carmela Comito, Antonio Congiusta, Pierangelo Veltri: PROTEUS: a Bioinformatics Problem Solving Environment on Grids. Parallel Processing Letters 14(2): 217-237 (2004).
17. Mario Cannataro, Pietro Hiram Guzzi, Tommaso Mazza, Giuseppe Tradigo and Pierangelo Veltri Preprocessing and Analysis of Mass Spectrometry Proteomics a Data Accepted to CBMS 2005 The 18th IEEE International Symposium on Computer-Based Medical Systems CBMS, Dublin, 2005.
18. M. Cannataro, P.H. Guzzi, T. Mazza, G Tradigo and P. Veltri. Algorithms and Databases in Bioinformatics: Towards a Proteomic Ontology, accepted in ITCC 2005 International Conference on Information Technology, IEEE Computer Society press, 2005.
Ringraziamenti
Ringrazio il prof. Cannataro per l’aiuto e la disponibilità che mi ha offerto durante questo lavoro.
Ringrazio l’Ing.Pietro Hirman Guzzi, l’Ing.Tommaso Mazza peri suggerimenti e i consigli che mi hanno permesso il miglioramento di questo lavoro.