Encontrando os melhores recursos nos modelos de interação

13

Eu tenho uma lista de proteínas com seus valores de característica. Uma tabela de amostra é assim:

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

Linhas são proteínas e colunas são características.

Eu também tenho uma lista de proteínas que interagem também; por exemplo

Protein3, Protein4  
Protein1, Protein2  
Protein4, Protein1  

Problema : Para uma análise preliminar, quero saber quais recursos contribuem mais para as interações proteicas.

Meu entendimento é que normalmente as árvores de decisão podem ser usadas para obter o recurso mais importante com base na entropia, mas não sei como estendê-lo aos pares de proteínas (ou seja, interações). Existe um método para esse fim?

Anish
fonte
Diga-me se eu entendi corretamente: você tem uma força de interação para qualquer par de proteínas (que, por exemplo, é zero se as proteínas não interagirem) e, em seguida, você deseja ter um vetor de características cujo valor será altamente correlacionado com a força da interação? Ou, em outras palavras, o que permitirá prever a força da interação entre as proteínas?
usar o seguinte comando

Respostas:

25

Receita real para resolver o problema apresentado (uma solução possível)

É simples resolver esse problema usando minha ferramenta favorita de aprendizado de máquina, o vowpal wabbit, que suporta recursos quadráticos (cruzados) por meio da opção -q .

fundo de wabbit vowpal

Antes de entrarmos nos detalhes de uso. O vowpal wabbit é um software de aprendizado de máquina on-line rápido e escalável para classificação e regressão. Recebo taxas de aprendizado (treinamento) de cerca de 5 milhões de recursos por segundo na minha área de trabalho, sem limite de tamanho de dados (número de exemplos), pois como ferramenta de aprendizado on-line, não é necessário carregar os dados completos na memória. Ele tem muitos outros recursos atraentes: suporte a diferentes algoritmos de aprendizado, múltiplas funções de perda, recursos esparsos, tipos de recursos mistos e muito mais, que estão além do escopo desta pergunta.

Aqui estão as 3 etapas para resolver o problema com comentários:

Etapa 0: Faça o download e crie o vowpal wabbit no github (veja a nota na parte inferior dos ambientes suportados)

Etapa 1: prepare um conjunto de treinamento em que cada linha se pareça com isto:

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

explicação do formato do conjunto de treinamento:

O número mais à esquerda, 1.0 , é o rótulo (força da interação, que pode ser qualquer valor numérico), a segunda sequência ' protein1 / protein2 ' é uma tag para dar identidade à linha, IOW: "essa linha representa a interação entre a proteína1 e protein2 "; É opcional e você pode pensar nisso como um comentário. Essa string de tag também é ecoada nas previsões de modelos para identificar qual previsão pertence a qual exemplo, mas não estamos prevendo aqui, estamos apenas modelando e estudando nosso modelo. Em seguida, vem o espaço de nome do recurso de entrada para protein1 |A(precisamos definir um espaço de nome para que possamos cruzar entre diferentes espaços de nome, ele não precisa serA, pode ser qualquer palavra de fato, mas a primeira letra deve diferir entre os espaços de nome para que possamos cruzá-los na chamada de comando) seguida pela lista de recursos de entrada para protein1 p1_.... Por último, vem o espaço de nomes para protein2: |Bseguido pelos nomes dos recursos de protein2 p2_....

Uma das belezas do vowpal wabbit é que você pode usar seqüências arbitrárias para nomes de recursos (ele os mistura internamente, mas você não se importa). Os únicos caracteres especiais no conjunto de treinamento são:

  • espaços (obviamente)
  • |, para prefixar recursos de entrada e espaços de nome e
  • : separar nomes de recursos de seus valores

O :não é usado aqui, porque assumimos que todo nome de recurso de proteína representa um booleano (existência), portanto seus valores são padronizados 1e eles não precisam de valores explícitos.

