En clasificación, ¿cómo manejas un conjunto de entrenamiento desequilibrado?

¡Los que se enumeran arriba / abajo son geniales! Aquí hay algunos más:

1) Digamos que tienes L más veces de la clase abundante que de la clase rara. para el descenso de gradiente estocástico, tome pasos separados int (a * L) cada vez que encuentre datos de entrenamiento de la clase rara. (a deberá validarse de forma cruzada).

2) Divida la clase más abundante en L grupos distintos. Luego entrene predictores L, donde cada predictor se entrena solo en uno de los grupos distintos, pero en todos los datos de la clase rara. Para ser claros, los datos de la clase rara se utilizan en el entrenamiento de todos los predictores de L. Finalmente, use el promedio de modelos para los predictores L aprendidos como su predictor final.

3) Esto es similar al número de Kripa (2), pero un poco diferente.
Sea N el número de muestras en la clase rara. Agrupa el abundante
clase en grupos N (el agrupamiento aglomerativo puede ser mejor aquí), y use los medios / grupos de grupos resultantes como los datos de entrenamiento para la clase abundante. Para ser claros, descartas los datos de entrenamiento originales de la clase abundante y en su lugar utilizas los medios. ¡Voila, ahora tus clases están equilibradas! Pero su conjunto de datos es mucho más pequeño, por lo que podría ser un problema.

4) Cualquiera que sea el método que utilice, ayudará de alguna manera, pero perjudicará en otras. Para mitigar eso, puede entrenar un modelo separado utilizando todos los métodos enumerados en esta página, ¡y luego realizar un promedio de modelo sobre todos ellos!

5) Un artículo reciente de ICML (similar al de Kripa (1)) muestra que agregar datos que son “ejemplos de entrenamiento corruptos [ed] con ruido de distribuciones conocidas” en realidad puede mejorar el rendimiento. El documento no es totalmente relevante para el problema de las clases desequilibradas porque agregan los datos implícitamente con las matemáticas (es decir, el tamaño del conjunto de datos permanece sin cambios). Pero creo que la tabla de distribuciones corruptas en el documento es útil si desea implementar sus propios datos sustitutos para equilibrar las clases.

Más detalles de los que necesita : en mi humilde opinión, la distribución corrupta más interesante es la distribución en blanco , donde simplemente pone a cero un subconjunto aleatorio de características. ¿Por qué es interesante? Porque está ayudando a su clasificador a ser más robusto / resistente dándole variaciones de sus datos que esencialmente tienen características faltantes. Por lo tanto, debe aprender a clasificar correctamente incluso en condiciones adversas.

Una idea relacionada es el abandono en las redes neuronales, donde se eliminan las unidades ocultas aleatorias (puestas a cero) durante el entrenamiento. Esto obliga a la NN a, de nuevo, ser más resistente de lo que sería de otra manera. Vea aquí un tratamiento reciente: http://www.stanford.edu/~sidaw/c…

Aquí hay un paquete agradable que hace muchas de estas cosas y es compatible con la API scikit-learn: scikit-learn-contrib / imbalanced-learn

Jaja sabes que es gracioso? Obtienes un 90% de precisión para tu modelo y eres como “increíble” hasta que te enteras, bueno, el 90% de los datos estaban en una clase jajaja

En realidad, esta es una muy buena pregunta de entrevista y a lo que se refiere se llama “datos desequilibrados” . Es un problema muy común cuando obtienes un conjunto de datos real. Por ejemplo, obtiene datos de pacientes con cáncer. Le dicen que vaya a predecir si la persona tiene cáncer o no. ¡Excelente! ¡Haciendo del mundo un lugar mejor y ganando 6 cifras de salario! Estás emocionado y obtienes el conjunto de datos, es 98% sin cáncer y 2% de cáncer.

Mierda…

