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: |B
seguido 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 1
y no necesitan valores explícitos.
Ahora puede ejecutar votepal_wabbit (el nombre del ejecutable es vw
) -q AB
para 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 vw
directamente, lo ejecutaremos a través de la vw-varinfo
utilidad de envoltura, que viene con votepal wabbit, como nuestro último paso. vw-varinfo
se ejecuta vw
para 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 AB
es 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.dat
incluye 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. vw
no 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 A
y B
en 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 k
característica, 2) la k
característica que interactúa consigo misma (suponiendo que ambas proteínas la tengan) y 3) que k
interactúa m
. mientras que los más débiles (contribución negativa a la interacción de proteínas) son la b
característica combinada con la m
caracterí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