2012-09-19 10 views
13

Estoy usando libsvm en modo C-SVC con un kernel polinomial de grado 2 y estoy obligado a entrenar varias SVM. Durante el entrenamiento, me estoy haciendo una o incluso ambas de estas advertencias para algunas de las SVM que entreno:libsvm Shrinking Heuristics

WARNING: using -h 0 may be faster 
* 
WARNING: reaching max number of iterations 
optimization finished, #iter = 10000000 

he encontrado la descripción del parámetro h:

-h shrinking : whether to use the shrinking heuristics, 0 or 1 (default 1) 

y yo Intenté leer la explicación de la documentación de libsvm, pero es un nivel demasiado alto para mí. ¿Puede alguien proporcionar una explicación para un profano y, tal vez, algunas sugerencias como establecer esto serían beneficiosas porque ...? Además, sería útil saber si al establecer este parámetro para todos los SVM que entreno, puede producir un impacto negativo en la precisión para aquellos SVM que no dan explícitamente esta advertencia.

No estoy seguro de qué hacer con la otra advertencia.

Solo para dar más detalles: mis juegos de entrenamiento tienen 10 atributos (características) y consisten en 5000 vectores.


Actualización:

En caso de que nadie más es conseguir que el "número máximo de iteraciones llegando", que parece ser causado por problemas de estabilidad numéricos. Además, esto producirá un tiempo de entrenamiento muy lento. Los núcleos polinomiales se benefician del uso de técnicas de validación cruzada para determinar el mejor valor para la regularización (el parámetro C) y, en el caso de los núcleos polinomiales, para mí ayudó a mantenerlo más pequeño que 8. Además, si el núcleo no es homogéneo \ sum (\ gamma x_i s_i + coef0)^d (lo sentimos, LaTeX no es compatible con SO), donde coef0! = 0, entonces la validación cruzada puede implementarse con una técnica de búsqueda de cuadrícula para gamma y C, ya que, en este caso, el valor predeterminado para gamma (1/number_of_features) podría no ser la mejor opción. Aún así, a partir de mis experimentos, probablemente no desee que la gamma sea demasiado grande, ya que causará problemas numéricos (estoy intentando obtener un valor máximo de 8 para ella).

Para obtener más inspiración sobre los valores posibles para gamma y C, se debe probar metiendo en grid.py.

Respuesta

8

La heurística decreciente está ahí para acelerar la optimización. Como se dice en las Preguntas frecuentes, a veces ayudan, y otras no. Creo que es una cuestión de tiempo de ejecución, en lugar de convergencia.

Sin embargo, el hecho de que la optimización alcanza el número máximo de iteraciones es interesante. Es posible que desee jugar con la tolerancia (parámetro de costo), o echar un vistazo a los problemas individuales que causan esto. ¿Los conjuntos de datos son grandes?

+0

¡Gracias por la respuesta! Creo que tienes razón con respecto a la reducción de la heurística. Solo ayudan a entrenar a los modelos más rápido. –

+0

En cuanto a las iteraciones máximas, mis conjuntos de datos tienen 5000 elementos cada uno. El entrenamiento toma menos de un minuto. ¿Cuál es el parámetro de costo? ¿Es la regularización? En este momento solo lo estoy estableciendo en 1, el valor predeterminado en libsvm ... –

+0

Oh, debo aclarar esto: mis juegos de entrenamiento tienen 10 atributos/características y consisten en 5000 vectores. –

Cuestiones relacionadas