Biologia computazionale A.A. 2010-2011 semestre II U NIVERSITÀ DEGLI STUDI DI MILANO Docente: Giorgio Valentini Istruttore: Matteo Re p8p8 Hidden Markov.

Slides:



Advertisements
Presentazioni simili
Training On Line - CONP. 2 Richiesta Da Menu: Conferimenti ad inizio anno termico > Agosto > Pluriennali > Nuova Richiesta Si accede alla pagina di Richiesta.
Advertisements

Teoria e Tecniche del Riconoscimento
1 La Standard Template Library vettori, liste, mappe, …. find, replace, reverse, sort, …. puntatori intelligenti La libreria standard STL e una libreria.
Problema dellordinamento Input: Sequenza di n numeri Output: Permutazione π = tale che: a 1 a 2 …… a n Subroutine in molti problemi E possibile effettuare.
LS Tron Classe 4TC – as 2006/07 LORGANIZZAZIONE DEI PROGRAMMI UD. 8 p. 282.
PHP.
MATLAB.
MATLAB. Scopo della lezione Programmare in Matlab Funzioni Cicli Operatori relazionali Esercizi vari.
Dipartimento di Matematica
Informatica Generale Marzia Buscemi
Uso dell’errore standard di misurazione
Anno accademico Array e puntatori in C.
Implementazione dell algortimo di Viterbi attraverso la soluzione del problema di cammino mi- nimo tramite software specifico. Università degli studi di.
Capitolo 3 Strutture dati elementari Algoritmi e Strutture Dati.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Ordinamenti ottimi.
Capitolo 3 Strutture dati elementari Algoritmi e Strutture Dati.
1 FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a ° Ciclo Liste.
Process synchronization
Informatica di base A.A. 2003/2004 Algoritmi e programmi
Capitolo 4 Ordinamento: Selection e Insertion Sort Algoritmi e Strutture Dati.
Capitolo 4 Ordinamento: Selection e Insertion Sort Algoritmi e Strutture Dati.
Capitolo 4 Ordinamento: Selection e Insertion Sort Algoritmi e Strutture Dati.
Canale A. Prof.Ciapetti AA2003/04
Esercizio 4 Data una stringa P di lunghezza m e definita sullalfabeto, scrivere un programma PERL per calcolare la seguente funzione: PREFIX_FUNCTION:
MATLAB. …oggi… Programmare in Matlab Programmare in Matlab m-file m-file script script Funzioni Funzioni Cicli Cicli Operatori relazionali Operatori relazionali.
MATLAB.
MATLAB. …oggi… Programmare in Matlab Programmare in Matlab Funzioni Funzioni Cicli Cicli Operatori relazionali Operatori relazionali Indipendenza lineare,
MATLAB. …oggi… Programmare in Matlab Programmare in Matlab Funzioni Funzioni Cicli Cicli Operatori relazionali Operatori relazionali Esercizi vari Esercizi.
Algoritmi e Strutture Dati (Mod. A)
Algoritmi e Strutture Dati (Mod. B)
Il linguaggio Fortran 90: 4. Array: Vettori e Matrici
Biologia computazionale A.A semestre II U NIVERSITÀ DEGLI STUDI DI MILANO Docente: Giorgio Valentini Istruttore: Matteo Re 7 Hidden Markov Models.
Corso di Informatica Applicata Lezione 6
ITERAZIONE e RICORSIONE (eseguire uno stesso calcolo ripetutamente)
Procedure e funzioni nei linguaggi di alto livello Lab Programmazione - turno /2006.
Biologia computazionale A.A semestre II U NIVERSITÀ DEGLI STUDI DI MILANO Docente: Giorgio Valentini Istruttore: Matteo Re p5p5 UPGMA C.d.l.
Biologia computazionale A.A semestre II U NIVERSITÀ DEGLI STUDI DI MILANO Docente: Giorgio Valentini Istruttore: Matteo Re p4p4 Programmazione.
JavaScript: Array JavaScript: Array.
Cos’è un problema?.
Esercizi Puntatori, struct con campi puntatore, puntatori a struct, rapporto tra array e puntatori. FUNZIONI Passaggio di parametri per indirizzo, passaggio.
Le funzioni.
Lezione 17 maggio 2007 Parametri da linea di comando FILE Strutture (introduzione)
CHARGE PUMP Principio di Funzionamento
Biologia Computazionale - Algoritmi
BIOINFO3 - Lezione 24 ARRAY
Radix-Sort(A,d) // A[i] = cd...c2c1
Lezione 6 Strutture di controllo Il condizionale
Passo 3: calcolo del costo minimo
Ispezione lineare La funzione hash h(k,i) si ottiene da una funzione hash ordinaria h'(k) ponendo L’esplorazione inizia dalla cella h(k,0) = h'(k) e continua.
Un trucchetto di Moltiplicazione per il calcolo mentale
Introduzione agli algoritmi e strutture dati 3/ed T. H. Cormen, C. E. Leiserson, R. L. Rivest, C. Stein Copyright © 2010 – The McGraw-Hill Companies srl.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e stringhe Marco D. Santambrogio – Ver. aggiornata al 9 Agosto 2013.
14 marzo 2002 Avvisi:.
BIOINFO3 - Lezione 201 Come in ogni corso di introduzione ad un linguaggio di programmazione, proviamo a scrivere lormai celebre primo programma di prova.
BIOINFO3 - Lezione 331 SUBROUTINE IN PERL Una subroutine (funzione, metodo, procedura o sottoprogramma), e` una prozione di codice all`interno di un programma.
Sviluppare un programma in C che, dato un array da 100 elementi interi caricato con numeri casuali compresi tra [10,100], sia in grado di cercare il valore.
1 Corso di IMPIANTI DI ELABORAZIONE Seminario: Una panoramica sul PERL Docente: Ing. Vito AstaTutor: Ing. Paolo Molinari.
Array (ordinamento) CORDA – Informatica A. Ferrari.
Il linguaggio Fortran 90: 3. Procedure e Funzioni
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
ALGORITMO Un algoritmo è un procedimento che risolve un determinato problema attraverso un numero finito di passi. Un formalismo che permette di rappresentare.
Informatica 3 V anno.
Esercitazione su Vector. Permette di definire collezioni di dati generiche, che sono in grado di memorizzare elementi di ogni sottotipo di Object Definito.
Paola Disisto, Erika Griffini, Yris Noriega.  Insieme ordinato di operazioni non ambigue ed effettivamente computabili che, quando eseguito, produce.
Operatori di incremento e decremento
1 Informatica Generale Marzia Buscemi Ricevimento: Giovedì ore , Dipartimento di Informatica, stanza 306-PS o per posta.
Informatica e Informatica di Base
HMM in Image Analysis Francesco Finazzi Lezione /04/2008.
Strutture di controllo
Allineamenti Multipli Problema Durante l’evoluzione i residui importanti per il mantenimento della struttura e della funzione sono conservati. Come riconoscere.
Transcript della presentazione:

