Clase no balanceada: class_weight para algoritmos ML en Spark MLLib


8

En python sklearn, hay múltiples algoritmos (por ejemplo, regresión, bosque aleatorio ... etc.) que tienen el parámetro class_weight para manejar datos no balanceados.

Sin embargo, no encuentro dicho parámetro para los algoritmos MLLib. ¿Existe un plan para implementar class_weight para algún algoritmo MLLib? ¿O hay algún enfoque en MLLib para datos no balanceados? ¿O realmente tenemos que manejar todo el muestreo ascendente / descendente en MLLib?

¡Gracias!


Sí, los algoritmos en MLLib de Spark están preparados para manejar problemas complejos. Además, según tengo entendido, tampoco hay una manera de realizar una división estratificada. Por lo tanto, las métricas de rendimiento que adquiera no se representarán adecuadamente.
Samuel Sherman

Aquí hay un ejemplo de regresión logística ponderada en MLlib de la documentación 2.2.
Emre

Respuestas:


1

Los algoritmos en MLLib siempre se usan como línea de base en el escenario de producción, y de hecho no pueden manejar algunos problemas industriales, como el desequilibrio de etiquetas. Entonces, si desea usarlos, debe equilibrar sus instancias.

Además, el mecanismo de BSP en Spark, simplemente puede verse como datos paralelos , podría ser la razón principal por la que Spark no cubre ese problema. Puede ser difícil para Spark enviar instancias a todos los nodos del clúster, mientras que las instancias parciales de cada nodo comparten la misma distribución de etiquetas que el conjunto.

Por último, solo tiene que ponderar el valor de pérdida para cada instancia etiquetada menor durante su proceso de iteración si desea implementarla.

Espero que esto te ayude, buena suerte -)


1

Una de las formas en que he manejado clases desequilibradas en el pasado ha sido crear un clasificador basado en muestras de conjunto de datos para tener una división de muestra 50/50. Esto significa utilizar todos los puntos de datos asociados con su clase minoritaria y muestrear aleatoriamente la misma cantidad de puntos de datos de su clase mayoritaria.

Si esto funcionará depende de la cantidad de datos que realmente tenga en su clase minoritaria; si tiene un desequilibrio de clase extremo (<5% de instancias de clase minoritaria), es posible que desee considerar el sobremuestreo sintético.

Probablemente podrías mirar con pydf.rdd.takeSample()chispa o df.samplecon pandas.


0

La forma en que manejé los desequilibrios de clase es mediante los siguientes métodos: 1. Fusionar la clase que aparece con menos frecuencia en otras clases. Obviamente, debe usar algún tipo de conocimiento de dominio en lugar de fusionarlos aleatoriamente. 2. Usar técnicas de remuestreo como sobremuestreo, submuestreo, SMOTE, ADASYN. No recomiendo usar estas técnicas porque en realidad no representan los datos reales. Pero en cualquier caso, ciertamente puedes echarles un vistazo


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.