¿Cuál es la influencia de C en SVM con núcleo lineal?

134

Actualmente estoy usando un SVM con un núcleo lineal para clasificar mis datos. No hay error en el conjunto de entrenamiento. Intenté varios valores para el parámetro ( 10 - 5 , , 10 2 ). Esto no cambió el error en el conjunto de prueba.C10-5 5,...,102

Ahora me pregunto: ¿es este un error causado por los enlaces de rubí para el libsvmque estoy usando ( rb-libsvm ) o es teóricamente explicable ?

¿Debería el parámetro cambiar siempre el rendimiento del clasificador?C

esparto
fuente
Solo un comentario, no una respuesta: cualquier programa que minimice una suma de dos términos, como debería (en mi humilde opinión) decirte cuáles son los dos términos al final, para que puedas ver cómo se equilibran. (Para obtener ayuda sobre cómo calcular los dos términos SVM, intente hacer una pregunta por separado. ¿Ha visto algunos de los puntos peor clasificados? ¿Podría publicar un problema similar al suyo?)El |wEl |2+Cξyo,
denis

Respuestas:

136

El parámetro C le dice a la optimización de SVM cuánto desea evitar clasificar mal cada ejemplo de entrenamiento. Para valores grandes de C, la optimización elegirá un hiperplano de menor margen si ese hiperplano hace un mejor trabajo al clasificar correctamente todos los puntos de entrenamiento. Por el contrario, un valor muy pequeño de C hará que el optimizador busque un hiperplano de separación de mayor margen, incluso si ese hiperplano clasifica erróneamente más puntos. Para valores muy pequeños de C, debe obtener ejemplos mal clasificados, a menudo incluso si sus datos de entrenamiento son linealmente separables.