Agora você pode executar vowpal_wabbit (o nome do executável é vw) com -q ABpara criar automaticamente recursos cruzados (termos de interação) entre todos os pares possíveis de recursos em que um recurso é selecionado a partir de protein1 ( namespace começando com A) e outro a partir de protein2 ( espaço de nome começando com B). O vowpal_wabbit lerá os dados, aprenderá e criará um modelo com pesos para cada combinação de recursos que resulta em alguma interação entre o par de proteínas. Aqui, em vez de executar vwdiretamente, executamos o vw-varinfoutilitário wrapper, que vem com o vowpal wabbit, como nosso último passo. vw-varinfoé executado vwpara criar o modelo e despeja o modelo na forma legível por humanos.

Etapa 3: chame vw-varinfo assim:

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

vw-varinfo passará todas as opções ( -q ... -c --passes ...) como estão vw. Somente o -q ABcruzamento dos dois espaços de nome dos recursos é essencial. Eu adicionei mais uma opção acima (execute várias passagens), que acredito que daria melhores resultados.

Este comando chamará vowpal wabbit ( vw) para treinar no conjunto de dados e imprimirá a saída que acredito estar procurando: todas as interações de recursos em ordem de força e seus pesos relativos.

Exemplo de entrada e saída

Suponha que sua entrada prot.datinclua uma interação de três vias entre três proteínas:

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

Este é deliberadamente um exemplo muito minimalista. vwnão deveria ter nenhum problema com conjuntos de dados muito maiores (por exemplo, milhões de linhas, centenas de recursos); também variei os rótulos de força da interação nos exemplos. Se, no seu caso, a interação for um "sim" ou "não" booleano, basta usar 0(sem interação) ou 1(existe interação) como o primeiro campo em cada linha.

Corrida:

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

Produziria todas as interações possíveis (ignore os espaços de nomes Ae Bna saída) e seus pesos:

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 que nesses dados os contribuintes mais fortes para qualquer interação em geral são 1) a mera presença do krecurso, 2) o krecurso interagindo consigo mesmo (supondo que ambas as proteínas o tenham) e 3) kinteragindo m. enquanto os mais fracos (contribuição negativa para a interação de proteínas) são o brecurso emparelhado com o mrecurso.

Aqui está uma página HOWTO em vw-varinfo

O vowpal wabbit constrói a partir da fonte (veja o link acima) e roda no Linux (e possivelmente outros unixes), Mac OS-X e Windows.

HTH

arielf
fonte
Isso implicaria diretamente que aparar as interações fracas melhoraria a precisão do modelo?
Matt
Não necessariamente. A precisão geralmente aumenta quando há mais recursos para aprender. No entanto, se os recursos estiverem na prática com ruído, ou forem muito raros para generalizar, eles podem. A maioria dos modelos da vida real possui algum componente de erro. Mais dados podem levar a uma maior confiança na precisão do modelo.
Arielf 12/08/19
1

As redes de interação proteica podem ser representadas por gráficos não direcionados, com proteínas formando os nós e suas interações nas bordas. Se a interação protéica for um fenômeno binário, as bordas também serão binárias (zero ou uma), caso contrário, você poderá usar um número real. Você pode representar numericamente esse gráfico como uma matriz quadrada e simétrica em particular. Para encontrar os recursos mais importantes, você pode reter aqueles que têm a maior projeção ao longo dos vetores próprios da matriz de interação.

Emre
fonte
O gráfico pode não ser binário. Como uma proteína pode interagir com mais de uma proteína. Existe uma extensão para várias arestas?
Anish
Não foi isso que eu quis dizer com binário. A questão é se você deseja capturar a intensidade da interação ou se é suficiente para modelar sua presença. Certamente, o modelo gráfico pode explicar a interação entre qualquer par de proteínas.
Emre
Hmm .. Estou assumindo que quando você me pede para criar uma matriz quadrada para interações proteicas, os valores na matriz representam o número de interações entre proteínas. Mas não vejo onde estamos usando os recursos aqui. Você pode elaborar sobre isso?
Anish
Os autovetores são uma combinação linear das proteínas no espaço de recursos.
Emre