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!
¿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
SMOTE
que 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
xgboost
permite equilibrar ponderaciones de clase positivas y negativas utilizandoscale_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)
fuente
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.
fuente