Logotipo de Zephyrnet

Predicción interactiva de bioactividad con redes neuronales multitarea

Fecha:

UN QUÍMICO-OG post, Red neuronal multitarea en ChEMBL con PyTorch 1.0 y RDKit, de Eloy, desde 2019 mostró cómo usar datos de ChEMBL para entrenar una red neuronal multitarea para la predicción de bioactividad, específicamente para predecir objetivos en los que una molécula determinada podría ser bioactiva . Eloy tiene enlaces a más información en su publicación de blog, pero las redes neuronales multitarea son bastante interesantes porque la forma en que se transfiere la información entre las diferentes tareas durante el entrenamiento puede generar predicciones para las tareas individuales que son más precisas que las que obtendrías si acaba de construir un modelo solo para esa tarea.

Es un gran contraste con la mayoría de los humanos: nuestro rendimiento tiende a disminuir en el momento en que comenzamos a realizar múltiples tareas. En cualquier caso, me parece un problema interesante y Eloy proporcionó todo el código necesario para obtener los datos de ChEMBL y reproducir su trabajo, así que decidí retomar esto y crear un flujo de trabajo KNIME para usar el modelo multitarea. Por una vez, no tuve que dedicar mucho tiempo a la preparación de datos (¡gracias, Eloy!), así que pude usar directamente los cuadernos Jupyter de Eloy para entrenar y validar un modelo. Después de dejar que mi estación de trabajo funcionara durante un tiempo, tenía un modelo entrenado listo para funcionar; ahora solo necesitaba construir un flujo de trabajo de predicción.

¿QUIERES ESTAR INFORMADO?

Reciba nuestro boletín semanal en su bandeja de entrada con los últimos artículos, seminarios web, eventos, cursos en línea y más sobre gestión de datos.

Cargando la Red y Generando Predicciones

Los portátiles de Eloy construyen la red neuronal multitarea usando PyTorch, que la plataforma de mi empresa no admite directamente, pero afortunadamente ambas plataformas admiten la ONNX (Open Neural Network Exchange) formato para intercambiar redes entrenadas entre kits de herramientas de redes neuronales. Así que pude exportar mi modelo PyTorch entrenado para la predicción de bioactividad a ONNX, leerlo en la plataforma de mi empresa con el Lector de red ONNX nodo, conviértalo en una red TensorFlow con el Convertidor de red ONNX a TensorFlow nodo, y generar predicciones usando el Ejecutor de red de TensorFlow nodo. 

Ahora que tengo la red entrenada cargada en la plataforma, necesito crear la entrada correcta para ella. Dado que el modelo fue entrenado usando el RDKit, esto es bastante fácil usando el Integración RDKit KNIME.

Sé que el modelo fue entrenado usando la huella dactilar Morgan de RDKit con un radio de 2 y una longitud de 1024 bits y puedo generar las mismas huellas dactilares con el Huella digital de RDKit nodo. Como no puedo pasar huellas dactilares directamente a la red neuronal, también agrego un Expandir vector de bits para convertir los bits individuales de las huellas dactilares en columnas en la tabla de entrada. Los compuestos para los que generaremos huellas dactilares se leen desde un archivo de texto que contiene SMILES y una columna con identificaciones de compuestos que usaremos como nombres. El conjunto de datos de muestra utilizado en esta publicación de blog (y para el flujo de trabajo de ejemplo) se compone de un conjunto de moléculas exportadas de ChEMBL y un par de compuestos inventados que creé editando manualmente las moléculas de ChEMBL.

Fig. 1: aquí vemos la parte del flujo de trabajo que maneja tanto la carga de la red neuronal como la preparación de la entrada para ella.

La salida del Ejecutor de red de TensorFlow node es una tabla con una fila para cada molécula para la que generamos una predicción y una columna para cada uno de los 560 objetivos en los que se entrenó el modelo. Las celdas contienen las puntuaciones de los compuestos frente a los objetivos correspondientes, Figura 2.

Fig. 2: Predicciones de la Ejecutor de red de TensorFlow nodo

En este punto, tenemos un flujo de trabajo de predicción bastante mínimo: podemos usar la red neuronal multitarea para generar puntajes para nuevos compuestos. En el resto de esta publicación, mostraré un par de formas de presentar los resultados para que sea un poco más fácil para las personas trabajar con ellos de manera interactiva.

Mostrar las predicciones en un mapa de calor interactivo

La primera vista interactiva que usaremos para mostrar las predicciones de la red neuronal multitarea incluye un mapa de calor con las propias predicciones y una vista de mosaico que muestra las moléculas para las que se generaron las predicciones. El mapa de calor tiene los compuestos en filas y los objetivos en columnas con el color de la celda determinado por las puntuaciones calculadas. La vista de mosaico está configurada para mostrar solo las filas seleccionadas.

Fig. 3: Vista interactiva que muestra las predicciones del modelo y los compuestos