Biologia computazionale A.A semestre II U NIVERSITÀ DEGLI STUDI DI MILANO Docente: Giorgio Valentini Istruttore: Matteo Re p8p8 Hidden Markov Models C.d.l. Biotecnologie Industriali e Ambientali

Obiettivi Programmazione dinamica in PERL (2) Implementazione di un algoritmo che utilizzi tecniche di programmazione dinamica ed un modello generativo Hash di hash Hash di array Biologia computazionale Decoding di una sequenza di osservazioni dato un HMM Implementazione algoritmo VITERBI Addestramento di un HMM a partire da una collezione di sequenze biologiche a stati noti

Linee guida Il livello di complessità di questa esercitazione è alto Cercate di risolvere il problema dopo averlo suddiviso in sottoproblemi Indipendentemente dal fatto che lo script Perl funzioni o meno lesercizio NON verrà valutato se, insieme allo script, non verrà inviato anche lo pseudocodice. Modalità di svolgimento dellesercitazione: Scaricare dal sito web del corso il file HMM_exampleVIT_ls.pl Questo script è incompleto La posizione delle parti da aggiungere è evidenziata da questo commento: ########### description # FILL IN ################## description: descrizione delloperazione da svolgere Una differenza importante tra le esercitazioni precedenti e questa è che, dopo aver reso utilizzabile lo script dellalgoritmo di Viterbi, dovrete scrivere senza nessun template, degli script Perl che vi permettano di stimare i parametri dellHMM da inserire in HMM_example_VIT_ls.pl per effettuare il decoding di una sequenza proteica. I file contenenti le collezioni di sequenze sono reperibili sul sito del corso.

Permette di identificare: La sequenza di stati che, con probabilità massima, ha prodotto lintera sequenza di osservazioni (ma non ci dice nulla rispetto alla probabilità di essere in un certo stato ad una determinata posizione nella sequenza). E basato su: tecniche di programmazione dinamica. DECODING (VITERBI): Input: (osservazioni) HMM +

VITERBI: algoritmo Input: x = x 1 ……x L + HMM Inizializzazione: V 0 (0) = 1(0 è una prima posizione fittizia) V k (0) = 0, per ogni k > 0 Iterazione: V j (i) = e j (x i ) max k a kj V k (i – 1) Ptr j (i) = argmax k a kj V k (i – 1) Terminazione: P(x, *) = max k V k (L) Traceback: L * = argmax k V k (L) i-1 * = Ptr i (i) E di fondamentale importanza progettare bene la parte dellalgo- ritmo che realizza literazione ! Lo stato finale è determinato dallo stato a valore massimo dellultimo step di iterazione.

