-------------------------------------- WARNING: Alcuni dei vostri colleghi mi hanno fatto notare che il file BIOGRID su cui si basa questa esercitazione e' troppo pesante per normali computer equipaggiati con windows Vista (in realta' e' abbastanza pesante indipendentemente dal sistema operativo). Ho quindi aggiunto un secondo datase: Expression (dati di espressione). Questo e' piu' leggero. Ho aggiunto anche una versione modificata dello script dell'esercitazione: Expression svm (sempre presente nella sezione dedicata a lezione 6) non cambia molto a parte che carica il nuovo dataset (2 files: dati e labels). -------------------------------------- Esercizi da svolgere a casa: In questa esercitazione l'obiettivo e' quello di realizzare un esperimento di addestramento / predizione basato sull'utilizzo di SVM e dati biomolecolari. Proveremo a predire la funzione di una collezione di geni codificanti proteine sulla base delle interazioni tra le proteine codificate dai geni stessi. Per quanto semplice l'esperimento si propone di mettere in luce alcuni aspetti fondamentali riguardanti la realizzazione di un esperimento di machine learning: - addestramento di una SVM - valutazione delle performances di predizione sul TRAINING set - valutazione delle performances di predizione sul TEST set - stima delle performances mediante una 5 folds cross validation Il tutto realizzato in linguaggio R. 1) Dati necessari per realizzare l'esperimento: Li potete scaricare dalla pagina web dedicata al corso di metodi bioinformatici: http://homes.dsi.unimi.it/~re/Corsi/MB10mat/Data/BioGridInter.Dataset.txt http://homes.dsi.unimi.it/~re/Corsi/MB10mat/Data/BioGridInter.Labels.txt il primo file e' una matrice composta da valori 0 o 1 in cui sia le righe che le colonne sono associate ai geni. La presenza di un 1 all'intersezione tra una riga ed una colonna indicano che le proteine codificate dai due geni interagiscono. 2) nel codice di esempio troverete uno script che esegue i seguenti passi: a) leggere dataset BIOGRID (sottoforma di dataframe) b) leggere matrice delle etichette (sottoforma di dataframe) c) extrarre il vettore delle etichette della classe funzionale '01' ("X01") d) costruire dei folds bilanciati: in pratica vengono estratti i nomi dei geni positivi (cioe' annotati alla classe funzionale '01') ed i nomi dei geni negativi. I set risultanti (+ e -) vengono divisi in 5 parti aventi approssimativamente la stessa dimensione (s1+, s2+, s3+, s4+ e s5- per quanto riguarda i positivi e s1-, s2-, s3-, s4- e s5- per quanto riguarda i negativi) I folds finali (set 1 (s1), s2, s3, s4 e s5) vengono realizzati utilizzando una parte di esempi positivi ed una parte di esempi negativi (avremo quindi s1<-c(s1+,s1-), s2<-(s2+,s2-) e cosi' via). In questo modo OGNI FOLD AVRA' QUANTITA' SIMILI DI ESEMPI POSITIVI E NEGATIVI (da qui il termine "folds bilanciati"). Una volta ottenuti i folds si effettuano addestramento e predizione come segue: FOLD1: trainingset<-c(s2,s3,s4,s5) testset<-s1 si addestra utilizzando il training set, si verificano le performances del modello addestrato sul training set e poi si predice il test set. NB: lo script effettua questa operazione SOLO per il primo fold (anche se tutti e 5 i folds vengono costruiti sottoforma di indici utilizzabili per fare subsetting) Per risolvere questo esercizio dovreste: I) eseguire lo script cosi' com'e' II) commentare le righe dello script in modo da dimostrare di aver riconosciuto l'operazione realizzata di volta in volta nel corso del programma. II) effettuare addestramento e predizione anche per i folds 2,3,4 e 5 Ricordatevi di calcolare accuratezza (accuracy) (cfr. http://en.wikipedia.org/wiki/Accuracy_and_precision ) per ogni ciclo di training e di predizione (i valori di TP, TN, FP e FN vengono visualizzati nello script mediante la funzione table). (III) Alla fine dell'esercizio dovreste calcolare l'accuratezza media di training (valore medio delle accuratezze ottenute dalla predizione degli esempi del training set di tutti e 5 i folds) e di test. NB: troverete nello script delle chiamate alle funzioni rm(varname) e gc(). La prima cancella la variabile di nome varname mentre la seconda libera la memoria non piu' associata alla variabile. WARNING: Ricordatevi dopo ogni ciclo di training e di test di cancellare le variabili inutilizzate e di ripulire la memoria (il dataset utilizzato e' grande ed e' meglio non intasare la RAM). Mi aspetto che abbiate problemi pratici nella realizzazione dei questo esercizio, o magari solo dei dubbi. Come ripeto sempre: in caso di necessita' inviate una email: re (at) dsi.unimi.it