El componente "mostrar predicciones como mapa de calor" que expone esta vista interactiva está configurado para que solo las filas seleccionadas pasen a su puerto de salida. Entonces, en el ejemplo que se muestra en la Figura 3, solo habría dos filas en la salida del componente "mostrar predicciones como mapa de calor".

El flujo de trabajo realiza una cantidad significativa de procesamiento de datos para construir el mapa de calor. No entraré en detalles aquí, pero el trabajo principal se produce en el metanodo de "reformateo con biclasificación", que reordena los compuestos y los objetivos en función de sus puntuaciones medianas. Esto trae objetivos que tienen más compuestos de puntuación alta a la izquierda del mapa de calor y compuestos con puntuaciones altas contra más objetivos en la parte superior del mapa de calor. Cualitativamente, el mapa de calor debería volverse más rojo a medida que se desplaza hacia arriba y hacia la izquierda y más azul a medida que se desplaza hacia abajo y hacia la derecha. No hay una mejor respuesta en cuanto a los mejores criterios de clasificación para este propósito, así que siéntase libre de jugar con la configuración de los nodos de clasificación en el metanodo "reformatear con biclasificación" si desea probar algo que no sea la mediana.

Fig. 4: La parte del flujo de trabajo de predicción que genera los datos y muestra la vista de mapa de calor interactivo

Comparación de predicciones con valores medidos

Una excelente manera de ganar confianza en las predicciones de un modelo es compararlas con los datos medidos. Generalmente, no podemos hacer esto, pero a veces habrá datos medidos relevantes disponibles para los compuestos para los que estamos generando predicciones. En estos casos, sería genial mostrar los datos medidos junto con las predicciones. El resto del flujo de trabajo está ahí para permitirnos hacer precisamente eso, Figura 5.

Fig. 5: La parte del flujo de trabajo para comparar predicciones con datos medidos de ChEMBL

Esto comienza generando claves InChI para las moléculas en el conjunto de predicción, buscándolas usando la API REST de ChEMBL y luego usando la API nuevamente para encontrar datos de actividad relevantes que se midieron para esos compuestos. Daria Goldman escribió una publicación de blog, titulada Una forma RESTful de buscar y recuperar datos hace un par de años, mostrando cómo hacer esto. Modifiqué los componentes que introdujo en esa publicación de blog para este caso de uso y combiné todo en el metanodo "recuperar datos de ChEMBL cuando esté presente".

La tabla de salida del metanodo tiene una fila para cada compuesto, una ID de ChEMBL para cada compuesto que se encontró en ChEMBL y una columna para cada objetivo donde hubo un valor experimental en ChEMBL para uno de los compuestos en el conjunto de predicción. Estos datos se pueden visualizar, junto con las predicciones, utilizando el componente "Mostrar predicciones y medidas", Figura 6.

Fig. 6: La vista interactiva "mostrar predicciones y medidas"

Esta vista interactiva se basa principalmente en el gráfico de dispersión de la parte superior. Cada punto en la gráfica corresponde a un compuesto con datos medidos contra un objetivo. Los CHEMBLID de los objetivos están en el eje X y los valores de pCHEMBL medidos (según lo proporcionado por los servicios web de ChEMBL) están en el eje Y. El tamaño de los puntos en el gráfico está determinado por la puntuación calculada de ese compuesto para ese objetivo. El diagrama de dispersión es interactivo: la selección de puntos muestra los compuestos relevantes en la tabla en la parte inferior izquierda de la vista y las puntuaciones correspondientes y los datos medidos en la tabla en la parte inferior derecha.

Si el modelo está funcionando muy bien, esperaría que el gráfico de dispersión de la Figura 6 tuviera puntajes grandes (puntos grandes) para los compuestos que tienen una actividad alta (valores pCHEMBL grandes), es decir, puntos más grandes hacia la parte superior del gráfico y puntos más pequeños. apunta hacia el fondo. Eso es más o menos lo que observamos. Claramente hay algunos valores atípicos, pero probablemente aún esté bien prestar al menos algo de atención a las predicciones del modelo para los otros compuestos/objetivos. (Nota: esta no es una evaluación completamente válida ya que la mayoría de los puntos de datos que estoy usando en este ejemplo estaban realmente en el conjunto de entrenamiento para el modelo. El ejemplo se muestra aquí para demostrar la vista y su interactividad).

Resumen

En esta publicación de blog, he demostrado cómo importar una red neuronal multitarea para la predicción de bioactividad creada con PyTorch en un flujo de trabajo y luego usarla para generar predicciones para nuevos compuestos. También mostré un par de vistas interactivas para trabajar y ganar confianza en las predicciones del modelo. El flujo de trabajo, el modelo entrenado y los datos de muestra están disponibles en el centro para que los descargue, aprenda y use en su propio trabajo.

Descargue el flujo de trabajo "generar predicciones con ONNX" desde el centro esta página.

Como se publicó por primera vez en el blog de KNIME.

punto_img

Información más reciente

punto_img