Desequilibrio de clase en aprendizaje automático supervisado

47

Esta es una pregunta en general, no específica de ningún método o conjunto de datos. ¿Cómo lidiamos con un problema de desequilibrio de clase en el aprendizaje automático supervisado donde el número de 0 es alrededor del 90% y el número de 1 es alrededor del 10% en su conjunto de datos? ¿Cómo capacitamos de manera óptima al clasificador?

Una de las formas que sigo es el muestreo para equilibrar el conjunto de datos y luego entrenar al clasificador y repetir esto para múltiples muestras.

Siento que esto es aleatorio. ¿Hay algún marco para abordar este tipo de problemas?

NG_21
fuente

Respuestas:

45

Hay muchos marcos y enfoques. Este es un problema recurrente.

Ejemplos:

  • Submuestreo . Seleccione una submuestra de los conjuntos de ceros de modo que su tamaño coincida con el conjunto de unos. Hay una pérdida evidente de información, a menos que use un marco más complejo (por ejemplo, dividiría el primer conjunto en 9 subconjuntos más pequeños y mutuamente excluyentes, entrenaría un modelo en cada uno de ellos y ensamblaría los modelos).
  • Sobremuestreo . Produzca artificiales hasta que la proporción sea del 50% / 50%. Mi empleador anterior usó esto por defecto. Hay muchos marcos para esto (creo que SMOTE es el más popular, pero prefiero trucos más simples como Noisy PCA ).
  • Una clase de aprendizaje . Simplemente suponga que sus datos tienen algunos puntos reales (los que están) y mucho ruido aleatorio que no existe físicamente se filtró en el conjunto de datos (cualquier cosa que no sea uno es ruido). Use un algoritmo para modificar los datos en lugar de un algoritmo de clasificación.
  • Entrenamiento sensible al costo . Use una función de costo asimétrico para equilibrar artificialmente el proceso de capacitación.

Algunas revisiones iluminadas, en orden creciente de complejidad técnica \ nivel de detalles:

Ah, y por cierto, el 90% / 10% no está desequilibrado. Los conjuntos de datos de fraude de transacciones con tarjeta a menudo se dividen en 99.97% / 0.03%. Esto no está equilibrado.

Lucas Gallindo
fuente
Acabo de notar que la PCA ruidosa que cité puede verse como sobremuestreo, regularización o fluctuación, dependiendo de los detalles de implementación.
Lucas Gallindo
Gracias Lucas por los recursos. Ayuda mucho. Tengo un problema peculiar en el que todas mis muestras están etiquetadas como '1'. Sin embargo, en realidad, esta muestra tiene una impureza mínima, es decir, hay algunos registros que en realidad se supone que son '0' pero están etiquetados como '1'. Creo que este tipo de problema pertenece a una clasificación de clase. Es mi entendimiento correcto. ¿Hay un marco común utilizado para identificarlos? Al principio estaba intentando agrupar pero eso no funciona.
NG_21
1
Todos estos algoritmos necesitan algunos datos etiquetados como cero y algunos como uno con un 100% de certeza sobre la exactitud de la etiqueta (o algo muy cercano al 100%). Usted tiene todos, pero sabe que un pequeño porcentaje de estos datos está mal etiquetado, una situación diferente. Sin ningún conocimiento sobre el dominio de la aplicación, lo atacaría usando la detección de anomalías y luego etiquetaría las anomalías como cero. Luego intente con un algoritmo de clasificación (Aprendizaje en una clase, quizás). Con conocimiento sobre el dominio de la aplicación, buscaría la ayuda de un experto en el dominio antes que nada.
Lucas Gallindo
13

Esto depende en gran medida del método de aprendizaje. La mayoría de los enfoques de propósito general tienen una (o varias) formas de lidiar con esto. Una solución común es asignar una penalización de clasificación errónea más alta a la clase minoritaria, obligando al clasificador a reconocerlos (SVM, regresión logística, redes neuronales, ...).

Cambiar el muestreo también es una posibilidad como usted menciona. En este caso, sobremuestrear la clase minoritaria suele ser una mejor solución que submuestrear la clase mayoritaria.

Algunos métodos, como los bosques aleatorios, no necesitan modificaciones.

Marc Claesen
fuente
Gracias. ¿Puede señalar cualquier recurso donde se explica con algunos ejemplos? ¿Hay alguna manera de lograr esto en R / Python sin recurrir a la codificación del algoritmo desde cero?
NG_21
1
Verifique la primera función en este paquete R: cran.r-project.org/web/packages/unbalanced/unbalanced.pdf
Lucas Gallindo
77
¿Por qué el bosque aleatorio no necesita ninguna modificación? Creo que todavía puede asignar la clase de peso
mac
4

A menudo, el problema no es la frecuencia sino la cantidad absoluta de casos en la clase minoritaria. Si no tiene suficiente variación en el objetivo en comparación con la variación en las características, entonces podría significar que el algoritmo no puede clasificar las cosas con mucha precisión.

Una cosa es que la penalización por clasificación errónea podría usarse en el paso de clasificación y no en el paso de estimación de parámetros, si existe. Algunos métodos no tienen el concepto de parámetro, solo producen etiquetas de clase o probabilidades de clase.

Cuando tiene un estimador probabilístico, puede tomar una decisión de clasificación basada en fundamentos teóricos de la información o con una combinación de valor comercial.

Analista
fuente
1

Agregue dos trucos: 1. use CDF, cuente la frecuencia en sus datos de entrenamiento o use una validación muy grande (si su conjunto de prueba no cambiará, pero el conjunto de validación debe tener la misma distribución con el conjunto de entrenamiento), luego ordene su predicción y obtenga primer X% (cuenta la frecuencia antes) para una clase y las otras son otra / 2. muestra ponderada, el modelo tenderá a la clase de muestra ponderada, puede usar la varianza muestral v. ej. pesoi = 1/2 (1- (vmax - vi) / vmax)

usuario102423
fuente