2012-04-30 20 views
5

libsvm's "grid.py" intenta optimizar solo dos parámetros "c" y "g" de svm-train. Quería extender "grid.py" para optimizar otros parámetros (por ejemplo "r" o "d") ejecutando "grid.py" una y otra vez para diferentes parámetros. Tengo algunas preguntas
1. ¿Hay alguna secuencia de comandos que pueda optimizar parámetros distintos de "c" y "g"?
2. ¿Qué parámetros son más cruciales y qué rango hay máximo/mínimo? En algún momento, cambiar/optimizar un parámetro optimiza automáticamente otros parámetros. ¿Es el caso con los parámetros de svm-train?
svm-train optimización de otros parámetros

Respuesta

11

Hasta donde yo sé, no hay una secuencia de comandos que hace esto, sin embargo, no veo por qué grid.py no se puede extender fácilmente para hacerlo. Sin embargo, no creo que valga la pena el esfuerzo.

En primer lugar, debe elegir su kernel. Este es un parámetro en sí mismo. Cada núcleo tiene un conjunto diferente de parámetros, y funcionará de manera diferente, por lo que para comparar los núcleos, tendrá que optimizar los parámetros de cada kernel.

C, el parámetro de costo es un parámetro general que se aplica a SVM. Los otros parámetros son todas las entradas a la función kernel. C controla la compensación entre el margen amplio y más puntos de capacitación clasificados erróneamente (pero un modelo que puede generalizarse mejor a datos futuros) y un margen estrecho que se adapta mejor a los puntos de entrenamiento pero puede estar sobreajustado a los datos de entrenamiento.

Generalmente, los dos kernels más utilizados son lineales (que no requieren parámetros) y el kernel RBF.

El kernel RBF toma el parámetro gamma. Esto debe ser optimizado, su valor afectará significativamente el rendimiento.

Si está utilizando el kernel de polinomio, d es el parámetro principal, lo optimizaría. No tiene sentido modificar los otros parámetros de los valores predeterminados a menos que tenga alguna razón matemática por la cual hacerlo se ajustaría mejor a sus datos. En mi experiencia, el kernel polinomial puede dar buenos resultados, pero un minúsculo aumento si lo hay sobre el kernel RBF a un gran costo computacional.

Similar al kernel sigmoide, gamma es su parámetro principal, optimícelo y deje coef0 en el valor predeterminado, a menos que tenga una buena comprensión de por qué esto se ajusta mejor a sus datos.

Así que la razón por la cual grid.py no optimiza otros parámetros es porque en la mayoría de los casos es simplemente innecesario y generalmente no dará como resultado una mejora en el rendimiento. En cuanto a su segunda pregunta: No, este no es un caso donde optimizar uno optimizará el otro. Los valores óptimos de estos parámetros son específicos de su conjunto de datos. Cambiar el valor de los parámetros del kernel afectará el valor óptimo de C. Esta es la razón por la que se recomienda una búsqueda en la grilla. Agregar estos parámetros adicionales a su búsqueda aumentará significativamente el tiempo que tomará y es poco probable que le proporcione un aumento en el rendimiento del clasificador.

+0

te refieres a D is degree right? ¿Dónde puedo encontrar información sobre qué parámetros son esenciales para qué kernels? entonces no estaría perdiendo el tiempo con parámetros innecesarios. ty – MonsterMMORPG

Cuestiones relacionadas