Rzeczywisty przepis na rozwiązanie przedstawionego problemu (jedno możliwe rozwiązanie)
Rozwiązanie tego problemu jest proste przy użyciu mojego ulubionego narzędzia do uczenia maszynowego, ślubnego wabbit, który obsługuje funkcje kwadratowe (krzyżowe) za pomocą opcji -q .
tło ślubny wabbit
Zanim przejdziemy do szczegółów użytkowania. samogłoska wabbit to szybkie i skalowalne oprogramowanie do uczenia maszynowego online do klasyfikacji i regresji. Na moim komputerze uzyskuję szybkość uczenia się wynoszącą około 5 milionów funkcji na sekundę bez ograniczeń wielkości danych (liczba przykładów), ponieważ jako narzędzie do nauki online nie wymaga ładowania pełnych danych do pamięci. Ma wiele innych atrakcyjnych funkcji: obsługę różnych algorytmów uczenia się, funkcje wielu strat, funkcje rzadkie, typy mieszane i wiele innych, które są poza zakresem tego pytania.
Oto 3 kroki do rozwiązania problemu z komentarzem:
Krok 0: Pobierz i zbuduj Wabpal Wpalbit z github (patrz uwaga na dole na temat obsługiwanych środowisk)
Krok 1: Przygotuj zestaw treningowy, w którym każda linia wygląda następująco:
1.0 protein1/protein2|A p1_feature1 p1_feature2 ... |B p2_feature1 ...
...
objaśnienie formatu zestawu treningowego:
Lewa liczba, 1,0 , jest znacznikiem (siła interakcji, która może być dowolną wartością liczbową), drugi ciąg „ białko1 / białko2 ” jest znacznikiem, który nadaje linii identyczność, IOW: „ta linia reprezentuje interakcję między białkiem 1 a białko 2 ”; Jest to opcjonalne i możesz traktować to jako komentarz. Ten ciąg tagów jest również powtarzany w prognozach z modeli, aby określić, która prognoza należy do którego przykładu, ale nie przewidujemy tutaj, po prostu modelujemy i badamy nasz model. Następnie jest przestrzeń nazw funkcji wejściowej dla białka1 |A
(musimy zdefiniować przestrzeń nazw, abyśmy mogli przechodzić między różnymi przestrzeniami nazw, nie musi to byćA
, może być dowolnym słowem, ale pierwsza litera musi się różnić między przestrzeniami nazw, abyśmy mogli je przekreślić w wywołaniu polecenia), a następnie lista funkcji wprowadzania dla białka1 p1_...
. Na końcu pojawia się przestrzeń nazw dla białka2: |B
następnie nazwy funkcji białka2 p2_...
.
Jedną z zalet ślubnego wabbita jest to, że możesz używać dowolnych ciągów znaków dla nazw funkcji (będzie je haszować wewnętrznie, ale nie obchodzi cię to). Jedynymi znakami specjalnymi w zestawie treningowym są:
- spacje (oczywiście)
|
, aby poprzedzić funkcje wprowadzania i przestrzenie nazw oraz
:
aby oddzielić nazwy funkcji od ich wartości
Nie :
jest tu używane, ponieważ zakładamy, że każda nazwa funkcji białka reprezentuje wartość logiczną (istnienie), więc ich wartości są domyślnie ustawione 1
i nie potrzebują wartości jawnych.
Teraz możesz uruchomić wedpal_wabbit (nazwa wykonywalna to vw
), -q AB
aby automatycznie utworzyć funkcje krzyżowe (aka warunki interakcji) między wszystkimi możliwymi parami funkcji, w których jedna funkcja jest wybrana z białka1 (przestrzeń nazw zaczynająca się od A
), a druga z białka2 ( przestrzeń nazw zaczynająca się od B
). samogłoska_wabbit odczyta dane, nauczy się i utworzy model z wagami dla każdej kombinacji funkcji, która powoduje pewne interakcje między parą białek. Tutaj zamiast uruchamiać vw
bezpośrednio, uruchomimy go za pomocą vw-varinfo
narzędzia do pakowania, które jest dostarczane wraz z wabbitem ślubnym, jako naszym ostatnim krokiem. vw-varinfo
uruchamia się, vw
aby utworzyć model, i zrzuca model w formie czytelnej dla człowieka.
Krok 3: Zadzwoń do vw-varinfo w następujący sposób:
vw-varinfo -q AB -c --passes 20 your_data_set_file
vw-varinfo przekaże wszystkie opcje ( -q ... -c --passes ...
) tak jak jest vw
. -q AB
Niezbędne jest tylko przejście przez dwie przestrzenie nazw funkcji. Dodałem jeszcze jedną opcję powyżej (uruchom wiele przejść), która moim zdaniem dałaby lepsze wyniki.
Polecenie to wywołuje metodę ślubu wabbit ( vw
) w celu trenowania na zestawie danych i wypisuje dane wyjściowe, które, jak sądzę, szukasz: wszystkie interakcje cech w kolejności siły i ich względnych wag.
Przykładowe wejście i wyjście
Załóżmy, że Twój wkład prot.dat
obejmuje trójstronną interakcję między 3 białkami:
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
Jest to celowo bardzo minimalistyczny przykład. vw
nie powinienem mieć problemu z dużo większymi zestawami danych (np. milionami wierszy, setkami funkcji), a także zmieniłem etykiety siły interakcji w przykładach. Jeśli w twoim przypadku interakcja jest logicznym „tak” lub „nie”, po prostu użyj 0
(brak interakcji) lub 1
(interakcja istnieje) jako pierwsze pole w każdej linii.
Bieganie:
vw-varinfo -q AB -c --passes 20 prot.dat
Dałoby wszystkie możliwe interakcje (zignoruj przestrzenie nazw A
i B
dane wyjściowe) i ich wagi:
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%
Pokazując, że w tych danych najsilniejszymi czynnikami przyczyniającymi się do jakichkolwiek interakcji są w ogólności 1) sama obecność k
cechy, 2) k
cecha oddziałująca ze sobą (zakładając, że oba białka ją mają) i 3) k
oddziałująca m
. podczas gdy najsłabsze (negatywny wkład w interakcję z białkami) to b
cecha sparowana z m
cechą.
Oto strona HOWTO na vw-varinfo
Narzędzie Ślub Walbit buduje ze źródła (patrz link powyżej) i działa w systemie Linux (i ewentualnie w innych systemach uniksowych), Mac OS-X i Windows.
HTH