5 votos

¿Es posible entrenar una SVM de una clase para que el error de entrenamiento sea cero?

Estoy tratando de trabajar en un problema de detección de anomalías, por lo que actualmente estoy explorando mis opciones sobre qué algoritmo es el mejor para mí.

He estado mirando la SVM de una clase en la biblioteca scikit-learn para Python. Tiene un parámetro nu que se le pasa, que determina aproximadamente el porcentaje de datos de entrenamiento que se le permite etiquetar erróneamente como anomalía.

Esto podría ser simplemente una falta de comprensión de algo fundamental sobre el SVM de una clase, pero me pregunto por qué no puedo establecer el nu a cero. En mi aplicación, es más importante para mí asegurarme de que no etiqueto algo como una anomalía que pasar por alto una anomalía real.

¿Simplemente necesito más datos para poder establecer una nu ?

7voto

lennon310 Puntos 1882

Como ya mencionó @Joe, $\nu$ :

  1. establece un límite superior para la fracción de valores atípicos (ejemplos de entrenamiento considerados fuera de clase) y,
  2. sirve como límite inferior del número de ejemplos de entrenamiento utilizados como vector de apoyo.

Matemáticamente, la función de minimización de la programación cuadrática es:

enter image description here

Así que si $\nu$ es demasiado pequeño, el problema se está convirtiendo en un algoritmo de margen duro (el segundo elemento es infinito). Y el algoritmo encontrará el único hiperplano de apoyo con las propiedades que separan todos los datos del origen, y su distancia al origen es máxima entre todos los hiperplanos, que, como usted dijo, una precisión de entrenamiento del 100%. Puede intentar establecer nu un valor pequeño en lugar de 0 . Quizás el paquete no permite la aparición de -Inf en la función de costes.

4voto

blahdiblah Puntos 1419

¿Puedo conseguir un error de entrenamiento cero en una SVM?

Sí, pero sólo si los datos son separables. La separabilidad de un conjunto de datos puede depender de la función del núcleo que se utilice (por ejemplo, si se utiliza el producto punto, entonces "separable" = "linealmente separable"), pero algunos conjuntos de datos no son separables bajo ninguna función del núcleo, por ejemplo, el siguiente conjunto de datos en $\mathbb{R}^2$ :

ejemplos_positivos = [(0,0), (1,1), (2,2)]

ejemplos_negativos = [(0,0), (2,1), (3,2)] # (0,0) está en ambas categorías

¿Qué hacemos si no es separable?

La SVM de "margen duro" busca separar perfectamente los datos con un (hiper)plano (posiblemente en algún espacio loco implicado por la función del núcleo) y luego maximizar el margen (el espacio a cada lado de ese plano). La maximización del margen controla el error de generalización.

Una SVM de "margen suave" intenta hacer lo mismo, pero permite una pequeña cantidad de clasificación errónea. El equilibrio entre la minimización de la clasificación errónea y la maximización del margen se controla mediante un hiperparámetro llamado $C$ . El parámetro que mencionas ( $\nu$ ) es una reparametrización de $C$ que es más fácil de escoger e interpretar que $C$ es.

Bien, entonces, ¿qué es la interpretación de $\nu$ ?

Cita de este post de StackOverflow sobre SVM de margen duro vs margen blando (que te recomiendo que leas):

El parámetro nu es un límite superior de la fracción de errores de margen y un límite inferior de la fracción de vectores de soporte en relación con el número total de ejemplos de entrenamiento. Por ejemplo, si se fija en 0,05, se garantiza que como máximo el 5% de los ejemplos de entrenamiento están mal clasificados (aunque a costa de un pequeño margen) y que al menos el 5% de los ejemplos de entrenamiento son vectores de soporte.

¿Por qué diablos quiero permitir errores?

Usted dice "Es más importante para mí asegurarme de no etiquetar algo como una anomalía que pasar por alto una anomalía real". Eso parece un gran argumento, pero estamos hablando de formación error no generalización error aquí. Ajustar los datos de entrenamiento de forma absolutamente perfecta es una receta para catástrofe sobreajuste. (Además, como nota al margen, parece que podría querer optimizar la precisión en lugar de la exactitud, o al menos ponderar los falsos positivos como errores peores que los falsos negativos).

Siempre que ajustamos modelos complejos a los datos, es importante que entendamos el equilibrio entre la complejidad del modelo y el error de generalización. Los modelos sencillos generalizan bien a partir de muy pocos datos, pero pueden pasar por alto las complejidades reales de los datos. Los modelos complejos pueden ajustarse a las complejidades de los datos, pero también se ajustan al ruido de los datos (lo que les hace generalizar mal). Todos los modelos de aprendizaje automático intentan incorporar algún tipo de "regularización" que penaliza alguna medida de la complejidad del modelo (que puede compensarse con la precisión, y cuyo parámetro suele elegirse mediante validación cruzada).

0 votos

Gracias por la respuesta, y aunque he aprendido algo, la mayor parte de ese post parece hablar de un problema de aprendizaje supervisado más que de detección de anomalías no supervisada... ¿a no ser que me esté perdiendo la conexión?

1 votos

@w1res ¿qué? ¿Se puede hacer aprendizaje no supervisado con SVMs? Me siento un poco tonto. ¿Cuál es la función objetivo?

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