machine learning - support - ¿Cuál es la relación entre el número de vectores de soporte y los datos de entrenamiento y el rendimiento de los clasificadores?
maquinas de soporte vectorial para dummies (5)
800 de cada 1000 básicamente le dice que la SVM necesita usar casi cada muestra de entrenamiento para codificar el conjunto de entrenamiento. Eso básicamente te dice que no hay mucha regularidad en tus datos.
Parece que tienes problemas importantes con datos de entrenamiento insuficientes. Además, tal vez piense en algunas características específicas que separan mejor estos datos.
Estoy usando LibSVM para clasificar algunos documentos. Los documentos parecen ser un poco difíciles de clasificar como lo muestran los resultados finales. Sin embargo, he notado algo mientras entrenaba mis modelos. y eso es: si mi conjunto de entrenamiento es, por ejemplo, 1000 alrededor de 800 de ellos se seleccionan como vectores de soporte. He buscado en todas partes para encontrar si esto es algo bueno o malo. Quiero decir, ¿hay una relación entre el número de vectores de soporte y el rendimiento de los clasificadores? He leído esta publicación publicación anterior . Sin embargo, estoy realizando una selección de parámetros y también estoy seguro de que los atributos en los vectores de características están ordenados. Solo necesito saber la relación. Gracias. ps: utilizo un kernel lineal.
Existe cierta confusión entre las fuentes. En el libro de texto ISLR 6th Ed, por ejemplo, C se describe como un "presupuesto de violación de límites", de donde se sigue que una C más alta permitirá más violaciones de límites y más vectores de soporte. Pero en las implementaciones de svm en R y python, el parámetro C se implementa como "penalización de violación", que es lo opuesto y luego observará que para valores más altos de C hay menos vectores de soporte.
La clasificación SVM es lineal en el número de vectores de soporte (SV). El número de SVs en el peor de los casos es igual al número de muestras de entrenamiento, por lo que 800/1000 aún no es el peor caso, pero sigue siendo bastante malo.
Por otra parte, 1000 documentos de capacitación es un pequeño conjunto de capacitación. Debe verificar lo que sucede cuando escala hasta 10000 o más documentos. Si las cosas no mejoran, considere usar LibLinear lineales, entrenados con LibLinear , para la clasificación de documentos; aquellos escalan mucho mejor (el tamaño del modelo y el tiempo de clasificación son lineales en el número de características e independientemente del número de muestras de capacitación).
Las máquinas de vectores de soporte son un problema de optimización. Están intentando encontrar un hiperplano que divide las dos clases con el margen más grande. Los vectores de soporte son los puntos que se encuentran dentro de este margen. Es más fácil de entender si lo construyes de simple a más complejo.
Hard Margin Linear SVM
En un conjunto de entrenamiento donde los datos son linealmente separables, y está utilizando un margen rígido (sin holgura), los vectores de soporte son los puntos que se encuentran a lo largo de los hiperplanos de soporte (los hiperplanos paralelos al hiperplano divisorio en los bordes del margen)
Todos los vectores de soporte se encuentran exactamente en el margen. Independientemente del número de dimensiones o el tamaño del conjunto de datos, la cantidad de vectores de soporte podría ser tan pequeña como 2.
Soft-Margin Linear SVM
Pero, ¿qué pasa si nuestro conjunto de datos no es separable linealmente? Introducimos SVM de margen suave. Ya no exigimos que nuestros puntos de datos se encuentren fuera del margen, permitimos que cierta cantidad se desvíe de la línea hacia el margen. Usamos el parámetro de holgura C para controlar esto. (nu en nu-SVM) Esto nos da un margen más amplio y un mayor error en el conjunto de datos de entrenamiento, pero mejora la generalización y / o nos permite encontrar una separación lineal de datos que no es separable linealmente.
Ahora, la cantidad de vectores de soporte depende de la holgura que permitamos y la distribución de los datos. Si permitimos una gran cantidad de holgura, tendremos una gran cantidad de vectores de soporte. Si permitimos muy poca holgura, tendremos muy pocos vectores de soporte. La precisión depende de encontrar el nivel adecuado de holgura para los datos que se analizan. Algunos datos no permitirán obtener un alto nivel de precisión, simplemente debemos encontrar la mejor opción posible.
SVM no lineal
Esto nos lleva a SVM no lineal. Todavía estamos tratando de dividir linealmente los datos, pero ahora estamos tratando de hacerlo en un espacio dimensional superior. Esto se hace a través de una función kernel, que por supuesto tiene su propio conjunto de parámetros. Cuando traducimos esto al espacio de características original, el resultado es no lineal:
Ahora, la cantidad de vectores de soporte aún depende de la holgura que permitamos, pero también depende de la complejidad de nuestro modelo. Cada giro y giro en el modelo final en nuestro espacio de entrada requiere uno o más vectores de soporte para definir. En última instancia, el resultado de una SVM son los vectores de soporte y un alfa, que en esencia está definiendo cuánta influencia tiene ese vector de soporte específico en la decisión final.
Aquí, la precisión depende de la compensación entre un modelo de alta complejidad que puede sobredimensionar los datos y un margen grande que clasificará incorrectamente algunos de los datos de capacitación en aras de una mejor generalización. La cantidad de vectores de soporte puede variar desde muy pocos a cada punto de datos si se sobrepone completamente a sus datos. Esta compensación se controla a través de C y a través de la elección de los parámetros kernel y kernel.
Supongo que cuando dijiste performance te referías a la precisión, pero pensé que también hablaría del rendimiento en términos de complejidad computacional. Para probar un punto de datos con un modelo SVM, debe calcular el producto escalar de cada vector de soporte con el punto de prueba. Por lo tanto, la complejidad computacional del modelo es lineal en el número de vectores de soporte. Menos vectores de soporte significa una clasificación más rápida de los puntos de prueba.
Un buen recurso: un tutorial sobre máquinas de vectores de apoyo para el reconocimiento de patrones
Tanto el número de muestras como el número de atributos pueden influir en la cantidad de vectores de soporte, lo que hace que el modelo sea más complejo. Creo que usas palabras o incluso ngrams como atributos, por lo que hay bastantes de ellos, y los modelos de lenguaje natural son muy complejos. Entonces, 800 vectores de soporte de 1000 muestras parecen estar bien. (También preste atención a los comentarios de @ karenu sobre los parámetros C / nu que también tienen un gran efecto sobre el número de SV).
Para tener intuición sobre esta idea principal de recordar SVM. SVM funciona en un espacio de funciones multidimensional e intenta encontrar hiperplano que separa todas las muestras dadas. Si tiene muchas muestras y solo 2 funciones (2 dimensiones), los datos y el hiperplano pueden verse así:
Aquí solo hay 3 vectores de soporte, todos los demás están detrás de ellos y, por lo tanto, no juegan ningún papel. Tenga en cuenta que estos vectores de soporte están definidos solo por 2 coordenadas.
Ahora imagine que tiene 3 dimensiones de espacio y, por lo tanto, los vectores de soporte se definen mediante 3 coordenadas.
Esto significa que hay un parámetro más (coordenada) para ajustar, y este ajuste puede necesitar más muestras para encontrar hiperplano óptimo. En otras palabras, en el peor de los casos, SVM encuentra solo 1 coordenada de hiperplano por muestra.
Cuando los datos están bien estructurados (es decir, mantienen los patrones bastante bien), solo se necesitan varios vectores de soporte; todos los demás se quedarán atrás. Pero el texto es muy, muy mal estructurado de datos. SVM hace todo lo posible, tratando de ajustar la muestra lo mejor posible, y por lo tanto toma como vectores de soporte incluso más muestras que gotas. Con un número creciente de muestras, esta "anomalía" se reduce (aparecen muestras más insignificantes), pero el número absoluto de vectores de soporte permanece muy alto.