Encontrar las mejores características en modelos de interacción

13

Tengo una lista de proteínas con sus valores característicos. Una tabla de muestra se ve así:

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

Las filas son proteínas y las columnas son características.

También tengo una lista de proteínas que también interactúan; por ejemplo

Protein3, Protein4  
Protein1, Protein2  
Protein4, Protein1  

Problema : para un análisis preliminar, quiero saber qué características contribuyen más para las interacciones proteicas.

Entiendo que normalmente los árboles de decisión podrían usarse para obtener la característica más importante basada en la entropía, pero no estoy seguro de cómo extenderla a pares de proteínas (es decir, interacciones). ¿Hay algún método para tal propósito?

Anish
fuente
Dime si te entiendo correctamente: tienes una fuerza de interacción para cualquier par de proteínas (que, por ejemplo, es cero si las proteínas no interactúan), y luego quieres tener un vector de características cuyo valor estará altamente correlacionado con la fuerza de interacción? O, en otras palabras, ¿qué le permitirá predecir la fuerza de interacción entre las proteínas?
dsign

Respuestas:

25

Receta real para resolver el problema presentado (una posible solución)

Es sencillo resolver este problema utilizando mi herramienta de aprendizaje automático favorita, votepal wabbit que admite funciones cuadráticas (cruzadas) a través de su opción -q .

fondo de wapal vocal

Antes de saltar a los detalles de uso. Vowardpal Wabbit es un software de aprendizaje automático en línea rápido y escalable para clasificación y regresión. Obtengo tasas de aprendizaje (capacitación) de aproximadamente 5 millones de funciones por segundo en mi escritorio sin límite de tamaño de datos (número de ejemplos) ya que como herramienta de aprendizaje en línea no requiere cargar todos los datos en la memoria. Tiene muchas otras características atractivas: soporte para diferentes algoritmos de aprendizaje, múltiples funciones de pérdida, características dispersas, tipos de características mixtas y más, que están más allá del alcance de esta pregunta.

Estos son los 3 pasos para resolver el problema con comentarios:

Paso 0: Descargue y construya Widgetpal Wabbit desde Github (vea la nota al final de los entornos compatibles)

Paso 1: Prepare un conjunto de entrenamiento donde cada línea se vea así:

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

explicación del formato del conjunto de entrenamiento:

El número más a la izquierda, 1.0 , es la etiqueta (intensidad de interacción, que puede ser cualquier valor numérico), la segunda cadena ' protein1 / protein2 ' es una etiqueta para dar identidad a la línea, IOW: "esta línea representa la interacción entre protein1 y proteína2 "; Es opcional y puede considerarlo como un comentario. Esta cadena de etiquetas también se repite en las predicciones de los modelos para identificar qué predicción pertenece a qué ejemplo, pero no estamos prediciendo aquí, solo estamos modelando y estudiando nuestro modelo. Luego viene el espacio de nombre de la característica de entrada para protein1 |A(necesitamos definir un espacio de nombre para poder cruzar entre diferentes espacios de nombre, no tiene que serA, puede ser cualquier palabra, de hecho, pero la primera letra tiene que diferir entre los espacios de nombres para que podamos cruzarlos en la llamada de comando) seguido de la lista de características de entrada para protein1 p1_.... Por último viene el espacio de nombres para protein2: |Bseguido de los nombres de características de protein2 p2_....

Una de las bellezas de votepal wabbit es que puedes usar cadenas arbitrarias para los nombres de las funciones (las hash internamente, pero no te importa). Los únicos caracteres especiales en el conjunto de entrenamiento son:

  • espacios (obviamente)
  • |, para prefijar características de entrada y espacios de nombres, y
  • : para separar nombres de características de sus valores

El :no se utiliza aquí, porque asumimos cada nombre de la función de proteínas representa un valor lógico (existencia) por lo que sus valores por defecto 1y no necesitan valores explícitos.