Marc tiembla
fuente
1
Bien, entiendo que C determina la influencia de la clasificación errónea en la función objetivo. La función objetivo es la suma de un término de regularización y la tasa de clasificación errónea (ver en.wikipedia.org/wiki/Support_vector_machine#Soft_margin ). Cuando cambio C, esto no tiene ningún efecto sobre el mínimo de mi función objetivo. ¿Podría eso significar que el término de regularización es siempre muy pequeño?
alfa
3
Sugeriría probar un rango más amplio de valores de C, tal vez 10 ^ [- 5, ..., 5] o más si la optimización es rápida en su conjunto de datos, para ver si obtiene algo que parezca más razonable. Tanto el error de entrenamiento como el valor del costo mínimo deben cambiar a medida que C varía. Además, ¿la escala de sus datos es extrema? En general, un parámetro C óptimo debería ser mayor cuando reduce la escala de sus datos, y viceversa, por lo que si tiene valores muy pequeños para las características, asegúrese de incluir valores muy grandes para los posibles valores de C. Si nada de lo anterior ayuda, supongo que el problema está en los enlaces de rubí
Marc Shivers
3
cambiar la precisión equilibrada de 0.5 (solo adivinando) a 0.86 no me parece una influencia marginal. Sería una buena idea investigar una cuadrícula de valores más fina para C como sugiere Marc, pero los resultados que proporcionó parecen ser un comportamiento bastante normal. Uno podría esperar que el error vuelva a subir ya que C tiende al infinito debido al sobreajuste, pero eso no parece ser un gran problema en este caso. Tenga en cuenta que si está realmente interesado en un error equilibrado y su conjunto de entrenamiento no tiene una división 50:50, entonces puede obtener mejores resultados ...
Dikran Marsupial
2
... mediante el uso de diferentes valores de C para los patrones que pertenecen a las clases positivas y negativas (que es asintóticamente equivalente a volver a muestrear los datos para cambiar la proporción de patrones que pertenecen a cada clase).
Dikran Marsupial
2
Creo que es posible que una vez que llegue a C = 10 ^ 0, el SVM ya esté clasificando todos los datos de entrenamiento correctamente, y ninguno de los vectores de soporte esté vinculado (el alfa es igual a C) en ese caso, hacer que C sea más grande tiene Sin efecto sobre la solución.
Dikran Marsupial
152

En un SVM está buscando dos cosas: un hiperplano con el margen mínimo más grande y un hiperplano que separa correctamente tantas instancias como sea posible. El problema es que no siempre podrá obtener ambas cosas. El parámetro c determina cuán grande es tu deseo para este último. He dibujado un pequeño ejemplo a continuación para ilustrar esto. A la izquierda tiene una c baja que le da un margen mínimo bastante grande (morado). Sin embargo, esto requiere que descuidemos el círculo azul atípico que no hemos podido clasificar correctamente. A la derecha tienes un alto c. Ahora no descuidará el valor atípico y, por lo tanto, terminará con un margen mucho más pequeño.

ingrese la descripción de la imagen aquí

Entonces, ¿cuál de estos clasificadores son los mejores? Eso depende de cómo se vean los datos futuros que predecirá, y la mayoría de las veces no lo sabe, por supuesto. Si los datos futuros se ven así:

c grande es mejor entonces el clasificador aprendido usando un valor c grande es el mejor.

Por otro lado, si los datos futuros se ven así:

bajo c es mejor entonces el clasificador aprendido usando un valor c bajo es el mejor.

Dependiendo de su conjunto de datos, cambiar c puede o no producir un hiperplano diferente. Si se hace producir un hiperplano diferente, eso no implica que su clasificador de salida diferentes clases de los datos particulares que lo han utilizado para clasificar. Weka es una buena herramienta para visualizar datos y jugar con diferentes configuraciones para un SVM. Puede ayudarlo a tener una mejor idea de cómo se ven sus datos y por qué cambiar el valor de c no cambia el error de clasificación. En general, tener pocas instancias de entrenamiento y muchos atributos hace que sea más fácil hacer una separación lineal de los datos. Además, el hecho de que esté evaluando sus datos de entrenamiento y no nuevos datos invisibles facilita la separación.

¿De qué tipo de datos está tratando de aprender un modelo? ¿Cuántos datos? Podemos verlo?

Kent Munthe Caspersen
fuente
44
No toqué los datos durante más de 3 años. Es muy dimensional y ruidoso y no se me permite publicarlo. La pregunta ya ha sido respondida, pero creo que su visualización es muy buena e intuitiva.
alfa
increíble. ¿tiene usted también tales explicaciones para el valor de gama?
MonsterMMORPG
2
El parámetro gamma se utiliza para la función del núcleo gaussiano. Las funciones del kernel pueden verse como una forma eficiente de transformar sus características originales en otro espacio, donde un hiperplano de separación en el nuevo espacio de características no tiene que ser lineal en el espacio de características original. Por ejemplo, la posición bidimensional de un punto de datos en el espacio de entidades original podría usarse para calcular una nueva entidad que representa la distancia a algún marcador en un mapa. Con esta nueva característica, se puede hacer un clasificador no lineal (en el espacio original) cuyo límite de decisión forma un círculo alrededor del marcador
Kent Munthe Caspersen
@KentMuntheCaspersen ¿no es incorrecta su explicación de C? Es lo contrario de lo que dice en el libro "Introducción al aprendizaje estadístico".
Diugalde
2
@diugalde, ¿puedes citar del libro qué difiere exactamente de mi explicación? Siempre pienso en c como el costo de una clasificación errónea (fácil de recordar por c en la clasificación). De esa manera, c más alto significa un alto costo de clasificación errónea, lo que lleva al algoritmo a tratar de separar perfectamente todos los puntos de datos. Con valores atípicos esto no siempre es posible o no siempre conducirá a un buen resultado general, lo cual es una buena razón para bajar / introducir c.
Kent Munthe Caspersen
26

C es esencialmente un parámetro de regularización, que controla la compensación entre lograr un error bajo en los datos de entrenamiento y minimizar la norma de los pesos. Es análoga al parámetro de cresta en la regresión de cresta (de hecho, en la práctica hay poca diferencia en el rendimiento o la teoría entre las SVM lineales y la regresión de cresta, por lo que generalmente uso la última regresión de cresta del núcleo si hay más atributos que observaciones).

El ajuste correcto de C es un paso vital en la mejor práctica en el uso de SVM, ya que la minimización del riesgo estructural (el principio clave detrás del enfoque básico) se implementa a través del ajuste de C. El parámetro C impone un límite superior en la norma de ponderaciones, lo que significa que hay un conjunto anidado de clases de hipótesis indexadas por C. A medida que aumentamos C, aumentamos la complejidad de la clase de hipótesis (si aumentamos C ligeramente, aún podemos formar todos los modelos lineales que pudimos antes y también algunos que no pudimos antes de aumentar el límite superior en la norma permitida de los pesos). Entonces, además de implementar SRM a través de la clasificación de margen máximo, también se implementa limitando la complejidad de la clase de hipótesis mediante el control de C.

Lamentablemente, la teoría para determinar cómo establecer C no está muy bien desarrollada en este momento, por lo que la mayoría de las personas tienden a usar la validación cruzada (si hacen algo).

Dikran Marsupial
fuente
OK, creo que entiendo el significado de C ahora. :)
alfa
2
Pero si C es un parámetro de regularización, ¿por qué un C alto aumenta el sobreajuste, cuando generalmente se hace la regularización para mitigar el sobreajuste, es decir, al crear un modelo más general?
user1603472
2
C es un parámetro de regularización, pero está esencialmente vinculado al término de ajuste de datos (la suma de las variables de holgura) en lugar del término de regularización (el bit de margen), por lo que un valor mayor de C significa menos regularización, en lugar de más. Alternativamente, puede ver la representación habitual del parámetro de rgularización como 1 / C.
Dikran Marsupial
8

