Tengo un conjunto de datos que tiene un atributo de clase binaria. Hay 623 instancias con clase +1 (cáncer positivo) y 101,671 instancias con clase -1 (cáncer negativo).
He probado varios algoritmos (Naive Bayes, Random Forest, AODE, C4.5) y todos ellos tienen relaciones inaceptables de falsos negativos. Random Forest tiene la precisión de predicción general más alta (99.5%) y la relación de falsos negativos más baja, pero aún pierde el 79% de las clases positivas (es decir, no detecta el 79% de los tumores malignos).
¿Alguna idea de cómo puedo mejorar esta situación?
¡Gracias!
classification
random-forest
decision-trees
unbalanced-classes
usuario798275
fuente
fuente
Respuestas:
El desequilibrio de clase es un problema muy común. Puede sobremuestrear la clase positiva (o submuestrear la negativa) o agregar ponderaciones de clase.
Otra cosa para recordar en este caso es que la precisión no es una métrica muy útil aquí. Puede considerar la puntuación AUC o F1 .
Cambiar el umbral de decisión puede parecer atractivo, pero obviamente conducirá (en este caso, probablemente drásticamente) a un aumento de falsos positivos (aunque tal vez los FP no sean tan malos como los FN en el caso del diagnóstico médico, si las pruebas no son prohibitivamente caras).
Aquí se proporciona un análisis más profundo de las opciones en el caso del desequilibrio de clase .
fuente
Aunque la respuesta en realidad es siempre
true
ofalse
, puede hacer que sus atributos de clase no sean etiquetas sino números de coma flotante, es decir, 1.0 y 0.0 (o 100 y 0). Es decir, puede enmarcarlo es un problema de regresión , no un problema de clasificación.Entonces, la salida prevista también será números en ese espectro, es decir, probabilidades, no etiquetas. Su implementación actual es esencialmente equivalente a un modelo de regresión con un umbral de 0.5.
Con tal salida, usted o su cliente pueden definir un umbral que sea aceptable (por ejemplo, 0.3). Por supuesto, habrá más falsos positivos, pero para algunas aplicaciones, como la detección del cáncer, eso es óptimo.
El sobremuestreo (los positivos) o el submuestreo (los negativos) también son formas de solucionar esto, pero deben hacerse cuidadosamente, pueden sacrificar la precisión y aún sacrifican el control para mover el umbral después de crear los datos y el entrenamiento.
fuente
El submuestreo y el sobremuestreo como técnica ya se han mencionado, pero pensé que señalaría una variante de uso común:
SMOTE : Técnica de sobremuestreo de minorías sintéticas
Fue presentado en este documento en 2002 . Aquí hay un fragmento del resumen:
Puede usarlo fácilmente en Python, usando el
imbalanced-learn
paquete , que está contenido en el módulo contrib de Scikit-Learn y debe instalarse por separado.Ese paquete incluye métodos para combinar sobre / submuestreo, así como un conjunto de utilidades para generar lotes de datos que pueden fluir hacia Keras / Tensorflow.
fuente