Saltar al contenido

Desarrollar una red neuronal para el conjunto de datos de supervivencia al cáncer

12 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 binaria de supervivencia del cáncer.

Después de completar este tutorial, sabrá:

  • Cómo cargar y resumir el conjunto de datos de supervivencia del cáncer 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 supervivencia al cáncer

Desarrollar una red neuronal para el conjunto de datos de supervivencia al cáncer
Foto de Bernd Thaller, algunos derechos reservados.

Descripción general del tutorial

Este tutorial se divide en 4 partes; ellos son:

  1. Conjunto de datos de supervivencia al cáncer de mama de Haberman
  2. Dinámica de aprendizaje de redes neuronales
  3. Evaluación robusta del modelo
  4. Modelo final y hacer predicciones

Conjunto de datos de supervivencia al cáncer de mama de Haberman

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

Trabajaremos con el «haberman”Conjunto de datos de clasificación binaria estándar.

El conjunto de datos describe los datos de los pacientes con cáncer de mama y el resultado es la supervivencia del paciente. Específicamente si el paciente sobrevivió durante cinco años o más, o si el paciente no sobrevivió.

Este es un conjunto de datos estándar que se utiliza en el estudio de la clasificación desequilibrada. Según la descripción del conjunto de datos, las operaciones se llevaron a cabo entre 1958 y 1970 en el Hospital Billings de la Universidad de Chicago.

Hay 306 ejemplos en el conjunto de datos y hay 3 variables de entrada; ellos son:

  • La edad del paciente en el momento de la operación.
  • El año de dos dígitos de la operación.
  • El número de «ganglios axilares positivos”Detectado, una medida de si el cáncer se ha diseminado.

Como tal, no tenemos control sobre la selección de casos que componen el conjunto de datos o las características que se utilizarán en esos casos, aparte de lo que está disponible en el conjunto de datos.

Aunque el conjunto de datos describe la supervivencia de las pacientes con cáncer de mama, dado el pequeño tamaño del conjunto de datos y el hecho de que los datos se basan en el diagnóstico y las operaciones de cáncer de mama de hace muchas décadas, no se espera que los modelos creados en este conjunto de datos se generalicen.

Nota: para ser claro como el cristal, 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 4 variables (3 entradas y una salida) y que el conjunto de datos tiene 306 filas de datos.

No se trata de muchas filas de datos para una red neuronal y sugiere que una red pequeña, quizás con regularización, 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 varían con diferentes medias y desviaciones estándar, quizás se requiera alguna normalización o estandarización antes del modelado.

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

Podemos ver que quizás la primera variable tiene una distribución similar a la de Gauss y las dos siguientes variables de entrada pueden tener una distribución exponencial.

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 supervivencia al cáncer de mama de Haberman

Histogramas del conjunto de datos de clasificación de supervivencia al cáncer de mama de Haberman

Podemos ver cierta desviación en la distribución de ejemplos entre las dos clases, lo que significa que el problema de clasificación no está equilibrado. Está desequilibrado.

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.

La ejecución del ejemplo resume la distribución de clases del conjunto de datos.

Podemos ver que la clase 1 para supervivencia tiene la mayor cantidad de ejemplos en 225, o alrededor del 74 por ciento del conjunto de datos. Podemos ver que la clase 2 de no supervivencia tiene menos ejemplos en 81, o alrededor del 26 por ciento del conjunto de datos.

La distribución de clases está sesgada, pero no está muy desequilibrada.

Esto es útil porque si usamos la precisión de clasificación, cualquier modelo que logre una precisión menor a aproximadamente el 73,5% 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 10 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 200 épocas de entrenamiento (elegidas arbitrariamente) con un tamaño de lote de 16 porque es un conjunto de datos pequeño.

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 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.

Pon en marcha tu proyecto con mi nuevo libro Preparación de datos para el aprendizaje automático, que incluye tutoriales paso a paso y el Código fuente de Python archivos para todos los ejemplos.

En este caso, podemos ver que el modelo funciona mejor que un modelo sin habilidad, dado que la precisión está por encima del 73,5%.

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 supervivencia al cáncer

Curvas de aprendizaje del perceptrón multicapa simple en el conjunto de datos de supervivencia al cáncer

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:  El mecanismo de atención del transformador

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.

Kick-start your project with my new book Data Preparation for Machine Learning, including step-by-step tutorials and the Python source code files for all examples.

In this case, we can see that the MLP model achieved a mean accuracy of about 75.2 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

Is this a good result?

In fact, this is a challenging classification problem and achieving a score above about 74.5% is good.

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 haberman 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.

Kick-start your project with my new book Data Preparation for Machine Learning, including step-by-step tutorials and the Python source code files for all examples.

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

Resumen

In this tutorial, you discovered how to develop a Multilayer Perceptron neural network model for the cancer survival binary classification dataset.

Specifically, you learned:

  • How to load and summarize the cancer survival 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