C es un parámetro de regularización que controla la compensación entre lograr un error de entrenamiento bajo y un error de prueba bajo que es la capacidad de generalizar su clasificador a datos invisibles.

Considere la función objetivo de un SVM lineal: min | w | ^ 2 + C∑ξ. Si su C es demasiado grande, el algoritmo de optimización intentará reducir | w | tanto como sea posible que conduzca a un hiperplano que intente clasificar cada ejemplo de entrenamiento correctamente. Hacer esto conducirá a la pérdida de las propiedades de generalización del clasificador. Por otro lado, si su C es demasiado pequeña, le da a su función objetivo una cierta libertad para aumentar | w | mucho, lo que conducirá a un gran error de entrenamiento.

Las siguientes imágenes pueden ayudarlo a visualizar esto. Clasificador SVM lineal con C = 10000000Clasificador SVM lineal con C = 0.001

ciervo
fuente
Realmente no entiendo tus argumentos. ¿Puedes explicarlo?
alfa
1
@alfa: Mi intención de mostrar las gráficas fue: 1) Si C es demasiado grande (gráfica 1), entonces su clasificador se ajustará en exceso, es decir, intentará clasificar cada punto de datos de entrenamiento con precisión. La gráfica 1 muestra que casi todos los puntos de entrenamiento se clasifican correctamente. 2) Por otro lado, si C es demasiado menor (gráfico 2), entonces su clasificador estará mal ajustado. La gráfica 2 muestra el clasificador debajo del ajuste. No segrega los puntos en sus respectivas clases. Espero que esto ayude.
ciervo
Eso significa que sus ejes X e Y muestran dos características diferentes. ¿Las etiquetas "longitud del conjunto de datos" y "Suma de medios" son un poco confusas?
alfa
Sería interesante ver cómo la elección correcta de C ayuda en ambos casos.
alfa
2
Creo que no es obvio ver que C = 10000000 es una mala elección y creo que el conjunto de datos no es el correcto para demostrarlo. ¿Quizás sería mejor un conjunto de datos con solo unos pocos valores atípicos en el lado equivocado del hiperplano de separación?
alfa
4

Las respuestas anteriores son excelentes. Después de leer cuidadosamente sus preguntas, descubrí que hay 2 hechos importantes que podríamos pasar por alto.

  1. Estás usando kernel lineal
  2. Sus datos de entrenamiento son linealmente separables, ya que "No hay error en el conjunto de entrenamiento".

Dados los 2 hechos, si los valores de C cambian dentro de un rango razonable, el hiperplano óptimo se desplazará aleatoriamente en una pequeña cantidad dentro del margen (el espacio formado por los vectores de soporte).

Intuitivamente, suponga que el margen en los datos de entrenamiento es pequeño, y / o no hay puntos de datos de prueba dentro del margen, el desplazamiento del hiperplano óptimo dentro del margen no afectará el error de clasificación del conjunto de prueba.

No obstante, si establece C = 0, SVM ignorará los errores y solo tratará de minimizar la suma de cuadrados de los pesos (w), tal vez pueda obtener resultados diferentes en el conjunto de prueba.

luz
fuente
2

El parámetro C se usa para controlar los valores atípicos: una C baja implica que permitimos más valores atípicos, una C alta implica que permitimos menos valores atípicos.

H. Irshad
fuente
1

Alto C (costo) significa que se incrementa el costo de clasificación errónea. Esto significa que un núcleo flexible se volverá más ondulado para evitar clasificar erróneamente las observaciones en el conjunto de entrenamiento.

Si el kernel es ondulado, el modelo no se generalizará bien al predecir datos nuevos.

Si el núcleo es recto, el modelo no se generalizará bien al predecir datos nuevos.

Puntilla
fuente