Actualmente me encuentro con algunos problemas al analizar un conjunto de datos de tweets con máquinas de vectores de soporte. El problema es que tengo un conjunto de entrenamiento de clase binaria desequilibrado (5: 2); que se espera que sea proporcional a la distribución de clase real. Al predecir, obtengo una precisión baja (0,47) para la clase minoritaria en el conjunto de validación; recordar es 0.88. Traté de usar varios métodos de sobremuestreo y submuestreo (realizados en el conjunto de entrenamiento) que no mejoraron la precisión ya que el conjunto de validación también está desequilibrado para reflejar la distribución de la clase real. También implementé diferentes costos en la máquina de vectores de soporte, lo que ayudó. Ahora parece que ya no puedo mejorar mi rendimiento.
¿Alguien de ustedes tiene algún consejo sobre lo que podría hacer para mejorar mi precisión sin dañar mi recuerdo? Además, ¿alguien tiene idea de por qué obtengo más falsos positivos que falsos negativos (positivo es la clase minoritaria)?
fuente
Respuestas:
Porque positivo es la clase minoritaria. Hay muchos ejemplos negativos que podrían convertirse en falsos positivos. Por el contrario, hay menos ejemplos positivos que podrían convertirse en falsos negativos.
Recordemos que Recordar = Sensibilidad=TPAGS( TPAGS+ Fnorte)
La sensibilidad (tasa positiva verdadera) está relacionada con la tasa positiva falsa (especificidad 1) como se visualiza mediante una curva ROC. En un extremo, llamas a cada ejemplo positivo y tienes una sensibilidad del 100% con un FPR del 100%. En otro, no llama a ningún ejemplo positivo y tiene una sensibilidad del 0% con un 0% de FPR. Cuando la clase positiva es la minoría, incluso un FPR relativamente pequeño (que puede tener porque tiene un alto recuerdo = sensibilidad = TPR) terminará causando una gran cantidad de FP (porque hay tantos ejemplos negativos).
Ya que
Precisión=TPAGS( TPAGS+ FPAGS)
Incluso con un FPR relativamente bajo, el FP abrumará al TP si el número de ejemplos negativos es mucho mayor.
Alternativamente,
Clasificador positivo:C+
Ejemplo positivo:O+
Precisión =PAGS(O+El |C+) =PAGS(C+El |O+) P(O+)PAGS(C+)
P (O +) es bajo cuando la clase positiva es pequeña.
Como mencionó @rinspy, GBC funciona bien en mi experiencia. Sin embargo, será más lento que SVC con un núcleo lineal, pero puede hacer árboles muy poco profundos para acelerarlo. Además, más funciones o más observaciones podrían ayudar (por ejemplo, puede haber alguna característica actualmente no analizada que siempre se establece en algún valor en todos sus FP actuales).
También podría valer la pena trazar curvas ROC y curvas de calibración. Podría darse el caso de que, aunque el clasificador tenga poca precisión, podría conducir a una estimación de probabilidad muy útil. Por ejemplo, solo saber que un disco duro podría tener una probabilidad 500 veces mayor de fallar, aunque la probabilidad absoluta es bastante pequeña, podría ser información importante.
Además, una baja precisión significa esencialmente que el clasificador devuelve muchos falsos positivos. Sin embargo, esto podría no ser tan malo si un falso positivo es barato.
fuente
Métodos para probar:
Submuestreo:
Sugiero usar técnicas de muestreo bajo y luego entrenar a su clasificador.
El aprendizaje desequilibrado proporciona una API de estilo de aprendizaje scikit para el conjunto de datos desequilibrados y debería ser un buen punto de partida para probar y algoritmos para probar.
Biblioteca : https://imbalanced-learn.readthedocs.io/en/stable/
SVM basado en rango:
Esto ha demostrado que mejora el retiro del mercado de los sistemas de alta precisión y Google lo utiliza para detectar malos anuncios. Recomiendo probarlo.
Documento de referencia para SVM:
https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/37195.pdf
fuente
El enfoque estándar sería ponderar su error en función de la frecuencia de la clase. Por ejemplo, si lo estaba haciendo en Python con sklearn:
fuente