Saltar al contenido

Desarrollar una red neuronal para el conjunto de datos de mamografía de Woods

5 de abril de 2021

Puede resultar complicado desarrollar un modelo predictivo de red neuronal para un nuevo conjunto de datos.

Un enfoque es inspeccionar primero el conjunto de datos y desarrollar ideas sobre qué modelos podrían funcionar, luego explorar la dinámica de aprendizaje de modelos simples en el conjunto de datos y, finalmente, desarrollar y ajustar un modelo para el conjunto de datos con un arnés de prueba robusto.

Este proceso se puede utilizar para desarrollar modelos de redes neuronales efectivos para problemas de modelado predictivo de clasificación y regresión.

En este tutorial, descubrirá cómo desarrollar un modelo de red neuronal de perceptrón multicapa para el conjunto de datos de clasificación de mamografías de Wood.

Después de completar este tutorial, sabrá:

  • Cómo cargar y resumir el conjunto de datos de mamografía de Wood y usar los resultados para sugerir preparaciones de datos y configuraciones de modelos para usar.
  • Cómo explorar la dinámica de aprendizaje de modelos MLP simples en el conjunto de datos.
  • Cómo desarrollar estimaciones sólidas del rendimiento del modelo, ajustar el rendimiento del modelo y hacer predicciones sobre nuevos datos.

Empecemos.

Desarrollar una red neuronal para el conjunto de datos de mamografía de Woods

Desarrollar una red neuronal para el conjunto de datos de mamografía de Woods
Foto de Larry W. Lo, algunos derechos reservados.

Descripción general del tutorial

Este tutorial se divide en 4 partes; Ellos son:

  1. Conjunto de datos de mamografía de Woods
  2. Dinámica de aprendizaje de redes neuronales
  3. Evaluación robusta del modelo
  4. Modelo final y hacer predicciones

Conjunto de datos de mamografía de Woods

El primer paso es definir y explorar el conjunto de datos.

Trabajaremos con el «mamografía«Conjunto de datos de clasificación binaria estándar, a veces llamado»Mamografía de Woods“.

El conjunto de datos se atribuye a Kevin Woods, et al. y el artículo de 1993 titulado «Evaluación comparativa de técnicas de reconocimiento de patrones para la detección de microcalcificaciones en mamografía».

El foco del problema está en la detección del cáncer de mama a partir de exploraciones radiológicas, específicamente la presencia de grupos de microcalcificaciones que aparecen brillantes en una mamografía.

Hay dos clases y el objetivo es distinguir entre microcalcificaciones y no microcalcificaciones utilizando las características de un objeto segmentado dado.

  • No microcalcificaciones: caso negativo o clase mayoritaria.
  • Microcalcificaciones: caso positivo o clase minoritaria.

El conjunto de datos de mamografía es un conjunto de datos de aprendizaje automático estándar ampliamente utilizado, que se utiliza para explorar y demostrar muchas técnicas diseñadas específicamente para la clasificación desequilibrada.

Nota: Para ser claros, somos NO «resolviendo el cáncer de mama“. Estamos explorando un conjunto de datos de clasificación estándar.

A continuación se muestra una muestra de las primeras 5 filas del conjunto de datos

Puede obtener más información sobre el conjunto de datos aquí:

Podemos cargar el conjunto de datos como un DataFrame de pandas directamente desde la URL; por ejemplo:

Al ejecutar el ejemplo, se carga el conjunto de datos directamente desde la URL e informa la forma del conjunto de datos.

En este caso, podemos confirmar que el conjunto de datos tiene 7 variables (6 entradas y una salida) y que el conjunto de datos tiene 11,183 filas de datos.

Este es un conjunto de datos de tamaño modesto para una red neuronal y sugiere que una red pequeña sería apropiada.

También sugiere que el uso de la validación cruzada de k-fold sería una buena idea dado que dará una estimación más confiable del rendimiento del modelo que una división de tren / prueba y porque un solo modelo encajará en segundos en lugar de horas o días con el conjuntos de datos más grandes.

A continuación, podemos obtener más información sobre el conjunto de datos observando estadísticas resumidas y una gráfica de los datos.

Ejecutar el ejemplo primero carga los datos antes y luego imprime estadísticas de resumen para cada variable.

Podemos ver que los valores son generalmente pequeños con medias cercanas a cero.

Luego se crea un gráfico de histograma para cada variable.

Podemos ver que quizás la mayoría de las variables tienen una distribución exponencial, y quizás la variable 5 (la última variable de entrada) es gaussiana con valores atípicos / faltantes.