He aquí que, afortunadamente, hay algunas soluciones para esto:

  1. Vuelva a muestrear de manera diferente. Sobremuestreo de su clase minoritaria y submuestreo de su clase mayoritaria, para obtener un conjunto de datos más equilibrado.
  2. Pruebe diferentes métricas que no sean predicciones correctas o incorrectas. Pruebe la matriz de confusión o la curva ROC. La precisión se divide en sensibilidad y especificidad y los modelos se pueden elegir en función de los umbrales de equilibrio de los valores.
  3. Usar modelos penalizados . Como penalized-SVM y penalized-LDA. Ponen un costo adicional en el modelo por cometer errores de clasificación en la clase minoritaria durante el entrenamiento. Estas sanciones pueden sesgar el modelo para prestar atención a la clase minoritaria.
  4. Pruebe las técnicas y modelos de detección de anomalías que a menudo se usan allí. Aunque eso probablemente sería necesario si sus datos estuvieran aún más desequilibrados.

¿Todavía no estás satisfecho? Aquí está el libro sobre esto: Aprendizaje desequilibrado: Fundamentos, algoritmos y aplicaciones: Haibo He, Yunqian Ma: 9781118074626: Amazon.com: Libros

Este es un problema muy práctico y aquí hay algunas formas de solucionarlo:

  1. Submuestreo aleatorio de la clase mayoritaria
  2. Sobremuestreo aleatorio de la clase minoritaria
  3. El submuestreo aleatorio conduce a una posible pérdida de información, ya que muchas instancias de datos simplemente se descartan. Puede realizar una toma de muestras informada al descubrir primero la distribución de datos y seleccionar selectivamente los puntos que se desecharán
  4. Puede sobremuestrear con puntos de datos generados sintéticamente que no son muy diferentes de los puntos de datos de clase minoritaria que realmente tiene: SMOTE es una técnica popular.
  5. Use un clasificador sensible al costo . Por ejemplo, en ciertos tipos de árboles de decisión (por ejemplo, C5.0: un tutorial informal) puede mencionar explícitamente que clasificar erróneamente una instancia de datos de la clase minoritaria como la clase mayoritaria es mucho más costosa que el otro tipo de clasificación errónea. libsvm, el popular paquete SVM, permite esto usando las banderas “wx”.

La lista de arriba no es exhaustiva. Este documento proporciona una buena encuesta: http://www.ele.uri.edu/faculty/h

Asegúrese de estar utilizando un mecanismo de puntuación que se ocupe del desequilibrio. Por ejemplo, si sus datos son 97% -ve y 3% + ve, utilizando la precisión como medida de rendimiento, puedo obtener fácilmente un 97% clasificando todos los puntos como -ve. Entonces, la precisión no es una buena métrica aquí; algo como F1-score es más adecuado.

More Interesting

¿Por qué no hay implementaciones de aprendizaje profundo (populares) escritas en Golang?

¿Cómo funciona la regresión lineal múltiple en variables categóricas?

¿Cuáles son las diferencias, similitudes, pros, contras, aplicaciones y descripciones de Keras, TensorFlow, Theano?

¿Cómo debo combinar la retroalimentación implícita y explícita en el filtrado colaborativo?

¿Cómo soluciona un máximo A posterior el problema de sobreajuste en una estimación de máxima verosimilitud?

Cómo diferenciar entre características globales y características locales en una imagen

¿Qué importancia tienen las estructuras de datos y los modelos gráficos para el aprendizaje automático?

¿Qué núcleo (para los métodos de núcleo en el aprendizaje automático) es menos sensible a la alta dimensión: cauchy, gaussiana o laplaciana?

¿Por qué se considera F # un buen lenguaje para el aprendizaje automático?

¿Existe un programa de tipo PageRank para organizar mis canales RSS diarios?

¿Existe un concepto de API semántica - API que acepta oraciones simples como consultas?

En la curva ROC, cualquier punto es resultado del modelo en un parámetro particular. No estoy claro por qué el adivinador aleatorio está en x = y y no siempre (0.5, 0.5). ¿También cómo interpretar el área bajo la curva?

¿Cuál es su visión de cómo la clase media de los EE. UU. Puede hacer frente al auge de la robótica, la automatización, etc.?

¿Cuál sería un enfoque razonable para optimizar los ingresos publicitarios del sitio web utilizando datos de GA y aprendizaje automático?

Cómo implementar el reconocimiento de imágenes para crear una aplicación para organizar imágenes