python - rbf - ¿Cuál es el significado del parámetro nu en la clase SVM de Scikit-Learn?
svm kernel scikit learn (2)
El problema con C y la introducción de nu.
El problema con el parámetro C es:
- que puede tomar cualquier valor positivo
- Que no tiene interpretación directa.
Por lo tanto, es difícil elegir correctamente y uno tiene que recurrir a la validación cruzada o la experimentación directa para encontrar un valor adecuado.
En respuesta Schölkopf et al. SVM reformulado para tomar un nuevo parámetro de regularización nu. Este parámetro es:
- delimitado entre 0 y 1
- tiene una interpretación directa
Interpretación de nu
El parámetro nu es un límite superior en la fracción de errores de margen y un límite inferior de la fracción de vectores de soporte en relación con el número total de ejemplos de entrenamiento. Por ejemplo, si lo establece en 0.05, se garantiza que encontrará como máximo el 5% de sus ejemplos de entrenamiento que se clasifican incorrectamente (a un costo de un pequeño margen, sin embargo) y que al menos el 5% de sus ejemplos de entrenamiento son vectores de apoyo.
Relación entre C y nu
La relación entre C y nu se rige por la siguiente fórmula:
nu = A+B/C
A y B son constantes que desafortunadamente no son tan fáciles de calcular.
Conclusión
El mensaje para llevar es que C y nu SVM son equivalentes con respecto a su poder de clasificación. La regularización en términos de nu es más fácil de interpretar en comparación con C, pero la SVM de nu suele ser más difícil de optimizar y el tiempo de ejecución no se escala tan bien como la variante C con el número de muestras de entrada.
Más detalles (incluidas las fórmulas para A y B) se pueden encontrar aquí: Chang CC, Lin CJ - "Capacitación de clasificadores de vectores de soporte de nu: teoría y algoritmos"
Estoy siguiendo el ejemplo que se muestra en http://scikit-learn.org/stable/auto_examples/svm/plot_oneclass.html#example-svm-plot-oneclass-py , donde se utiliza una clase SVM para la detección de anomalías. Ahora, esto puede ser una notación única para scikit-learn, pero no pude encontrar una explicación de cómo usar el parámetro nu dado al constructor OneClassSVM.
En http://scikit-learn.org/stable/modules/svm.html#nusvc , se afirma que el parámetro nu es una reparación del parámetro C (que es el parámetro de regularización con el que estoy familiarizado), pero no No diga cómo realizar esa reparameterización.
Tanto una fórmula como una intuición serán muy apreciadas.
¡Gracias!
nu en los vectores de soporte es un parámetro hiper .
En c-SVM si queremos consultar un punto x q entonces
∑α i .y i .x i T .x q + b para i = 1 a n
Como sabemos, α i para vectores de soporte mayores que cero y para vecotrs no compatibles α i = 0.
por lo tanto, solo los vectores de soporte son importantes para calcular f (x q ) , pero en C-SVM regular no tenemos control sobre el no de los vectores de soporte, así que aquí viene el nu-SVM
nu:
- límite superior para ningún error.
Límite inferior para no. de vectores de soporte
nu siempre se encuentra entre 0 <= nu <= 1.
digamos nu = 0.1 y n = 10,000
1. queremos un máximo de 10% de error => 1000 puntos de error
2. obtenemos vectores de soporte> = 1% => obtenemos más de 1000 vectores de soporte.