Ahora puede ejecutar votepal_wabbit (el nombre del ejecutable es vw) -q ABpara crear automáticamente características cruzadas (también conocidos como términos de interacción) entre todos los pares de características posibles donde una característica se selecciona de protein1 (el espacio de nombre comienza con A) y la otra de protein2 ( nombre-espacio que comienza con B). votepal_wabbit leerá los datos, aprenderá y creará un modelo con pesos para cada combinación de características que resulte en alguna interacción entre el par de proteínas. Aquí, en lugar de ejecutarlo vwdirectamente, lo ejecutaremos a través de la vw-varinfoutilidad de envoltura, que viene con votepal wabbit, como nuestro último paso. vw-varinfose ejecuta vwpara crear el modelo y vuelca el modelo en forma legible para humanos.

Paso 3: llame a vw-varinfo de esta manera:

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

vw-varinfo pasará todas las opciones ( -q ... -c --passes ...) tal cual a vw. Solo -q ABes esencial para cruzar los dos espacios de nombres de características. Agregué una opción más arriba (ejecutar múltiples pases), que creo que daría mejores resultados.

Este comando llamará a votepal wabbit ( vw) para entrenar en el conjunto de datos e imprimir la salida que creo que está buscando: todas las interacciones de características en orden de fuerza y ​​sus pesos relativos.

Ejemplo de entrada y salida

Suponga que su entrada prot.datincluye una interacción de 3 vías entre 3 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 es deliberadamente un ejemplo muy minimalista. vwno debería tener ningún problema con conjuntos de datos mucho más grandes (por ejemplo, millones de filas, cientos de características), además, varié las etiquetas de fuerza de interacción en los ejemplos. Si en su caso la interacción es un "sí" o "no" booleano, simplemente use 0(sin interacción) o 1(la interacción existe) como el primer campo en cada línea.

Corriendo:

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

Produciría todas las interacciones posibles (ignorar los espacios de nombres Ay Ben la salida) y sus 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%

Demostrando que en estos datos, los contribuyentes más fuertes a cualquier interacción en general son 1) la mera presencia de la kcaracterística, 2) la kcaracterística que interactúa consigo misma (suponiendo que ambas proteínas la tengan) y 3) que kinteractúa m. mientras que los más débiles (contribución negativa a la interacción de proteínas) son la bcaracterística combinada con la mcaracterística.

Aquí hay una página de COMO en vw-varinfo

VOBPAL Wabbit se construye a partir de la fuente (ver enlace anterior) y se ejecuta en Linux (y posiblemente otros Unixes), Mac OS-X y Windows.

HTH

arielf
fuente
¿Eso implicaría directamente que recortar las interacciones débiles mejoraría la precisión del modelo?
mate
No necesariamente. La precisión a menudo aumentará cuando haya más funciones de las que aprender. Sin embargo, si las características son en la práctica ruido, o demasiado raras para generalizar, podrían serlo. La mayoría de los modelos de la vida real tienen algún componente de error. Más datos pueden conducir a una mayor confianza en la precisión del modelo.
arielf
1

Las redes de interacción de proteínas pueden representarse mediante gráficos no dirigidos, con proteínas que forman los nodos y sus interacciones en los bordes. Si la interacción de proteínas es un fenómeno binario, los bordes también son binarios (cero o uno), de lo contrario, puede usar un número real. Puede representar numéricamente este gráfico como una matriz cuadrada y una simétrica en particular. Para encontrar las características más importantes, puede conservar las que tienen la mayor proyección a lo largo de los vectores propios de la matriz de interacción.

Emre
fuente
El gráfico puede no ser binario ... ya que una proteína puede interactuar con más de una proteína. ¿Hay una extensión para múltiples bordes?
Anish
Eso no es lo que quise decir con binario. La pregunta es si desea capturar la intensidad de la interacción o si es suficiente para modelar su presencia. Claro, el modelo gráfico puede explicar la interacción entre cualquier par de proteínas.
Emre
Hmm ... supongo que cuando me pides que cree una matriz cuadrada para las interacciones de proteínas, los valores en la matriz representan el número de interacciones entre proteínas. Pero, no veo dónde estamos usando las características aquí. Puedes profundizar sobre eso?
Anish
Los vectores propios son una combinación lineal de las proteínas en el espacio de características.
Emre