194 votos

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

Actualmente estoy utilizando una SVM con un núcleo lineal para clasificar mis datos. No hay ningún error en el conjunto de entrenamiento. He probado varios valores para el parámetro $C$ ( $10^{-5}, \dots, 10^2$ ). Esto no cambió el error en el conjunto de pruebas.

Ahora me me pregunto: ¿es un error causada por las fijaciones de rubí para libsvm Estoy usando ( rb-libsvm ) o se trata de teóricamente explicable ?

En caso de que el parámetro $C$ ¿se modifica siempre el rendimiento del clasificador?

0 votos

Sólo un comentario, no una respuesta: Cualquier programa que minimiza una suma de dos términos, como $|w|^2 + C \sum{ \xi_i }, $ debería (en mi opinión) decirte cuáles son los dos términos al final, para que puedas ver cómo se equilibran. (Si necesita ayuda para calcular usted mismo los dos términos de la SVM, intente hacer una pregunta aparte. ¿Ha mirado algunos de los puntos peor clasificados? ¿Podría publicar un problema similar al suyo?)

240voto

En una SVM se buscan dos cosas: un hiperplano con el mayor margen mínimo y un hiperplano que separe correctamente el mayor número posible de instancias. El problema es que no siempre podrá conseguir ambas cosas. El parámetro c determina cómo de grande es tu deseo de conseguir esto último. He dibujado un pequeño ejemplo a continuación para ilustrar esto. A la izquierda tienes un c bajo que te da un margen mínimo bastante grande (morado). Sin embargo, esto requiere que despreciemos el círculo azul atípico que no hemos clasificado correctamente. A la derecha tiene una c alta. Ahora no descuidará el valor atípico y, por lo tanto, terminará con un margen mucho menor.

enter image description here

Entonces, ¿cuáles de estos clasificadores son los mejores? Eso depende de cómo sean los datos futuros que se van a predecir, y la mayoría de las veces no se sabe, por supuesto. Si los datos futuros se parecen a esto:

large c is best entonces el clasificador aprendido utilizando un valor c grande es el mejor.

Por otro lado, si los datos futuros son así:

low c is best entonces el clasificador aprendido utilizando un valor c bajo es el mejor.

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

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

4 votos

No he tocado los datos desde hace más de 3 años. Son datos muy densos y ruidosos y no se me permite publicarlos. La pregunta ya ha sido respondida pero creo que tu visualización es muy buena e intuitiva.

1 votos

Impresionante. ¿también tienes esas explicaciones para el valor de la gama?

3 votos

El parámetro gamma se utiliza para la función del núcleo gaussiano. Las funciones kernel pueden verse como una forma eficiente de transformar las 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 características original podría utilizarse para calcular una nueva característica que represente la distancia a algún marcador en un mapa. Con esta nueva característica, se puede realizar un clasificador no lineal (en el espacio original) cuyo límite de decisión forme un círculo alrededor del marcador

189voto

Seba Puntos 16

El parámetro C indica a la optimización de la SVM cuánto quiere evitar la clasificación errónea de cada ejemplo de entrenamiento. Para valores grandes de C, la optimización elegirá un hiperplano de margen más pequeño si ese hiperplano hace un mejor trabajo para conseguir que todos los puntos de entrenamiento se clasifiquen correctamente. 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 mal más puntos. Para valores muy pequeños de C, debería obtener ejemplos mal clasificados, a menudo incluso si sus datos de entrenamiento son linealmente separables.

1 votos

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 (véase es.wikipedia.org/wiki/Máquina vectorial de apoyo#Margen_blando ). Cuando cambio C, esto no tiene ningún efecto sobre el mínimo de mi función objetivo. ¿Podría significar eso que el término de regularización es siempre muy pequeño?

3 votos

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 coste mínimo deberían cambiar al variar C. Además, ¿la escala de tus datos es extrema? En general, un parámetro C óptimo debería ser mayor cuando se reduce la escala de los datos, y viceversa, así que si tienes valores muy pequeños para las características, asegúrate de incluir valores muy grandes para los posibles valores de C. Si nada de lo anterior ayuda, yo adivinar el problema está en los enlaces de ruby

0 votos

Lo que he dicho está parcialmente equivocado. En realidad, el valor de C tiene una influencia, pero es marginal. Estoy calculando la precisión equilibrada ((tp/(tp+fn)+tn/(tn+fp))/2) en mi conjunto de pruebas. Si la complejidad es de 10^-5 o 10^-4, la precisión equilibrada será de 0,5. Cuando establezco C en 10^-3 es 0,79, para C=10^-2 es 0,8, para C=10^-1 es 0,85 y para C=10^0,...,10^7 es 0,86, que parece ser el mejor valor posible aquí. Los datos están normalizados de forma que la desviación estándar es 1 y la media es 0.

36voto

John Richardson Puntos 1197

C es esencialmente un parámetro de regularización, que controla el compromiso entre lograr un bajo error en los datos de entrenamiento y minimizar la norma de los pesos. Es análogo 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 SVM lineal y la regresión de cresta, por lo que generalmente uso esta última - o la regresión de cresta de núcleo si hay más atributos que observaciones).

