¿Cómo seleccionar el núcleo para SVM?

96

Al usar SVM, debemos seleccionar un núcleo.

Me pregunto cómo seleccionar un núcleo. ¿Algún criterio para la selección del núcleo?

xiaohan2012
fuente
1
¿Cuál es el tamaño del problema? (#variables, observaciones)?
usuario603
1
Solo estoy pidiendo una solución generalizada, no se especifica ningún problema en particular
xiaohan2012

Respuestas:

55

El kernel es efectivamente una medida de similitud, por lo que es una buena idea elegir un kernel de acuerdo con el conocimiento previo de las variaciones como sugiere Robin (+1).

En ausencia de conocimiento experto, el núcleo de la función de base radial es un buen núcleo predeterminado (una vez que lo haya establecido, es un problema que requiere un modelo no lineal).

La elección del núcleo y los parámetros de núcleo / regularización pueden automatizarse mediante la optimización de una selección de modelo basada en valdiación cruzada (o usar el margen de radio o los límites de extensión). Lo más sencillo es minimizar un criterio de selección de modelo continuo utilizando el método simplex de Nelder-Mead, que no requiere cálculo de gradiente y funciona bien para números sensibles de hiperparámetros. Si tiene que ajustar más de unos pocos hiperparámetros, es probable que la selección automática del modelo dé como resultado un ajuste excesivo severo, debido a la variación del criterio de selección del modelo. Es posible utilizar la optimización basada en gradiente, pero la ganancia de rendimiento no suele valer la pena codificarla).

La elección automatizada de núcleos y parámetros de kernel / regularización es un problema complicado, ya que es muy fácil sobreajustar el criterio de selección de modelo (generalmente basado en validación cruzada), y puede terminar con un modelo peor de lo que comenzó. La selección automática del modelo también puede sesgar la evaluación del desempeño, así que asegúrese de que su evaluación del desempeño evalúe todo el proceso de ajuste del modelo (capacitación y selección del modelo), para más detalles, consulte

GC Cawley y NLC Talbot, Prevención del sobreajuste en la selección de modelos mediante la regularización bayesiana de los hiperparámetros, Journal of Machine Learning Research, volumen 8, páginas 841-861, abril de 2007. (pdf)

y

GC Cawley y NLC Talbot, Ajuste excesivo en la selección del modelo y posterior sesgo de selección en la evaluación del rendimiento, Journal of Machine Learning Research, vol. 11, pp. 2079-2107, julio de 2010. (pdf)

Dikran Marsupial
fuente
1
Entiendo cómo la base radial es una medida de similitud ya que es casi 0 para vectores muy alejados entre sí y alcanza su máximo en vectores idénticos. Sin embargo, no veo cómo esa idea se aplica al algoritmo lineal (usando el producto punto como núcleo). ¿Cómo podemos interpretar el producto punto como una medida de similitud?
Bananin
1
@Bananin, el producto de puntos puede escribirse como el producto de la magnitud de los dos vectores multiplicado por el coseno del ángulo entre ellos, por lo que puede pensar que mide la similitud en términos de la dirección de los vectores (pero obviamente también depende en sus magnitudes)
Dikran Marsupial
35

Si no está seguro de lo que sería mejor, puede utilizar técnicas automáticas de selección (por ejemplo, validación cruzada, ...). En este caso, incluso puede usar una combinación de clasificadores (si su problema es la clasificación) obtenidos con diferentes núcleos.

Sin embargo , la "ventaja" de trabajar con un núcleo es que cambia la geometría "euclidiana" habitual para que se adapte a su propio problema. Además, debería tratar de comprender cuál es el interés de un núcleo para su problema, qué es particular de la geometría de su problema . Esto puede incluir:

  • Invarianza : si hay una familia de transformaciones que no cambian su problema fundamentalmente, el núcleo debería reflejar eso. La invariancia por rotación está contenida en el núcleo gaussiano, pero puede pensar en muchas otras cosas: traducción, homotecia, cualquier representación grupal, ...
  • ¿Qué es un buen separador? Si tiene una idea de lo que es un buen separador (es decir, una buena regla de clasificación) en su problema de clasificación, esto debe incluirse en la elección del núcleo. Recuerda que SVM te dará clasificadores de la forma

f^(x)=i=1nλiK(x,xi)

Si sabe que un separador lineal sería bueno, puede usar Kernel que le da funciones afines (es decir, ). Si crees que los límites suaves mucho en el espíritu de KNN suave serían mejores, entonces puedes tomar un núcleo gaussiano ...K(x,xi)=x,Axi+c

robin girard
fuente
En su respuesta, mencionó que "La" ventaja "de trabajar con un núcleo es que cambia la geometría" euclidiana "habitual para que se adapte a su propio problema. Además, debe tratar de entender cuál es el interés de un núcleo para su problema, lo que es particular a la geometría de su problema ". ¿Puedes dar algunas referencias para empezar? Gracias.
Raihana
12

Siempre tengo la sensación de que cualquier selección de hiperparámetros para SVM se realiza mediante validación cruzada en combinación con la búsqueda de cuadrícula.

bayerj
fuente
2
Tengo el mismo sentimiento
xiaohan2012
2
La búsqueda en la cuadrícula es una mala idea, pasa mucho tiempo buscando en áreas donde el rendimiento es malo. Utilice algoritmos de optimización sin gradiente, como el método simplex de Nelder-Mead, que es mucho más eficiente en la práctica (por ejemplo, fminsearch () en MATLAB).
Dikran Marsupial
No, utilice modelos gráficos o procesos gaussianos para la optimización global en combinación con la información esperada. (Ver 'Algoritmos para la optimización de
hiperparámetros
3

En general, el núcleo RBF es una primera opción razonable. Además, el núcleo lineal es un caso especial de RBF. En particular, cuando el número de características es muy grande, uno puede usar el núcleo lineal.

boyxiaolong
fuente
2
Depende de si sus datos son linealmente separables o no, no de cuántas dimensiones tenga. Cuando el número de características es muy grande, (nuevamente dependiendo de los datos), primero aplicaría la reducción de dimensionalidad, PCA o LDA (variantes de kernel lineales o no lineales)