Realizzazione algoritmo VITERBI 1)Acquisizione sequenza di osservazioni 2)Definizione parametri del modello HMM 3)Inizializzazione Viterbi 4)Iterazione Viterbi 5)Determinazione ultimo stato 6)Traceback (costruzione sequenza di stati) 7)Stampa output: sequenza stati

Realizzazione algoritmo VITERBI Inizializzazione Viterbi # Initialization: my %v = ( 'F' => [0], 'L' => [-0.51] ); NB: hash di arrays. Una variabile dichiarata in questo modo è un normale hash ma i suoi valori sono arrays (come potete indovinare dalle parentesi quadre). I valori inseriti si trovano in POSIZIONE 0 (primo elemento) degli array. I valori possono essere aggiunti così: $v{chiave_hash}->[indice_array] = valore ;

Realizzazione algoritmo VITERBI Inizializzazione Viterbi # Initialization: my %v = ( 'F' => [0], 'L' => [-0.51] ); St F 0.64 L F F L L 0.59 F L Obs V_F 0 V_L p_F p_L Assumiamo uguali le probabilità Iniziali di transire in stato F o L. F = E_f(0) = 0 L = F_l(0) = Questo passaggio corrisponde alla prima colonna nella Matrice di progr. dinamica.

Realizzazione algoritmo VITERBI Definizione della procedura di iterazione Per ogni stato k, e per una posizione fissata i nella seq., V k (i) = max { 1… i-1} P[x 1 …x i-1, 1, …, i-1, x i, i = k] Massimizzazione probabilità seq. di stati da pos. 1 a pos. i-1 Osservazioni da posizione 1 a posizione i-1 Seq. Stati da posizione 1 a posizione i-1 Emissione osservazione in pos. i Assumendo di essere in stato k prob. di essere in stato k alla posizione i V l (i+1) = e l (x i+1 ) max k a kl V k (i) emissione transizione Viterbi stato k posizione i Pos. i Pos. i+1 ITERAZIONE

Realizzazione algoritmo VITERBI Definizione della procedura di iterazione V l (i+1) = e l (x i+1 ) max k a kl V k (i) emissione transizione Viterbi stato k posizione i FFF LLL 1 35 F Emissione_F(5) = 0 transizione max V F (i+1) = = 1.28

Realizzazione algoritmo VITERBI Definizione della procedura di iterazione V l (i+1) = e l (x i+1 ) max k a kl V k (i) emissione transizione Viterbi stato k posizione i FFF LLL 1 35 F Emissione_F(5) = 0 transizione max Questo calcolo va eseguito, per ogni coppia di simboli (i, i-1), per ogni possibile transizione. HMM 1° ordine

Realizzazione algoritmo VITERBI Definizione della procedura di iterazione V l (i+1) = e l (x i+1 ) max k a kl V k (i) emissione transizione Viterbi stato k posizione i FFF LLL 1 35 F Emissione_F(5) = 0 transizione max Questo calcolo va eseguito, per ogni coppia di simboli (i, i-1), per ogni possibile transizione. HMM 1° ordine

