SVM para datos no balanceados

15

Quiero intentar usar Support Vector Machines (SVM) en mi conjunto de datos. Sin embargo, antes de intentar el problema, me advirtieron que los SVM no funcionan bien en datos extremadamente desequilibrados. En mi caso, puedo tener tanto como 95-98% 0's y 2-5% 1's.

Traté de encontrar recursos que hablaran sobre el uso de SVM en datos dispersos / no balanceados, pero todo lo que pude encontrar fue 'sparseSVM' (que usa una pequeña cantidad de vectores de soporte).

Esperaba que alguien pudiera explicar brevemente:

  1. Qué tan bien se esperaría que SVM hiciera con tal conjunto de datos
  2. Qué modificaciones, si las hay, deben hacerse al algoritmo SVM
  3. ¿Qué recursos / documentos discuten esto?
DankMasterDan
fuente

Respuestas:

15

Muchas implementaciones de SVM abordan esto asignando diferentes pesos a instancias positivas y negativas. Esencialmente, usted pesa las muestras para que la suma de los pesos de los positivos sea igual a la de los negativos. Por supuesto, en su evaluación de la SVM debe recordar que si el 95% de los datos es negativo, es trivial obtener una precisión del 95% al ​​predecir siempre negativo. Por lo tanto, debe asegurarse de que sus métricas de evaluación también estén ponderadas para que estén equilibradas.

Específicamente en libsvm, que agregó como etiqueta, hay una bandera que le permite establecer los pesos de las clases ( -wcreo, pero revise los documentos ).

Finalmente, por experiencia personal, puedo decirle que a menudo encuentro que una SVM producirá resultados muy similares con o sin la corrección de peso.

Bitwise
fuente
Me
ganó
@Bitwise tengo el mismo problema de datos desequilibrados y obtengo una precisión del 99%. Usé los pesos en libsvm. Usted mencionó que las métricas de evaluación también deben ser ponderadas. Quería saber cómo podemos ponderar las métricas de valoración.
Hani Goc
1
@HaniGoc básicamente desea calcular por separado la precisión de cada clase y tomar el promedio de eso. Así, por ejemplo, si tiene 10 clase A y 90 clase B y adivinado todas las muestras a ser de clase B, en la precisión estándar que tendría , pero en la exactitud ponderado que tendría 0,5 * ( 0 / 10 + 90 / 90 ) = 0,5 . 90/100=0.90.5(0/10+90/90)=0.5 0.5
Bitwise
7

Los SVM funcionan bien en datos dispersos y no balanceados. El SVM ponderado por clase está diseñado para tratar datos no balanceados mediante la asignación de sanciones de clasificación errónea más altas a las instancias de entrenamiento de la clase minoritaria.

Marc Claesen
fuente
5

En el caso de datos escasos como ese SVM funcionará bien.

Según lo indicado por @Bitwise, no debe usar la precisión para medir el rendimiento del algoritmo.

En su lugar, debe calcular la precisión, la recuperación y la puntuación F del algoritmo.

alexandrekow
fuente
¿Podría por favor ampliar su razonamiento? Además, ¿cómo haría para medir el puntaje F una vez que se haya completado la clasificación (en el conjunto de pruebas)? Gracias
Spacey
Para medir el FScore en el conjunto de prueba, deberá clasificarlo manualmente y luego calcular el recuerdo y la precisión utilizando los datos manuales frente a los datos pronosticados. ¿Qué le gustaría que expandiera, por qué SVM funciona bien con datos escasos?
alexandrekow
Sí, por qué SVM funciona con datos dispersos también sería bueno. Gracias
Spacey
"Simplemente tener características dispersas no presenta ningún problema para el SVM. Una forma de ver esto es que podría hacer una rotación aleatoria de los ejes de coordenadas, lo que dejaría el problema sin cambios y daría la misma solución, pero haría que datos completamente no dispersos (esto es en parte cómo funcionan las proyecciones aleatorias "( stats.stackexchange.com/questions/23470/… )
alexandrekow