Trovare le migliori caratteristiche nei modelli di interazione


13

Ho un elenco di proteine ​​con i loro valori caratteristici. Una tabella di esempio è simile alla seguente:

...............Feature1...Feature2...Feature3...Feature4  
Protein1  
Protein2  
Protein3  
Protein4  

Le righe sono proteine ​​e le colonne sono caratteristiche.

Ho anche un elenco di proteine ​​che interagiscono pure; per esempio

Protein3, Protein4  
Protein1, Protein2  
Protein4, Protein1  

Problema : per un'analisi preliminare, voglio sapere quali caratteristiche contribuiscono maggiormente alle interazioni proteiche.

La mia comprensione è che normalmente gli alberi decisionali potrebbero essere utilizzati per ottenere la caratteristica più importante basata sull'entropia, ma non sono sicuro di come estenderlo alle coppie di proteine ​​(cioè interazioni). Esiste un metodo per tale scopo?


Dimmi se ti capisco correttamente: hai una forza di interazione per qualsiasi coppia di proteine ​​(che ad esempio è zero se le proteine ​​non interagiscono), e quindi vuoi avere un vettore di caratteristiche il cui valore sarà altamente correlato con la forza di interazione? O, in altre parole, che ti permetterà di prevedere la forza di interazione tra le proteine?
firma il

Risposte:


25

Ricetta effettiva per risolvere il problema presentato (una possibile soluzione)

È semplice risolvere questo problema usando il mio strumento di apprendimento automatico preferito, vowpal wabbit che supporta le funzioni quadratiche (incrociate) tramite la sua opzione -q .

vowpal sfondo wabbit

Prima di saltare ai dettagli di utilizzo. vowpal wabbit è un software di apprendimento automatico online rapido e scalabile sia per la classificazione che per la regressione. Ottengo velocità di apprendimento (formazione) di circa 5 milioni di funzioni al secondo sul mio desktop senza limiti di dimensioni dei dati (numero di esempi) poiché come strumento di apprendimento online non richiede il caricamento di tutti i dati in memoria. Ha molte altre caratteristiche interessanti: supporto per diversi algoritmi di apprendimento, funzioni di perdita multipla, caratteristiche sparse, tipi di caratteristiche miste e altro, che esulano dallo scopo di questa domanda.

Ecco i 3 passaggi per risolvere il problema con i commenti:

Passaggio 0: scarica e crea vowpal wabbit da github (vedi nota in basso sugli ambienti supportati)

Passaggio 1: preparare un set di allenamento in cui ciascuna riga è simile alla seguente:

1.0 protein1/protein2|A p1_feature1 p1_feature2 ... |B p2_feature1 ...
...

spiegazione del formato del set di addestramento:

Il numero più a sinistra, 1.0 , è l'etichetta (forza di interazione, che può essere qualsiasi valore numerico), la seconda stringa ' protein1 / protein2 ' è un tag per dare alla linea un'identità, IOW: "questa linea rappresenta l'interazione tra protein1 e protein2" ; È facoltativo e potresti considerarlo come un commento. Questa stringa di tag viene inoltre ripetuta nelle previsioni dei modelli per identificare quale previsione appartiene a quale esempio, ma non prevediamo qui, stiamo solo modellando e studiando il nostro modello. Successivamente arriva lo spazio dei nomi delle funzioni di input per protein1 |A(dobbiamo definire uno spazio dei nomi in modo da poter incrociare tra diversi spazi dei nomi, non deve essereA, in realtà può essere qualsiasi parola, ma la prima lettera deve differire tra gli spazi dei nomi in modo che possiamo incrociarli nella chiamata di comando) seguito dall'elenco delle funzioni di input per protein1 p1_.... Ultimo viene lo spazio dei nomi per protein2: |Bseguito dai nomi delle funzioni di protein2 p2_....

Una delle bellezze di Wowbit di Vowpal è che puoi usare stringhe arbitrarie per i nomi delle caratteristiche (le cancellerà internamente, ma non ti interessa). Gli unici caratteri speciali nel set di allenamento sono:

  • spazi (ovviamente)
  • |, per aggiungere il prefisso alle funzioni di input e agli spazi dei nomi e
  • : per separare i nomi delle caratteristiche dai loro valori

Qui :non viene utilizzato, poiché assumiamo che ogni nome di caratteristica proteica rappresenti un valore booleano (esistenza), pertanto i loro valori sono predefiniti 1e non necessitano di valori espliciti.