Es posible que tengamos algún beneficio al usar una transformada de potencia en cada variable para hacer que la distribución de probabilidad sea menos sesgada, lo que probablemente mejorará el rendimiento del modelo.

Histogramas del conjunto de datos de clasificación de mamografías

Histogramas del conjunto de datos de clasificación de mamografías

Puede ser útil saber qué tan desequilibrado está realmente el conjunto de datos.

Podemos usar el objeto Contador para contar el número de ejemplos en cada clase, luego usar esos conteos para resumir la distribución.

El ejemplo completo se enumera a continuación.

Ejecutar el ejemplo resume la distribución de clases, confirmando el desequilibrio de clases severo con aproximadamente el 98 por ciento para la clase mayoritaria (sin cáncer) y aproximadamente el 2 por ciento para la clase minoritaria (cáncer).

Esto es útil porque si usamos la precisión de clasificación, cualquier modelo que logre una precisión menor a aproximadamente el 97,7% no tiene habilidad en este conjunto de datos.

Ahora que estamos familiarizados con el conjunto de datos, exploremos cómo podríamos desarrollar un modelo de red neuronal.

Dinámica de aprendizaje de redes neuronales

Desarrollaremos un modelo de perceptrón multicapa (MLP) para el conjunto de datos utilizando TensorFlow.

No podemos saber qué modelo de arquitectura de hiperparámetros de aprendizaje sería bueno o mejor para este conjunto de datos, por lo que debemos experimentar y descubrir qué funciona bien.

Dado que el conjunto de datos es pequeño, un tamaño de lote pequeño probablemente sea una buena idea, p. Ej. 16 o 32 filas. Usar la versión de Adam del descenso de gradiente estocástico es una buena idea al comenzar, ya que adaptará automáticamente la tasa de aprendizaje y funciona bien en la mayoría de los conjuntos de datos.

Antes de evaluar los modelos en serio, es una buena idea revisar la dinámica de aprendizaje y ajustar la arquitectura del modelo y la configuración de aprendizaje hasta que tengamos una dinámica de aprendizaje estable, luego buscar sacar el máximo provecho del modelo.

Podemos hacer esto usando una división simple de tren / prueba de los datos y revisar los gráficos de las curvas de aprendizaje. Esto nos ayudará a ver si estamos aprendiendo demasiado o mal; entonces podemos adaptar la configuración en consecuencia.

Primero, debemos asegurarnos de que todas las variables de entrada sean valores de punto flotante y codificar la etiqueta de destino como valores enteros 0 y 1.

A continuación, podemos dividir el conjunto de datos en variables de entrada y salida, luego en conjuntos de prueba y tren 67/33.

Debemos asegurarnos de que la división esté estratificada por clase, asegurándonos de que el tren y los conjuntos de prueba tengan la misma distribución de etiquetas de clase que el conjunto de datos principal.

Podemos definir un modelo MLP mínimo.

En este caso, usaremos una capa oculta con 50 nodos y una capa de salida (elegida arbitrariamente). Usaremos la función de activación de ReLU en la capa oculta y el «él_normal”Inicialización de peso, ya que juntos, son una buena práctica.

La salida del modelo es una activación sigmoidea para la clasificación binaria y minimizaremos la pérdida de entropía cruzada binaria.

Ajustaremos el modelo para 300 épocas de entrenamiento (elegidas arbitrariamente) con un tamaño de lote de 32 porque es un conjunto de datos de tamaño modesto.

Estamos ajustando el modelo a datos sin procesar, lo que creemos que podría ser una buena idea, pero es un punto de partida importante.

Al final del entrenamiento, evaluaremos el desempeño del modelo en el conjunto de datos de prueba y reportaremos el desempeño como la precisión de la clasificación.

Finalmente, trazaremos las curvas de aprendizaje de la pérdida de entropía cruzada en el tren y los conjuntos de prueba durante el entrenamiento.

Uniendo todo esto, el ejemplo completo de la evaluación de nuestro primer MLP en el conjunto de datos de supervivencia del cáncer se enumera a continuación.

Ejecutar el ejemplo primero ajusta el modelo en el conjunto de datos de entrenamiento, luego informa la precisión de la clasificación en el conjunto de datos de prueba.

Nota: Sus resultados pueden variar dada la naturaleza estocástica del algoritmo o procedimiento de evaluación, o las diferencias en la precisión numérica. Considere ejecutar el ejemplo varias veces y compare el resultado promedio.

En este caso, podemos ver que el modelo funciona mejor que un modelo sin habilidad, dado que la precisión está por encima del 97,7 por ciento, en este caso logrando una precisión del 98,8 por ciento.

A continuación, se crean los gráficos de línea de la pérdida en el tren y los conjuntos de prueba.

