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 .|A
A
p1_...
|B
p2_...
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 1
und keine expliziten Werte erforderlich sind.
Jetzt können Sie vowpal_wabbit ausführen (der Name der ausführbaren Datei lautet vw
), -q AB
um 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 vw
direkt ausgeführt zu werden, werden wir das vw-varinfo
Wrapper-Dienstprogramm ausführen, das als letzten Schritt mit Vowpal Wabbit geliefert wird. vw-varinfo
wird 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 AB
fü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.dat
beinhaltet 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. vw
Sollte 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 A
und B
in 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 k
Merkmals, 2) der k
Interaktion des Merkmals mit sich selbst (vorausgesetzt, beide Proteine haben es) und 3) der k
Interaktion mit ihm abhängen m
. während das schwächste b
Merkmal (negativer Beitrag zur Proteininteraktion) mit dem Merkmal gepaart m
ist.
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