VITERBI: iterazione my $idx = 1; foreach my $tmp_obs { my $max_state = ''; my $max_state_v = 0; foreach my $state2 qw(F L) { my ($max_v, $max_prev_state, $max_path) = (-1,'X','XX'); foreach my $state1 qw(F L) { my $tmp_trans = $state1.$state2; ####### FILL IN #### VITERBI ITERATION STEP ###### # my $tmp_v = if( $tmp_v > $max_v ) { $max_v = $tmp_v; $max_prev_state = $state1; $max_path = $state1.$state2; } $path{$idx}->{$state2} = $max_prev_state; $v{$state2}->[$idx] = $max_v; } $idx += 1; } V l (i+1) = e l (x i+1 ) max k a kl V k (i) Per ogni simbolo (colonna) Per ogni transizione (doppio foreach)

VITERBI: iterazione foreach my $state2 qw(F L) { my ($max_v, $max_prev_state, $max_path) = (-1,'X','XX'); foreach my $state1 qw(F L) { my $tmp_trans = $state1.$state2; ####### FILL IN # # my $tmp_v = if( $tmp_v > $max_v ) { $max_v = $tmp_v; $max_prev_state = $state1; $max_path = $state1.$state2; } $path{$idx}->{$state2} = $max_prev_state; $v{$state2}->[$idx] = $max_v; } FFF L Scelta miglior percorso locale state2 state1 idx symbol (seq. cycle) NB: Salvataggio variabili VITERBI per lo step successivo ? (if)

VITERBI: iterazione my $idx = 1; foreach my $tmp_obs { my $max_state = ''; my $max_state_v = 0; foreach my $state2 qw(F L) { my ($max_v, $max_prev_state, $max_path) = (-1,'X','XX'); foreach my $state1 qw(F L) { my $tmp_trans = $state1.$state2; ####### FILL IN #### VITERBI ITERATION STEP ###### # my $tmp_v = if( $tmp_v > $max_v ) { $max_v = $tmp_v; $max_prev_state = $state1; $max_path = $state1.$state2; } $path{$idx}->{$state2} = $max_prev_state; $v{$state2}->[$idx] = $max_v; } $idx += 1; } Complessità temporale = K * K * L = K 2 L Lunghezza seq. : L N° stati : K

VITERBI: determinaz. stato finale ## Determine the last state ## my $last_state = 'X'; if( $v{'F'}->[$idx-1] > $v{'L'}->[$idx-1] ){ $last_state = 'F'; }else{ $last_state = 'L'; } print "Final state: $last_state (v= $v{$last_state}->[$idx-1])\n"; Controllo valori ultima colonna Valore > determina stato finale Stampa stato finale vincente e relativo valore VITERBI

VITERBI: Traceback ## Traceback ## = (); for(my $i=$idx-1;$i>0;$i--) { my $prev_state = $path{$i}->{$last_state}; $last_state = $prev_state; } St F L TRANSIZIONE: Qui $prev_state di L diventa F !!!

VITERBI: Traceback ## Traceback ## = (); for(my $i=$idx-1;$i>0;$i--) { my $prev_state = $path{$i}->{$last_state}; $last_state = $prev_state; } Si parte da $last_state dellultima colonna Ma questo viene ripetutamente sostituito dal valore del puntatore della colonna precedente. $last_state (ultima col.) Array stati prodotto da Traceback (ordine inverso) necessario reverse …

VITERBI: Traceback ## Traceback ## = (); for(my $i=$idx-1;$i>0;$i--) { my $prev_state = $path{$i}->{$last_state}; $last_state = $prev_state; } ## Print most probable path ## print "\n[Output]\n"; print print OUTPUT VITERBI: sequenza di stati che ha prodotto lintera serie di osservazioni con probabilità maggiore.

VITERBI: Output aggiuntivo my $jseq = join(" print "\tB\t$jseq\n"; my $arrayref = $v{"F"}; $arrayref }; my print "F\t$Fvit\n"; $arrayref = $v{"L"}; $arrayref }; my print "L\t$Lvit\n\n"; STAMPA MATRICE VITERBI Estrazione arrays da hash di array

VITERBI: Output aggiuntivo my $rHoH = \%path; my $curpos=0; for my $k1 ( sort {$a $b} (keys %$rHoH) ) { print "Step: $k1 \tEmission: $obs_list[$curpos]\n"; for my $k2 ( keys %{$rHoH->{ $k1 }} ) { print "\tmax path to $k2 : $rHoH->{ $k1 }{ $k2 }\t"; if($k2 ne $rHoH->{ $k1 }{ $k2 }){ print "*\n"; }else{ print "\n"; } $curpos++; print "\n"; } STAMPA MATRICE TRACEBACK (path pointers)

Esercizi Rendere lo script funzionante (3 pt) (COMMENTARE IN MANIERA DETTAGLIATA) Scaricare i seguenti files dal sito del corso: soluble_sequences.txt, transmembrane_sequences.txt e state_sequences. Essi contengono, rispettivamente, sequenze di porzioni solubili di proteine di lievito, sequenze di porzioni transmembrana di proteine di lievito e sequenze annotate (T= transmembrana, S = solubile) di proteine di lievito. Scrivete 2 script Perl. Il primo servirà a leggere I files con le sequenze amminoacidiche e a generare le probabilità di emissione per gli stati S (solubile) e T (transmembrana). Il secondo script leggerà il file delle annotazioni e stimerà le probabilità di transizione tra I due stati e le probabilità iniziali per gli stati S e T. (3 pt) Osservate le pobabilità di emissione dei diversi aa negli stati S e T. Trovate corrispondenza con le proprietà chimico-fisiche degli aa che li rendono più o meno adatti a far parte di una regione transmembrana? (commentate la risposta) (5 pt) Modificare lo script HMM_exampleVIT_ls.pl in modo da permettervi di predire se gli aa di una sequenza proteica fanno parte di una regione transmembrana. Provate poi a predire la serie di stati che, con maggior probabilità, ha emesso questa sequenza: KKIIFFFFL. (4 pt)