¿Qué kernel SVM usar para un problema de clasificación binaria?

9

Soy un principiante cuando se trata de soportar máquinas de vectores. ¿Existen algunas pautas que digan qué núcleo (por ejemplo, lineal, polinomial) es el más adecuado para un problema específico? En mi caso, tengo que clasificar las páginas web según si contienen información específica o no, es decir, tengo un problema de clasificación binaria.

¿Puede decir en general qué núcleo es el más adecuado para esta tarea? ¿O tengo que probar varios de ellos en mi conjunto de datos específico para encontrar el mejor? Por cierto, estoy usando la biblioteca de Python scikit-learn que hace uso de la biblioteca libSVM.

pemistahl
fuente
¿Cómo representas tus páginas web? bolsa de palabras? La elección del núcleo depende de la medida de similitud que desee en su espacio de entrada.
Memming
@ Memming Sí, estoy usando una representación de bolsa de palabras. ¿Qué quieres decir exactamente con medida de similitud? Estoy investigando si una página web contiene algún tipo específico de información o no.
pemistahl 03 de
Puede encontrar este tutorial útil si aún no lo ha verificado ( csie.ntu.edu.tw/~cjlin/papers/guide/guide.pdf ). Libsvm tiene un esquema de validación cruzada k-fold incorporado para elegir entre modelos y parámetros de modelo.
Zoran
@PeterStahl Además, depende de qué tipo de límites de clase esperes. No tengo experiencia con el espacio de la bolsa de palabras, así que no puedo ayudarte mucho.
Memming

Respuestas:

10

De hecho, has encontrado una pregunta abierta en la literatura. Como usted dice, hay una variedad de núcleos (por ejemplo, lineal, función de base radial, sigmoide, polinomio), y realizará su tarea de clasificación en un espacio definido por sus respectivas ecuaciones. Que yo sepa, nadie ha demostrado definitivamente que un núcleo siempre se desempeña mejor en un tipo de tarea de clasificación de texto en comparación con otro.

Una cosa a tener en cuenta es que cada función del kernel tiene 1 o más parámetros que deberán optimizarse para su conjunto de datos, lo que significa que, si lo está haciendo correctamente, debe tener una segunda colección de entrenamiento de retención en la que pueda Investigue los mejores valores para estos parámetros. (Digo una segunda colección de espera, porque ya deberías tener una que estés usando para descubrir las mejores características de entrada para tu clasificador). Hice un experimento hace un tiempo en el que hice una optimización a gran escala de cada uno de ellos. estos parámetros para una tarea de clasificación textual simple y encontraron que cada núcleo parecía funcionar razonablemente bien, pero lo hizo en diferentes configuraciones. Si recuerdo mis resultados correctamente, sigmoid funcionó mejor, pero lo hizo con ajustes de parámetros muy específicos, que me tomaron más de un mes para encontrar mi máquina.

Kyle
fuente
Muchas gracias por tus pensamientos. Perdón por mi reacción tardía. Estoy escribiendo mi tesis de maestría en el momento en que necesito evaluar los resultados para varios clasificadores, no solo SVM. Desafortunadamente, no tengo tiempo para probar muchas combinaciones de parámetros. Es por eso que probablemente me atendré al núcleo lineal.
pemistahl
¡Buena suerte! Creo que es una buena decisión.
Kyle.
7

Prueba el núcleo gaussiano.

El núcleo gaussiano a menudo se prueba primero y resulta ser el mejor núcleo en muchas aplicaciones (con sus características de bolsa de palabras, también). También deberías probar el núcleo lineal. No espere que dé buenos resultados, los problemas de clasificación de texto tienden a ser no lineales. Pero le da una idea de sus datos y puede estar contento de cuánto mejora la no linealidad en sus resultados.

Asegúrese de validar correctamente el ancho del kernel y piense en cómo desea normalizar sus funciones (tf-idf, etc.).

Yo diría que puede mejorar sus resultados con una mejor normalización de características más que con la elección de un núcleo diferente (es decir, no el gaussiano).

flxb
fuente