Recette réelle pour résoudre le problème présenté (une solution possible)
Il est simple de résoudre ce problème en utilisant mon outil d'apprentissage machine préféré, vowpal wabbit qui prend en charge les fonctionnalités quadratiques (croisées) via son option -q .
fond de wabbit vowpal
Avant de passer aux détails d'utilisation. vowpal wabbit est un logiciel d'apprentissage automatique en ligne rapide et évolutif pour la classification et la régression. J'obtiens des taux d'apprentissage (formation) d'environ 5 millions de fonctionnalités par seconde sur mon bureau, sans limite de taille des données (nombre d'exemples), car en tant qu'outil d'apprentissage en ligne, il ne nécessite pas de charger toutes les données en mémoire. Il possède de nombreuses autres fonctionnalités attrayantes: la prise en charge de différents algorithmes d'apprentissage, des fonctions de perte multiple, des fonctionnalités clairsemées, des types de fonctionnalités mixtes, etc., qui dépassent le cadre de cette question.
Voici les 3 étapes pour résoudre le problème avec un commentaire:
Étape 0: Téléchargez et construisez vowpal wabbit à partir de github (voir la note en bas sur les environnements pris en charge)
Étape 1: Préparez un ensemble de formation où chaque ligne ressemble à ceci:
1.0 protein1/protein2|A p1_feature1 p1_feature2 ... |B p2_feature1 ...
...
explication du format de l'ensemble de formation:
Le nombre le plus à gauche, 1.0 , est le libellé (force d'interaction, qui peut être n'importe quelle valeur numérique), la deuxième chaîne " protéine1 / protéine2 " est une étiquette pour donner une identité à la ligne, IOW: "cette ligne représente l'interaction entre protéine1 et protéine2 "; Il est facultatif et vous pouvez le considérer comme un commentaire. Cette chaîne de balises est également répercutée dans les prédictions des modèles pour identifier quelle prédiction appartient à quel exemple, mais nous ne prédisons pas ici, nous modélisons et étudions simplement notre modèle. Vient ensuite l'espace de nom de la fonction d'entrée pour protein1 |A
(nous devons définir un espace de nom afin que nous puissions traverser différents espaces de nom, il n'a pas besoin d'êtreA
, peut être n'importe quel mot en fait, mais la première lettre doit différer entre les espaces de noms afin que nous puissions les croiser dans l'appel de commande) suivie de la liste des fonctionnalités d'entrée pour protein1 p1_...
. Vient ensuite l'espace de noms pour protein2: |B
suivi des noms de fonctionnalité de protein2 p2_...
.
L'une des beautés de vowpal wabbit est que vous pouvez utiliser des chaînes arbitraires pour les noms de fonctionnalités (cela les hachera en interne, mais cela ne vous dérange pas). Les seuls caractères spéciaux de l'ensemble de formation sont:
- espaces (évidemment)
|
, pour préfixer les entités en entrée et les espaces de nom, et
:
pour séparer les noms de fonction de leurs valeurs
Le :
n'est pas utilisé ici, car nous supposons que chaque nom de caractéristique de protéine représente un booléen (existence), donc leurs valeurs par défaut 1
et ils n'ont pas besoin de valeurs explicites.
Vous pouvez maintenant exécuter vowpal_wabbit (le nom de l'exécutable est vw
) avec -q AB
pour créer automatiquement des fonctionnalités croisées (alias termes d'interaction) entre toutes les paires possibles de fonctionnalités où une fonctionnalité est sélectionnée dans protein1 (espace de noms commençant par A
) et l'autre dans protein2 ( espace de noms commençant par B
). vowpal_wabbit lira les données, apprendra et créera un modèle avec des poids pour chaque combinaison de caractéristiques qui entraîne une certaine interaction entre la paire de protéines. Ici, au lieu de s'exécuter vw
directement, nous l'exécuterons via l' vw-varinfo
utilitaire wrapper, qui est fourni avec vowpal wabbit, comme dernière étape. vw-varinfo
s'exécute vw
pour créer le modèle et vide le modèle sous une forme lisible par l'homme.
Étape 3: appelez vw-varinfo comme ceci:
vw-varinfo -q AB -c --passes 20 your_data_set_file
vw-varinfo passera toutes les options ( -q ... -c --passes ...
) telles quelles à vw
. Seul le -q AB
pour traverser les deux espaces-noms est essentiel. J'ai ajouté une option de plus ci-dessus (exécuter plusieurs passes), ce qui, je pense, donnerait de meilleurs résultats.
Cette commande appellera vowpal wabbit ( vw
) pour s'entraîner sur l'ensemble de données et affichera la sortie que je crois que vous recherchez: toutes les interactions des fonctionnalités par ordre de force et leurs poids relatifs.
Exemple d'entrée et de sortie
Supposons que votre entrée,, prot.dat
inclut une interaction à 3 voies entre 3 protéines:
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
Il s'agit délibérément d'un exemple très minimaliste. vw
ne devrait pas avoir de problème avec des ensembles de données beaucoup plus volumineux (par exemple, des millions de lignes, des centaines de fonctionnalités), aussi, j'ai varié les étiquettes de force d'interaction dans les exemples. Si dans votre cas, l'interaction est un "oui" ou "non" booléen, utilisez simplement 0
(aucune interaction) ou 1
(il existe une interaction) comme 1er champ de chaque ligne.
Fonctionnement:
vw-varinfo -q AB -c --passes 20 prot.dat
Donnerait toutes les interactions possibles (ignorer les espaces de noms A
et B
dans la sortie) et leurs poids:
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%
Montrant que dans ces données, les contributeurs les plus importants à toutes les interactions en général sont 1) la simple présence de la k
caractéristique, 2) la k
caractéristique interagissant avec elle-même (en supposant que les deux protéines l'ont) et 3) k
interagissant avec m
. tandis que les plus faibles (contribution négative à l'interaction des protéines) sont la b
caractéristique associée à la m
caractéristique.
Voici une page HOWTO sur vw-varinfo
vowpal wabbit se construit à partir de la source (voir lien ci-dessus) et fonctionne sous Linux (et éventuellement d'autres unix), Mac OS-X et Windows.
HTH