¡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.
- Quiero pasar el tiempo dado para el proyecto del último año para aprender ML. ¿Cómo empiezo?
- Entre la agrupación y la clasificación, ¿cuál requiere más experiencia?
- ¿Qué es una explicación intuitiva de los coeficientes de regresión logística?
- ¿Puedo usar word2vec para hacer el análisis de co-palabras?
- ¿Cuál es el mejor algoritmo de agrupamiento adaptativo k-means (que k se elige automáticamente)?
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