Ermitteln der besten Funktionen in Interaktionsmodellen

13

Ich habe eine Liste von Proteinen mit ihren Merkmalswerten. Eine Beispieltabelle sieht folgendermaßen aus:

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

Zeilen sind Proteine ​​und Spalten sind Merkmale.

Ich habe auch eine Liste von Proteinen, die ebenfalls interagieren. beispielsweise

Protein3, Protein4  
Protein1, Protein2  
Protein4, Protein1  

Problem : Für eine vorläufige Analyse möchte ich wissen, welche Merkmale für Proteininteraktionen am meisten beitragen.

Ich verstehe, dass normalerweise Entscheidungsbäume verwendet werden könnten, um das wichtigste Merkmal basierend auf Entropie zu erhalten, aber ich bin nicht sicher, wie ich es auf Proteinpaare (dh Wechselwirkungen) ausdehnen soll. Gibt es eine Methode für diesen Zweck?

Anish
quelle
Sagen Sie mir, wenn ich Sie richtig verstehe: Sie haben eine Interaktionsstärke für ein Proteinpaar (die beispielsweise Null ist, wenn die Proteine ​​nicht interagieren), und dann möchten Sie einen Vektor von Merkmalen, deren Wert stark korreliert mit der Interaktionsstärke? Oder mit anderen Worten, mit denen Sie die Wechselwirkungsstärke zwischen den Proteinen vorhersagen können?
Dsign

Antworten:

25

Tatsächliches Rezept zur Lösung des vorgestellten Problems (eine mögliche Lösung)

Es ist ganz einfach, dieses Problem mit meinem Lieblingswerkzeug für maschinelles Lernen, Vowpal Wabbit , zu lösen, das quadratische (Kreuz-) Funktionen über -q unterstützt Option .

Vowpal Wabbit Hintergrund

Bevor wir uns mit den Einzelheiten der Nutzung befassen. vowpal wabbit ist eine schnelle und skalierbare Online-Lernsoftware für Klassifizierung und Regression. Ich erhalte Lernraten von ungefähr 5 Millionen Funktionen pro Sekunde auf meinem Desktop, wobei die Datengröße (Anzahl der Beispiele) unbegrenzt ist, da es als Online-Lerntool nicht erforderlich ist, die vollständigen Daten in den Speicher zu laden. Es bietet viele weitere attraktive Funktionen: Unterstützung für verschiedene Lernalgorithmen, Mehrfachverlustfunktionen, spärliche Funktionen, gemischte Funktionstypen und mehr, die sich dem Rahmen dieser Frage entziehen.

Hier sind die 3 Schritte zur Lösung des Problems mit Kommentaren:

Schritt 0: Herunterladen und Erstellen von Vowpal Wabbit von Github (siehe Hinweis unten auf unterstützten Umgebungen)

Schritt 1: Bereiten Sie ein Trainingsset vor, in dem jede Zeile folgendermaßen aussieht:

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

Erklärung des Trainingsset-Formats:

Die am weitesten links stehende Zahl, 1.0 , ist die Bezeichnung (Interaktionsstärke, die ein beliebiger numerischer Wert sein kann), die zweite Zeichenfolge ' protein1 / protein2 ' ist ein Tag, um der Linie eine Identität zu verleihen. IOW: "Diese Linie repräsentiert die Interaktion zwischen protein1 und protein2 "; Es ist optional und kann als Kommentar betrachtet werden. Diese Tag-Zeichenfolge wird auch in Vorhersagen von Modellen wiederholt, um zu identifizieren, welche Vorhersage zu welchem ​​Beispiel gehört. Wir sagen hier jedoch keine Vorhersage, sondern modellieren und studieren nur unser Modell. Als Nächstes folgt der Eingabefeature-Namensraum für protein1 (wir müssen einen Namensraum definieren, damit wir zwischen verschiedenen Namensräumen wechseln können, das muss nicht sein ' kann ein beliebiges Wort sein, der erste Buchstabe muss sich jedoch zwischen den Namensräumen unterscheiden, damit wir sie kreuzen können sie im Befehlsaufruf) gefolgt von der Liste der Eingabemerkmale für protein1 . Zuletzt folgt der Namensraum für protein2, gefolgt von den Merkmalnamen von protein2 .|AAp1_...|Bp2_...

Eine der Schönheiten von Vowpal Wabbit ist, dass Sie beliebige Zeichenfolgen für Feature-Namen verwenden können (sie werden intern gehasht, aber das ist Ihnen egal). Die einzigen Sonderzeichen im Trainingsset sind:

  • Leerzeichen (offensichtlich)
  • |, um Eingabe-Features und Namensräume voranzustellen, und
  • : Feature-Namen von ihren Werten zu trennen

Das :wird hier nicht verwendet, da angenommen wird, dass jeder Protein-Feature-Name einen Booleschen Wert (Existenz) darstellt, sodass dessen Werte standardmäßig verwendet werden 1und keine expliziten Werte erforderlich sind.

Jetzt können Sie vowpal_wabbit ausführen (der Name der ausführbaren Datei lautet vw), -q ABum automatisch Cross-Features (auch als Interaktionsbegriffe bezeichnet) zwischen allen möglichen Feature-Paaren zu erstellen, wobei ein Feature aus protein1 (Name beginnt mit A) und das andere aus protein2 ( Name beginnt mit ) ausgewählt wird . Namensraum beginnend mit B). vowpal_wabbit liest die Daten, lernt und erstellt ein Modell mit Gewichten für jede Merkmalskombination, die zu einer Interaktion zwischen dem Proteinpaar führt. Anstatt vwdirekt ausgeführt zu werden, werden wir das vw-varinfoWrapper-Dienstprogramm ausführen, das als letzten Schritt mit Vowpal Wabbit geliefert wird. vw-varinfowird ausgeführt vw, um das Modell zu erstellen, und gibt das Modell in lesbarer Form aus.