Ora puoi eseguire vowpal_wabbit (il nome dell'eseguibile è vw) -q ABper creare automaticamente funzioni incrociate (ovvero termini di interazione) tra tutte le possibili coppie di funzioni in cui una funzione è selezionata da protein1 (spazio dei nomi che inizia con A) e l'altra da protein2 ( spazio dei nomi che inizia con B). vowpal_wabbit leggerà i dati, imparerà e creerà un modello con pesi per ogni combinazione di caratteristiche che si traduce in una certa interazione tra la coppia di proteine. Qui, invece di eseguirlo vwdirettamente, lo eseguiremo tramite l' vw-varinfoutility wrapper, che viene fornita con vowpal wabbit, come ultimo passo. vw-varinfoviene eseguito vwper creare il modello e scarica il modello in una forma leggibile dall'uomo.

Passaggio 3: chiama vw-varinfo in questo modo:

vw-varinfo -q AB -c --passes 20 your_data_set_file

vw-varinfo passerà tutte le opzioni ( -q ... -c --passes ...) così come sono vw. È -q ABessenziale solo per attraversare i due spazi dei nomi delle caratteristiche. Ho aggiunto un'altra opzione sopra (esegui più passaggi), che credo darebbe risultati migliori.

Questo comando chiamerà vowpal wabbit ( vw) per allenarsi sul set di dati e stamperà l'output che credo tu stia cercando: tutte le interazioni delle caratteristiche in ordine di forza e i relativi pesi.

Esempio di input e output

Supponiamo che il tuo input prot.datincluda un'interazione a 3 vie tra 3 proteine:

1.0 protein1/protein2|A a b |B k m
0.6 protein2/protein3|A k m |B b c d
2.2 protein1/protein3|A a b |B b c d

Questo è deliberatamente un esempio molto minimalista. vwnon dovrei avere problemi con set di dati molto più grandi (ad esempio milioni di righe, centinaia di funzionalità), inoltre, ho variato le etichette di interazione negli esempi. Se nel tuo caso l'interazione è un "sì" o "no" booleano, usa semplicemente 0(nessuna interazione) o 1(l'interazione esiste) come primo campo in ogni riga.

In esecuzione:

vw-varinfo -q AB -c --passes 20 prot.dat

Produrrebbe tutte le possibili interazioni (ignora gli spazi dei nomi Ae Bnell'output) e i loro pesi:

FeatureName        HashVal   MinVal   MaxVal    Weight   RelScore
A^k                 220268     0.00     1.00   +0.3804    100.00%
A^k^B^k             254241     0.00     0.00   +0.3804    100.00%
A^k^B^m              93047     0.00     0.00   +0.3804    100.00%
B^k                 178789     0.00     1.00   +0.1011     26.58%
B^m                  17595     0.00     1.00   +0.1011     26.58%
[... trimmed for brevity ...]
A^m^B^m             141879     0.00     0.00   +0.0000      0.00%
Constant            116060     0.00     0.00   +0.1515      0.00%
A^b                 139167     0.00     1.00   -0.0641    -16.86%
A^b^B^k             204424     0.00     0.00   -0.1233    -32.43%
A^b^B^m              43230     0.00     0.00   -0.1233    -32.43%

Mostrando che in questi dati i più forti contributori a qualsiasi interazione in generale sono 1) la semplice presenza della kfunzione, 2) la kcaratteristica che interagisce con se stessa (supponendo che entrambe le proteine ​​ce l'hanno) e 3) che kinteragisce con m. mentre il più debole (contributo negativo all'interazione delle proteine) è la bfunzione accoppiata con la mfunzione.

Ecco una pagina HOWTO su vw-varinfo

vowpal wabbit si basa sul sorgente (vedi link sopra) e funziona su Linux (e possibilmente su altri unix), Mac OS-X e Windows.

HTH


Ciò implicherebbe direttamente che tagliare le interazioni deboli migliorerebbe l'accuratezza del modello?
matt

Non necessariamente. La precisione aumenterebbe spesso quando ci sono più funzioni da cui imparare. Tuttavia, se le funzionalità sono in pratica rumori o troppo rari per generalizzare, potrebbero esserlo. La maggior parte dei modelli di vita reale ha qualche componente di errore. Più dati possono portare ad una maggiore fiducia nell'accuratezza del modello.
Ari

1

Le reti di interazione delle proteine ​​possono essere rappresentate da grafici non indirizzati, con le proteine ​​che formano i nodi e le loro interazioni ai bordi. Se l'interazione proteica è un fenomeno binario, anche i bordi sono binari (zero o uno), altrimenti è possibile utilizzare un numero reale. Puoi rappresentare numericamente questo grafico come una matrice quadrata e in particolare una simmetrica. Per trovare le funzionalità più importanti è possibile conservare quelle che presentano la massima proiezione lungo gli autovettori della matrice di interazione.


Il grafico potrebbe non essere binario .. poiché una proteina può interagire con più di una proteina. Esiste un'estensione per più spigoli?
Anish,

Non è quello che intendevo per binario. La domanda è se vuoi catturare l' intensità dell'interazione o se è sufficiente modellare la sua presenza. Certo, il modello grafico può rappresentare l'interazione tra qualsiasi coppia di proteine.
Emre,

Hmm .. Sto assumendo che quando mi chiedi di creare una matrice quadrata per le interazioni tra proteine, i valori nella matrice rappresentano il numero di interazioni tra proteine. Ma non vedo dove stiamo usando le funzionalità qui. Puoi approfondire questo?
Anish,

Gli autovettori sono una combinazione lineare delle proteine ​​nello spazio delle caratteristiche.
Emre,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.