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!
Respuestas:
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 -)
fuente
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 odf.sample
con pandas.fuente
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
fuente
Además de la última publicación, puede echar un vistazo a la biblioteca imblearn ( https://imbalanced-learn.readthedocs.io/en/stable/index.html ) que también le permite hacer varios tipos de sobremuestreo / submuestreo como SMOTE / SMOTENEC
fuente