Schritt 3: Rufen Sie vw-varinfo folgendermaßen auf :

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

vw-varinfo übergibt alle Optionen ( -q ... -c --passes ...) wie sie sind vw. Lediglich die -q ABfür das Kreuzen der beiden Merkmale erforderlichen Namensräume sind von Bedeutung. Ich habe oben eine weitere Option hinzugefügt (mehrere Durchgänge ausführen), die meiner Meinung nach zu besseren Ergebnissen führen würde.

Dieser Befehl ruft vowpal wabbit ( vw) auf, um den Datensatz zu trainieren und die Ausgabe zu drucken, die Sie meiner Meinung nach suchen: alle Funktionswechselwirkungen in der Reihenfolge ihrer Stärke und ihrer relativen Gewichte.

Beispiel für Ein- und Ausgabe

Angenommen, Ihre Eingabe prot.datbeinhaltet eine 3-Wege-Interaktion zwischen 3 Proteinen:

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

Dies ist bewusst ein sehr minimalistisches Beispiel. vwSollte es keine Probleme mit viel größeren Datensätzen geben (z. B. Millionen von Zeilen, Hunderte von Features), habe ich auch die Bezeichnungen für die Interaktionsstärke in den Beispielen geändert. Wenn in Ihrem Fall die Interaktion ein boolesches "Ja" oder "Nein" ist, verwenden Sie einfach 0(keine Interaktion) oder 1(Interaktion vorhanden) als erstes Feld in jeder Zeile.

Laufen:

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

Ergibt alle möglichen Interaktionen (ignoriert die Namensräume Aund Bin der Ausgabe) und deren Gewichtung:

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%

Dies zeigt, dass in diesen Daten die Interaktionen im Allgemeinen am stärksten von 1) dem Vorhandensein des kMerkmals, 2) der kInteraktion des Merkmals mit sich selbst (vorausgesetzt, beide Proteine ​​haben es) und 3) der kInteraktion mit ihm abhängen m. während das schwächste bMerkmal (negativer Beitrag zur Proteininteraktion) mit dem Merkmal gepaart mist.

Hier ist eine HOWTO-Seite auf vw-varinfo

vowpal wabbit wird aus dem Quellcode erstellt (siehe Link oben) und läuft unter Linux (und möglicherweise anderen Unixen), Mac OS-X und Windows.

HTH

Arielf
quelle
Würde das direkt bedeuten, dass das Weglassen der schwachen Wechselwirkungen die Modellgenauigkeit verbessern würde?
Matt
Nicht unbedingt. Die Genauigkeit steigt häufig, wenn mehr Funktionen zum Lernen zur Verfügung stehen. Wenn die Funktionen jedoch in der Praxis verrauscht sind oder zu selten sind, um sie zu verallgemeinern, können sie es sein. Die meisten realen Modelle haben eine Fehlerkomponente. Mehr Daten können zu einem höheren Vertrauen in die Genauigkeit des Modells führen.
Arielf
1

Proteininteraktionsnetzwerke können durch ungerichtete Graphen dargestellt werden, wobei Proteine ​​die Knoten und deren Interaktionen die Kanten bilden. Wenn es sich bei der Proteininteraktion um ein binäres Phänomen handelt, sind die Kanten ebenfalls binär (null oder eins), andernfalls können Sie eine reelle Zahl verwenden. Sie können diesen Graphen numerisch als quadratische und insbesondere als symmetrische Matrix darstellen. Um die wichtigsten Merkmale zu finden, können Sie diejenigen beibehalten, die entlang der Eigenvektoren der Interaktionsmatrix die größte Projektion aufweisen.

Emre
quelle
Der Graph darf nicht binär sein, da ein Protein mit mehr als einem Protein interagieren kann. Gibt es eine Erweiterung für mehrere Kanten?
Anish
Das habe ich nicht mit binär gemeint. Die Frage ist, ob Sie die Intensität der Interaktion erfassen möchten oder ob dies ausreicht, um ihre Präsenz zu modellieren. Sicher, das Graphmodell kann die Wechselwirkung zwischen jedem Proteinpaar erklären.
Emre
Hmm .. Ich gehe davon aus, dass die Werte in Matrix die Anzahl der Wechselwirkungen zwischen Proteinen darstellen, wenn Sie mich bitten, eine quadratische Matrix für Proteinwechselwirkungen zu erstellen. Ich verstehe jedoch nicht, wo wir hier Funktionen verwenden. Können Sie das näher erläutern?
Anish
Die Eigenvektoren sind eine lineare Kombination der Proteine ​​im Merkmalsraum.
Emre