Ajustar C correctamente 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 los pesos, 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 ligeramente C, todavía podemos formar todos los modelos lineales que podíamos antes y también algunos que no podíamos antes de aumentar el límite superior de la norma permitida de los pesos). Por lo tanto, además de implementar SRM a través de la clasificación de margen máximo, también se implementa mediante la limitación de la complejidad de la clase de hipótesis a través del control de C.

Lamentablemente, la teoría para determinar cómo establecer C no está muy bien desarrollada por el momento, por lo que la mayoría de la gente tiende a utilizar la validación cruzada (si es que hacen algo).

0 votos

Vale, creo que ahora entiendo el significado de C. :)

2 votos

Pero si C es un parámetro de regularización, ¿por qué un C alto aumenta el sobreajuste, cuando en general la regularización se hace para mitigar el sobreajuste, es decir, creando un modelo más general?

4 votos

C es un parámetro de regularización, pero está esencialmente unido al término de desajuste de los 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. También puede ver la representación habitual del parámetro de regularización como 1/C.

12voto

user68497 Puntos 101

C es un parámetro de regularización que controla la compensación entre el logro de un bajo error de entrenamiento y un bajo error de prueba, que es la capacidad de generalizar su clasificador a los datos no vistos.

Considere la función objetivo de una SVM lineal : min |w|^2+C∑ξ. Si su C es demasiado grande, el algoritmo de optimización tratará de reducir |w| tanto como sea posible conduciendo a un hiperplano que trata de clasificar cada ejemplo de entrenamiento correctamente. Al hacer esto, se perderán las propiedades de generalización del clasificador. Por otro lado, si su C es demasiado pequeño, le da a su función objetivo cierta libertad para aumentar mucho |w|, lo que llevará a un gran error de entrenamiento.

Las imágenes siguientes pueden ayudarle a visualizarlo. Linear SVM Classifier with C=10000000Linear SVM Classifier with C=0.001

0 votos

No entiendo muy bien sus tramas. ¿Puedes explicarlo?

1 votos

@alfa : Mi intención al mostrar los gráficos era: 1) Si C es demasiado grande (gráfico 1), entonces su clasificador se ajustará demasiado, es decir, tratará de clasificar cada punto de datos de entrenamiento con precisión. El gráfico 1 muestra que casi todos los puntos de entrenamiento se clasifican correctamente. 2) Por otro lado, si C es demasiado pequeño (gráfico 2), el clasificador no se ajustará lo suficiente. El gráfico 2 muestra el clasificador de ajuste insuficiente. No segrega los puntos en sus respectivas clases. Espero que esto ayude.

0 votos

Eso significa que sus ejes X e Y muestran dos características diferentes. Las etiquetas "longitud del conjunto de datos" y "suma de medias" son un poco confusas?

7voto

Aakash Puntos 21

La mayoría de las respuestas anteriores son bastante buenas, pero permítanme aclarar algo para alguien como yo que tuvo que pasar 3 días en la comprensión de la función de parámetro C en SVM debido a diferentes fuentes.

En el libro ISLR( http://faculty.marshall.usc.edu/gareth-james/ISL/ ) Un C más grande significa que se permite una clasificación errónea mayor, lo que hace que el margen sea más amplio, y un C más pequeño significa que se permite una clasificación errónea menor, lo que lleva a un margen pequeño. Mientras que en todos los recursos que he leído y en la documentación de Python es justo lo contrario.

En realidad es ISLR C se define como el límite superior de la suma de todas las variables de holgura. enter image description here

Pero en python y otras fuentes( https://shuzhanfan.github.io/2018/05/understanding-mathematics-behind-support-vector-machines/#:~:text=En%20términos%20del%20SVM,%2Bb )%E2%88%921%5D.) Si establecemos C en infinito positivo, obtendremos el mismo resultado que la SVM de margen duro. Por el contrario, si establecemos C a 0, no habrá ninguna restricción más, y terminaremos con un hiperplano que no clasifica nada. Las reglas generales son: los valores pequeños de C darán como resultado un margen más amplio, a costa de algunas clasificaciones erróneas; los valores grandes de C nos darán el clasificador de Margen Duro y toleran la violación de la restricción cero

enter image description here

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