6 votos

LibSVM costo pesos para desequilibrio de datos no funciona

Tengo un conjunto de datos donde el número de negativos etiqueta de los valores de 163 veces el número de positivos etiqueta de los valores. Es decir, tengo un desequilibrio en el conjunto de datos. He intentado:

model = svmtrain(trainLabels, trainFeatures, '-h 0 -b 1 -s 0 -c 10 -w1 163 -w-1 1');
[predicted_label, accuracy, prob_estimates] = svmpredict(testLabels, testFeatures, 
                                                         model, '-b 1');

La precisión fue de casi un 99%. He buscado y encontrado un post (#7) [link muerto?] donde dice:

¿has probado de ponderación en una escala más pequeña (es decir: <1)

He cambiado mi modelo a:

model = svmtrain(trainLabels, trainFeatures, '-h 0 -b 1 -s 0 -c 10 -w1 0.5 -w-1 0.003');
[predicted_label, accuracy, prob_estimates] = svmpredict(testLabels, testFeatures, 
                                                         model, '-b 1');

Tengo todavía una alta precisión cada vez a causa de desequilibrio en los datos. Alguna idea?

PS: estoy tratando de implementar el primer desafío de la KDD Cup 2008 - el Cáncer de Mama. Quiero clasificar a los candidatos por orden decreciente.

8voto

jpmuc Puntos 4817

Yo sólo sé de dos métodos para lidiar con desequilibradas conjuntos con SVMs:

  1. El uso de embolsado: crear bootstrap muestras de sus datos, de forma que un gran número de equilibrado problemas. Usted entrenar a un SVM en cada uno de ellos, y, a continuación, utilizar el voto por mayoría en el conjunto resultante de los clasificadores.

  2. Si usted está usando C-SVM, entonces usted puede reweight la missclassification costo,

$$C\sum_{i}\psi_{i}$$ en $$ C_{+}\sum_{i \epsilon I_{+}}\psi_{i} + C_{-}\sum_{i \epsilon I_{-}}\psi_{i}$$ donde $I_{+}$, resp. $I_{-}$, es el conjunto de índices de los ejemplos positivos, resp. para los ejemplos negativos. Elige el nuevo soft-marging constantes, de modo que $\frac{C_{+}}{C_{-}} = \frac{n_{-}}{n_{+}}$ donde $n_{+}$ $n_{-}$ el número de muestras positivas y negativas respectivamente.

2voto

lurker Puntos 1

RESPUESTA: remove-b 1 o hacerlo -b 0

-b probability_estimates: si para entrenar a un SVC o SVR modelo de estimaciones de probabilidad, 0 o 1 (por defecto 0)

Me encontré con el mismo problema y encontré este post de google. Al parecer no funciona con estimaciones de la probabilidad.

1voto

LachlanG Puntos 133

Si usted está realizando una clasificación de tareas, podría tener más sentido para evaluar el sistema en términos de área bajo la curva ROC! Precisión, para la clasificación de las tareas, no es necesariamente lo que usted desea optimizar el sistema para que, en mi opinión.

Más a su pregunta, cómo sesgada sus datos? Ha habido un poco de trabajo en el trato con los datos asimétricos biomédica de clasificación (porque viene una gran cantidad, en el ámbito de la biomedicina). Mi PhD asesor escribió un algoritmo de coste proporcional rechazo de muestreo que creo que va a ocuparse de sus necesidades-estoy bastante seguro de que terminamos usando con LibSVM debido al mismo problema! Brevemente, el algoritmo resuelve el problema desproporcionado de los costes de clasificación errónea (por ejemplo, si un documento de 100 describe una enfermedad de interés, usted no quiere perder ese documento). Se cambia la resolución de los datos de acuerdo a la función de costo

$$P(c)=\frac{{\rm Cost}(c)}{\max[\text{Cost}(c),\ \forall_{c}\in C]}$$

In words, each sample is included according to the probability $P$ of including a sample of class $c$ is determined by the misclassification cost ${\rm Costo}(c)$ para el de la muestra, dividida por el ejemplo de error en la clasificación de costos.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X