¿Cómo clasificar un conjunto de datos desequilibrado por redes neuronales convolucionales (CNN)?


10

Tengo un conjunto de datos desequilibrado en una tarea de clasificación binaria, donde la cantidad de positivos versus la cantidad de negativos es 0.3% vs 99.7%. La brecha entre lo positivo y lo negativo es enorme. Cuando entreno un CNN con la estructura utilizada en el problema MNIST, el resultado de la prueba muestra una alta tasa de falsos negativos. Además, la curva de error de entrenamiento baja rápidamente en un par de épocas al principio, pero sigue siendo el mismo valor en las siguientes épocas.

¿Me podría aconsejar una forma de procesar este problema? ¡Gracias!

Respuestas:


10

Esto sucede porque cuando toma un mini lote, es muy menos probable (dada la proporción de las proporciones aquí) que un mini lote contenga muestras de sus positivos. Por lo tanto, terminará aprendiendo el patrón para la clase negativa y después de un par de épocas, todo se clasifica como clase negativa.

Hay dos formas posibles de manejar tal situación.

  1. Dadas las proporciones de 0.3% a 99.7%, este es un conjunto de datos muy sesgado. Apenas tiene 3 muestras de clases positivas por cada 1000 muestras. Diría que debería considerar equilibrar el conjunto de datos obteniendo clases más positivas. Ve y obtén tantas muestras positivas como puedas. Luego, puede usar un conjunto de datos más equilibrado. Por ejemplo, podría obtener 1000 muestras positivas y luego elegir un conjunto aleatorio de 1000 muestras negativas y construir el clasificador. Ahora, debería poder aprender ambas clases.

  2. Utilice una medida de error ponderado al actualizar los pesos después de un mini lote. Los pesos se actualizan en proporciones al número de muestras de las clases positivas y negativas durante cualquier mini lote. Ahora, en la situación actual dadas las proporciones como 3: 1000, incluso este truco puede no funcionar. Por lo tanto, puede intentar obtener las proporciones de algo así como 300: 1000 obteniendo 297 muestras positivas más y combinándolas con 1000 muestras negativas. Luego, con una relación de 300: 1000, debe ponderar el error durante los mini lotes en función del número de muestras en cada una de las clases. Esto debería funcionar.


¿Sabes cuál es la proporción óptima aquí? ¿Son las 3:10 o algo más?
donlan

4

¿Por qué quieres usar CNN aquí? ¿Ha considerado otros modelos que realmente manejan datos desequilibrados?

Por ejemplo, he descubierto que las siguientes dos técnicas me han funcionado muy bien:

  • Bosques aleatorios con potenciación SMOTE : utilice un híbrido SMOTEque muestrea menos la clase mayoritaria y sobremuestrea la clase minoritaria en porcentajes ajustables. Seleccione estos porcentajes dependiendo de la distribución de su variable de respuesta en el conjunto de entrenamiento. Alimente estos datos a su modelo de RF. Siempre valide o realice una búsqueda de cuadrícula para encontrar la mejor configuración de parámetros para sus RF.

  • XGBoost con optimización de hiperparámetros : una vez más, realice una validación cruzada o realice una búsqueda gird para encontrar la mejor configuración de parámetros para el modelo. Además, le xgboostpermite equilibrar ponderaciones de clase positivas y negativas utilizando scale_pos_weight. Consulte la documentación de parámetros para obtener una lista completa.

También debería agregar que el conjunto de datos en el que estaba trabajando tenía el mismo porcentaje de sesgo y pude obtener un puntaje de sensibilidad de 0.941 y una especificidad de 0.71 xgboost, lo que significa que el modelo predice los verdaderos positivos con bastante precisión y eso es un buen augurio bien para mi

(Lo siento, no puedo dejar un comentario, no tengo suficiente reputación y realmente quería saber por qué elegiste CNN)


1

El conjunto de datos no balanceados es un problema común en todas las áreas y no se refiere específicamente a la visión por computadora ni a los problemas tratados por las redes neuronales convolucionales (CNN).

Para abordar este problema, debe intentar equilibrar su conjunto de datos, ya sea sobremuestreando las clases minoritarias o submuestreando las clases mayoritarias (o ambas). Podría decirse que una buena opción sería el algoritmo SMOTE (Técnica de sobremuestreo de minorías sintéticas), como se mencionó anteriormente. Aquí puede encontrar una comparación de diferentes algoritmos de sobremuestreo. Si eres un usuario de Python, desequilibrado de aprendizaje es una buena biblioteca que implementa muchas técnicas útiles para equilibrar conjuntos de datos.

Por otro lado, si está tratando de clasificar imágenes, una buena manera de aumentar el tamaño de su conjunto de datos es aumentarlo (es decir, creando ejemplos sintéticos razonables, por ejemplo, imágenes similares pero un poco rotadas / desplazadas con respecto a las originales). A veces puede resultarle útil aumentar las clases minoritarias para lograr un mejor equilibrio. La clase Keras ImageDataGenerator es una buena herramienta para este propósito.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.