He encontrado que Él y García (2009) son una revisión útil del aprendizaje en problemas de clase desequilibrados. Aquí hay algunas cosas que definitivamente no son exhaustivas para tener en cuenta:
Enfoques basados en datos:
Se puede submuestrear la clase mayoritaria o sobremuestrear la clase minoritaria. (Breiman señaló que esto es formalmente el equivalente a asignar costos de clasificación erróneos no uniformes). Esto puede causar problemas: la submuestreo puede hacer que el alumno pierda aspectos de la clase mayoritaria; el sobremuestreo aumenta el riesgo de sobreajuste.
Existen métodos de "submuestreo informado" que reducen estos problemas. Uno de ellos es EasyEnsemble , que muestrea independientemente varios subconjuntos de la clase mayoritaria y crea múltiples clasificadores combinando cada subconjunto con todos los datos de la clase minoritaria.
SMOTE (Técnica de sobremuestreo de minorías sintéticas) o SMOTEBoost (que combina SMOTE con refuerzo) crea instancias sintéticas de la clase minoritaria al hacer vecinos más cercanos en el espacio de características. SMOTE se implementa en R en el paquete DMwR (que acompaña al libro de Luis Torgo "Minería de datos con R, aprendizaje con estudios de casos" CRC Press 2016 ).
Enfoques de ajuste del modelo
Aplique pesos específicos de clase en su función de pérdida (pesos mayores para casos minoritarios).
Para los enfoques basados en árboles, puede usar la distancia de Hellinger como una función de impureza de nodo, como se recomienda en Cieslak et al. "Los árboles de decisión de distancia Hellinger son robustos e insensibles a la inclinación" ( código Weka aquí ).
Utilice un clasificador de una clase , aprendiendo (según el modelo) una densidad de probabilidad o límite para una clase y tratando la otra clase como valores atípicos.
Por supuesto, no use la precisión como métrica para la construcción de modelos. El kappa de Cohen es una alternativa razonable.
Enfoques de evaluación modelo
Si su modelo devuelve probabilidades pronosticadas u otros puntajes, elija un punto de corte de decisión que realice una compensación adecuada de errores (utilizando un conjunto de datos independiente de la capacitación y las pruebas). En R, el paquete OptimalCutpoints implementa una serie de algoritmos, incluidos los sensibles al costo, para decidir un límite.
Según tengo entendido, esta es un área activa de investigación en la comunidad de aprendizaje automático y no hay grandes respuestas, sino un número grande y creciente de posibles soluciones. Es probable que obtenga mejores respuestas si especifica los algoritmos específicos que está considerando.
Si está utilizando un modelo paramétrico (regresión logística), esto debería ser un problema menor y solo puede variar el umbral en función de su función de pérdida (costo de falsos negativos a falsos positivos)
Si está utilizando algoritmos de aprendizaje automático, esto podría ser más complicado. Max Kuhn hace un intento justo de resumir el problema en el Capítulo 16 de "Modelado predictivo aplicado". Pero es un tema desafiante para resumir. Si no desea comprar el libro, el código R está disponible en el paquete AppliedPredictiveModeling para este capítulo y puede ser suficiente dependiendo de su familiaridad con R y los algoritmos utilizados.
Por lo general, la discusión gira en torno al submuestreo / sobremuestreo +/- algoritmos sensibles al costo. Con variaciones como jous-boost también es posible.
Un ejemplo de este tipo de discusión: Chen et al "Uso del bosque aleatorio para aprender datos desequilibrados" http://statistics.berkeley.edu/sites/default/files/tech-reports/666.pdf
fuente
Puedes echar un vistazo a la implementación de scikit-learn. preste atención al argumento class_ weight que puede tener valores de un diccionario de ponderaciones de clase o 'auto':
class sklearn.svm.SVC (C = 1.0, kernel = 'rbf', degree = 3, gamma = 0.0, coef0 = 0.0, shrinking = True, probabilidad = False, tol = 0.001, cache_size = 200, class_weight = None, verbose = Falso, max_iter = -1, random_state = Ninguno)
Puedes jugar con el valor del argumento class_weight, que puede ser un diccionario de ponderación de clase o 'auto'. En el modo 'automático', el algoritmo de aprendizaje asignará automáticamente pesos a cada clase en función del número de muestras dentro de cada una de ellas.
scikit-learn tiene varios otros algoritmos de clasificación, algunos de los cuales aceptan ponderaciones de clase.
fuente