Quiero hacer la clasificación con 2 clases. Cuando clasifico sin smote Lo entiendo:
Precision Recall f-1
0,640950987 0,815410434 0,714925374
Cuando uso smote (sobremuestreo de la clase minoritaria en 200% y k = 5)
Precision Recall f-1
0,831024643 0,783434343 0,804894232
Como puede ver, esto funciona bien.
Sin embargo, cuando pruebo este modelo entrenado en los datos de validación (que no tienen datos sintéticos)
Precision Recall f-1
0,644335755 0,799044453 0,709791138
que es horrible. Utilicé un bosque de decisión aleatorio para clasificar.
¿Alguien tiene idea de por qué ocurre esto? Cualquier consejo útil en relación con las pruebas adicionales que puedo tratar de obtener más información son bienvenidos también.
Más información: No toco la clase mayoritaria. Trabajo en Python con scikit-learn y este algoritmo por "smote".
La matriz de confusión en los datos de prueba (que tiene datos sintéticos):
La matriz de confusión en los datos de validación con el mismo modelo (datos reales, que no fueron generados por SMOTE)
Editar: He leído que el problema radica posiblemente en el hecho de que se crearon enlaces Tomek. Por lo tanto, escribí algún código para eliminar los enlaces de Tomek. Aunque esto no mejora los resultados de la clasificación.
Edición 2: He leído que el problema posiblemente radica en que hay demasiado solapamiento. Una solución para esto es un algoritmo de generación de muestras sintéticas más inteligente. Por lo tanto, he implementado
ADASYN: Enfoque de muestreo sintético adaptativo para el aprendizaje desequilibrado
Mi aplicación se puede encontrar aquí . Se desempeñó peor que smote.