Podemos ver que el modelo encuentra rápidamente un buen ajuste en el conjunto de datos y no parece estar sobreajustado o desajustado.

Curvas de aprendizaje del perceptrón multicapa simple en el conjunto de datos de mamografía

Curvas de aprendizaje del perceptrón multicapa simple en el conjunto de datos de mamografía

Ahora que tenemos una idea de la dinámica de aprendizaje para un modelo MLP simple en el conjunto de datos, podemos considerar el desarrollo de una evaluación más sólida del desempeño del modelo en el conjunto de datos.

Evaluación robusta del modelo

El procedimiento de validación cruzada de k veces puede proporcionar una estimación más confiable del rendimiento de MLP, aunque puede ser muy lento.

Esto se debe a que los modelos k deben ajustarse y evaluarse. Esto no es un problema cuando el tamaño del conjunto de datos es pequeño, como el conjunto de datos de supervivencia al cáncer.

Podemos usar la clase StratifiedKFold y enumerar cada pliegue manualmente, ajustar el modelo, evaluarlo y luego informar la media de las puntuaciones de evaluación al final del procedimiento.

Podemos usar este marco para desarrollar una estimación confiable del rendimiento del modelo MLP con nuestra configuración base, e incluso con una variedad de diferentes preparaciones de datos, arquitecturas de modelos y configuraciones de aprendizaje.

Es importante que primero desarrollemos una comprensión de la dinámica de aprendizaje del modelo en el conjunto de datos en la sección anterior antes de usar la validación cruzada de k-veces para estimar el rendimiento. Si comenzamos a ajustar el modelo directamente, podríamos obtener buenos resultados, pero si no, es posible que no tengamos idea de por qué, p. que el modelo se ajustaba demasiado o no.

Si volvemos a realizar cambios importantes en el modelo, es una buena idea volver atrás y confirmar que el modelo está convergiendo adecuadamente.

El ejemplo completo de este marco para evaluar el modelo MLP base de la sección anterior se enumera a continuación.

Recomendado:  Aprendizaje semi-supervisado con propagación de etiquetas

Running the example reports the model performance each iteration of the evaluation procedure and reports the mean and standard deviation of classification accuracy at the end of the run.

Note: Your results may vary given the stochastic nature of the algorithm or evaluation procedure, or differences in numerical precision. Consider running the example a few times and compare the average outcome.

In this case, we can see that the MLP model achieved a mean accuracy of about 98.7 percent, which is pretty close to our rough estimate in the previous section.

This confirms our expectation that the base model configuration may work better than a naive model for this dataset

Next, let’s look at how we might fit a final model and use it to make predictions.

Final Model and Make Predictions

Once we choose a model configuration, we can train a final model on all available data and use it to make predictions on new data.

In this case, we will use the model with dropout and a small batch size as our final model.

We can prepare the data and fit the model as before, although on the entire dataset instead of a training subset of the dataset.

We can then use this model to make predictions on new data.

First, we can define a row of new data.

Note: I took this row from the first row of the dataset and the expected label is a ‘-1’.

We can then make a prediction.

Then invert the transform on the prediction, so we can use or interpret the result in the correct label (which is just an integer for this dataset).

And in this case, we will simply report the prediction.

Tying this all together, the complete example of fitting a final model for the mammography dataset and using it to make a prediction on new data is listed below.

Running the example fits the model on the entire dataset and makes a prediction for a single row of new data.

Note: Your results may vary given the stochastic nature of the algorithm or evaluation procedure, or differences in numerical precision. Consider running the example a few times and compare the average outcome.

In this case, we can see that the model predicted a “-1” label for the input row.

Further Reading

This section provides more resources on the topic if you are looking to go deeper.

Tutorials

Summary

In this tutorial, you discovered how to develop a Multilayer Perceptron neural network model for the Wood’s Mammography classification dataset.

Specifically, you learned:

  • How to load and summarize the Wood’s Mammography dataset and use the results to suggest data preparations and model configurations to use.
  • How to explore the learning dynamics of simple MLP models on the dataset.
  • How to develop robust estimates of model performance, tune model performance and make predictions on new data.

Do you have any questions?
Ask your questions in the comments below and I will do my best to answer.

Develop Deep Learning Projects with Python!

Deep Learning with Python

What If You Could Develop A Network in Minutes

…with just a few lines of Python

Discover how in my new Ebook:
Deep Learning With Python

It covers end-to-end projects on topics like:
Multilayer Perceptrons, Convolutional Nets y Recurrent Neural Nets, and more…

Finally Bring Deep Learning To
Your Own Projects

Skip the Academics. Just Results.

See What’s Inside