Questo progetto cerca di capire chi controlla chi tra i geni. I geni sono come persone in un'azienda: alcuni (chiamati Fattori di Trascrizione o TF) danno ordini, altri (i geni target) ricevono ordini. Il nostro obiettivo è costruire una mappa di chi dà ordini a chi.
Il framework è diviso in 7 fasi principali:
- Carichiamo i dati dal dataset DREAM5
- Prendiamo le misure di quanto ogni gene è "attivo" (espressione genica)
- Carichiamo i nomi di tutti i geni e quali sono i "capi" (TF)
- Carichiamo le relazioni vere che già conosciamo per fare controlli
- Calcoliamo statistiche utili per ogni gene:
- Varianza: quanto cambia l'attività del gene
- Skewness: se il gene è sempre attivo o sempre spento
- Autocorrelazione: se l'attività è costante nel tempo
- Normalizziamo tutto per mettere i dati sulla stessa scala
- Aggiungiamo un'etichetta che dice se un gene è un "capo" (TF) o no
- Costruiamo una rete che collega i geni simili
- Per ogni gene, troviamo i 5 geni che si comportano in modo più simile
- Usiamo due misure di somiglianza:
- Correlazione di Pearson: se i geni si accendono/spengono insieme
- Similarità Coseno: se i pattern di attività sono simili
- Calcoliamo quanto ogni gene è "centrale" nella rete
- Usiamo una rete neurale speciale che sa lavorare con grafi
- Il modello GAT (Graph Attention Network) guarda i geni vicini e decide quali sono più importanti
- Ha due livelli per imparare pattern semplici e complessi
- Produce una "carta d'identità" numerica per ogni gene (embedding)
- Prende due "carte d'identità" (un TF e un gene normale)
- Le combina e predice se il TF controlla quel gene
- È una rete neurale semplice a 3 livelli
- Per insegnare meglio al modello, gli diamo esempi difficili
- Trova coppie TF-gene che NON sono collegate ma che potrebbero sembrarlo
- Questo aiuta il modello a non confondersi
- Il modello impara dai dati per 100 epoche
- Ad ogni epoch il modello fa predizioni e vede dove sbaglia
- Corregge i suoi errori e migliora le prestazioni
- Usiamo una "focal loss function" custom che si concentra sugli esempi difficili
- Il modello crea gli "iperarchi" - gruppi di geni controllati dallo stesso TF
- Per ogni TF, trova tutti i geni che controlla
- Calcola un punteggio di fiducia per ogni predizione
Il risultato finale sono iperarchi:
- Ogni iperarco è un gruppo con 1 TF (il capo) e diversi geni (i subordinati)
- Esempio:
{TF_A, Gene1, Gene2, Gene3}significa che TF_A controlla Gene1, Gene2 e Gene3
enhaced_Hygrn_model.py: Contiene tutto il codice del frameworktest_Hygrn_model.ipynb: Notebook per testare il modello- Cartella
Dati/: Contiene tutti i dataset necessari
Problema (1): Il framework lavora creando in realtà grafi normali da cui poi deterministicamente si estraggono gruppi (iperarchi).
Problema (2) Hard Negative Sampling troppo lento: Per ogni TF, calcola punteggi per TUTTI i geni
Problema (3) Il decoder usa solo una rete neurale semplice che potrebbe non catturare interazioni complesse tra TF e geni.
Problema (4) Le metriche valutano solo coppie TF-gene, non la qualità degli iperarchi.
- Vera gestione di ipergrafi: Usare librerie specializzate come
DHG - Preprocessing avanzato: Rimuovere outliers e geni con bassa varianza
- Learning rate scheduling: Adattare la velocità di apprendimento
- Ensemble methods: Combinare più modelli per risultati migliori