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.
Ahora me pregunto: ¿es este un error causado por los enlaces de rubí para el libsvm
que estoy usando ( rb-libsvm ) o es teóricamente explicable ?
¿Debería el parámetro cambiar siempre el rendimiento del clasificador?
machine-learning
svm
libsvm
esparto
fuente
fuente
Respuestas:
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.
fuente
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.
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í:
entonces el clasificador aprendido usando un valor c grande es el mejor.
Por otro lado, si los datos futuros se ven así:
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?
fuente
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).
fuente
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.
fuente
Las respuestas anteriores son excelentes. Después de leer cuidadosamente sus preguntas, descubrí que hay 2 hechos importantes que podríamos pasar por alto.
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.
fuente
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.
fuente
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.
fuente