Saltar al contenido

Cómo desarrollar una red neuronal para predecir perturbaciones en la ionosfera

13 de febrero 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 eficaces 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 la ionosfera.

Después de completar este tutorial, sabrá:

  • Cómo cargar y resumir el conjunto de datos de la ionosfera 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.

Cómo desarrollar una red neuronal para predecir perturbaciones en la ionosfera

Cómo desarrollar una red neuronal para predecir perturbaciones en la ionosfera
Foto de Sergey Pesterev, algunos derechos reservados.

Descripción general del tutorial

Este tutorial se divide en cuatro partes; son:

  1. Conjunto de datos de clasificación binaria de ionosfera
  2. Dinámica de aprendizaje de redes neuronales
  3. Evaluación y ajuste de modelos MLP
  4. Modelo final y hacer predicciones

Conjunto de datos de clasificación binaria de ionosfera

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

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

Este conjunto de datos implica predecir si una estructura está en la atmósfera o no dados los retornos de radar.

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

Puede ver las primeras filas del conjunto de datos a continuación.

Podemos ver que los valores son todos numéricos y quizás en el rango [-1, 1]. Esto sugiere que probablemente no sea necesario algún tipo de escala.

También podemos ver que la etiqueta es una cadena («gramo» y «segundo“), Lo que sugiere que los valores deberán codificarse en 0 y 1 antes de ajustar un modelo.

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

La ejecución del ejemplo carga el conjunto de datos directamente desde la URL e informa la forma del conjunto de datos.

En este caso, podemos ver que el conjunto de datos tiene 35 variables (34 de entrada y una salida) y que el conjunto de datos tiene 351 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 usar 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 medios para cada variable están en decenas, con valores que van de -1 a 1. Esto confirma que probablemente no sea necesario escalar los datos.

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

Podemos ver que muchas variables tienen una distribución gaussiana o similar a la gaussiana.

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 ionosfera

Histogramas del conjunto de datos de clasificación de ionosfera

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 adapta 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 mediante el uso de una simple división 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 67/33 conjuntos de entrenamiento y prueba.

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 del 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 32 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 de la capacitación, evaluaremos el rendimiento del modelo en el conjunto de datos de prueba e informaremos el rendimiento 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 evaluación de nuestro primer MLP en el conjunto de datos de la ionosfera 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 logró una precisión de alrededor del 88 por ciento, que es una buena línea de base en el rendimiento que podríamos mejorar.

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

Podemos ver que el modelo parece converger pero se ha sobreajustado al conjunto de datos de entrenamiento.

Curvas de aprendizaje de MLP simple en un conjunto de datos de ionosfera

Curvas de aprendizaje de MLP simple en un conjunto de datos de ionosfera

Intentemos aumentar la capacidad del modelo.

Esto ralentizará el aprendizaje para los mismos hiperparámetros de aprendizaje y puede ofrecer una mayor precisión.

Agregaremos una segunda capa oculta con ocho nodos, elegidos arbitrariamente.

El ejemplo completo se enumera a continuación.

Ejecutar el ejemplo primero ajusta el modelo en el conjunto de datos de entrenamiento, luego informa la precisió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 diferencias en la precisión numérica. Considere ejecutar el ejemplo varias veces y compare el resultado promedio.

En este caso, podemos ver una ligera mejora en la precisión de alrededor del 93 por ciento, aunque la alta variación de la división tren / prueba significa que esta evaluación no es confiable.

Luego se trazan las curvas de aprendizaje para la pérdida en el tren y los conjuntos de prueba. Podemos ver que el modelo todavía parece mostrar un comportamiento de sobreajuste.

Curvas de aprendizaje de MLP más profundo en el conjunto de datos de la ionosfera

Curvas de aprendizaje de MLP más profundo en el conjunto de datos de la ionosfera

Finally, we can try a wider network.

We will increase the number of nodes in the first hidden layer from 10 to 50, and in the second hidden layer from 8 to 10.

This will add more capacity to the model, slow down learning, and may further improve results.

We will also reduce the number of training epochs from 200 to 100.

The complete example is listed below.

Recomendado:  Búsqueda local iterada desde cero en Python

Running the example first fits the model on the training dataset, then reports the accuracy on the test dataset.

Nota: 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, the model achieves a better accuracy score, with a value of about 94 percent. We will ignore model performance for now.

Line plots of the learning curves are created showing that the model achieved a reasonable fit and had more than enough time to converge.

Learning Curves of Wider MLP on the Ionosphere Dataset

Learning Curves of Wider MLP on the Ionosphere Dataset

Now that we have some idea of the learning dynamics for simple MLP models on the dataset, we can look at evaluating the performance of the models as well as tuning the configuration of the models.

Evaluating and Tuning MLP Models

The k-fold cross-validation procedure can provide a more reliable estimate of MLP performance, although it can be very slow.

This is because k models must be fit and evaluated. This is not a problem when the dataset size is small, such as the ionosphere dataset.

We can use the StratifiedKFold class and enumerate each fold manually, fit the model, evaluate it, and then report the mean of the evaluation scores at the end of the procedure.

We can use this framework to develop a reliable estimate of MLP model performance with a range of different data preparations, model architectures, and learning configurations.

It is important that we first developed an understanding of the learning dynamics of the model on the dataset in the previous section before using k-fold cross-validation to estimate the performance. If we started to tune the model directly, we might get good results, but if not, we might have no idea of why, e.g. that the model was over or under fitting.

If we make large changes to the model again, it is a good idea to go back and confirm that the model is converging appropriately.

The complete example of this framework to evaluate the base MLP model from the previous section is listed below.

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.

Nota: 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 93.4 percent.

We will use this result as our baseline to see if we can achieve better performance.

Next, let’s try adding regularization to reduce overfitting of the model.

In this case, we can add dropout layers between the hidden layers of the network. For example:

The complete example of the MLP model with dropout is listed below.

Running reports the mean and standard deviation of the classification accuracy at the end of the run.

Nota: 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 with dropout achieves better results with an accuracy of about 94.6 percent compared to 93.4 percent without dropout

Recomendado:  ChatGPT se llama 'un momento iPhone en IA', pero ¿ganará dinero como el iPhone?

Finally, we will try reducing the batch size from 32 down to 8.

This will result in more noisy gradients and may also slow down the speed at which the model is learning the problem.

The complete example is listed below.

Running reports the mean and standard deviation of the classification accuracy at the end of the run.

Nota: 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 with dropout achieves slightly better results with an accuracy of about 94.9 percent.

We will use this configuration as our final model.

We could continue to test alternate configurations to the model architecture (more or fewer nodes or layers), learning hyperparameters (more or fewer batches), and data transforms.

I leave this as an exercise; let me know what you discover. Can you get better results?
Post your results in the comments below, I’d love to see what you get.

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

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.

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

Tying this all together, the complete example of fitting a final model for the ionosphere 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.

Nota: 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 “g” 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 ionosphere binary classification dataset.

Specifically, you learned:

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