Un desglose del funcionamiento interno de las máquinas de vectores de soporte (SVM) y las funciones de base radial (RBF)

57637ea3930293c5c39ac9761be1d959.png

来源:我得学城
本文约3000字,建议阅读7分钟本文将探讨支持向量机(SVM)的工作原理,结合Python代码示例和直观的可视化。

Este artículo cubre los siguientes temas:

  - La categoría de algoritmo a la que pertenece el algoritmo de clasificación SVM

  - Explicación de cómo funciona el algoritmo.

  - ¿Qué son los kernels y cómo se usan en SVM?

  - Obtenga más información sobre las funciones del kernel RBF con ejemplos y diagramas de Python

Artículo seleccionado de:

https://towardsdatascience.com/svm-classifier-and-rbf-kernel-how-to-make-better-models-in-python-73bb4914af5b 

1. ¿A qué categoría de algoritmos pertenece la clasificación de máquinas vectoriales?

Las máquinas de vectores de soporte (SVM) se usan más comúnmente para resolver problemas de clasificación, que se encuentran bajo el paraguas del aprendizaje automático supervisado.

Además, con pequeños ajustes, SVM también se puede usar para problemas de regresión mediante el uso de Support Vector Regression (SVR).

37f51b3a554bc25de629110069b16a87.png c6f0afeced8f840151630beafc9aedab.png

Puede pasar al enlace original para ver el gráfico interactivo.


2. Algoritmo de clasificación SVM - breve explicación

Supongamos que tenemos un conjunto de puntos pertenecientes a dos clases diferentes. Queremos separar las dos clases de una manera que nos permita asignar correctamente cualquier punto nuevo futuro a una de las clases.

El algoritmo SVM intenta encontrar un hiperplano que separe las dos clases con el mayor margen posible. Se puede usar un margen duro si las categorías son completamente separables linealmente. De lo contrario, se debe usar el margen suave.

Tenga en cuenta que los puntos que terminan en los bordes del intervalo se llaman vectores de soporte.

Para ayudar a entender, echemos un vistazo al diagrama de ejemplo a continuación.

2.1 Espaciado duro

215326235f5d5aeef1603daeba51b6a5.png

Utilice el algoritmo SVM para separar las dos clases de puntos. Escenas de espaciado duro.

El hiperplano conocido como "H1" no puede separar las dos clases con precisión, por lo que no es una solución viable para nuestro problema.

El hiperplano "H2" separa las categorías correctamente. Sin embargo, la distancia entre el hiperplano y los puntos azul y verde más cercanos es pequeña. Por lo tanto, existe un alto riesgo de clasificar erróneamente cualquier punto nuevo en el futuro. Por ejemplo, el algoritmo asigna un nuevo punto gris (x1=3, x2=3,6) a la clase verde cuando es obvio que debería pertenecer a la clase azul.

Finalmente, el hiperplano "H3" separa correctamente las dos clases y tiene la mayor separación posible (área sombreada en amarillo). ¡Encontré una solución!

Tenga en cuenta que encontrar el intervalo más grande posible clasifica los puntos nuevos con mayor precisión, lo que hace que el modelo sea más sólido. Al usar el hiperplano "H3", puede ver que los nuevos puntos grises están correctamente asignados a la categoría azul.


2.2 Margen blando

A veces, las dos categorías no se pueden separar perfectamente. En este caso, se utiliza un intervalo suave, en el que se permite que algunos puntos se clasifiquen incorrectamente o se encuentren dentro del intervalo (área sombreada en amarillo). Aquí es donde entra en juego la "variable de holgura" (denotada por la letra griega ξ(xi)).

8e898b6b282cd190376800d048aa9a35.png

Utilice el algoritmo SVM para separar las dos clases de puntos. Escena de intervalo suave.

Con este ejemplo, podemos ver que el hiperplano "H4" trata los puntos verdes dentro del intervalo como valores atípicos. Entonces, los vectores de soporte son los dos puntos verdes que están más cerca del grupo principal de puntos verdes. Esto permite intervalos más grandes, aumentando la robustez del modelo.

Tenga en cuenta que al ajustar el hiperparámetro C, el algoritmo le permite controlar cuánta atención se presta a las clasificaciones erróneas (y puntos dentro del intervalo). En esencia, C actúa como un peso asignado a ξ. Una C más baja hace que el límite de decisión sea más suave (más robusto), mientras que una C más alta tiene como objetivo clasificar todas las muestras de entrenamiento correctamente, lo que produce un ajuste más cercano a los datos de entrenamiento pero hace que el modelo sea menos robusto.

Tenga en cuenta que aunque establecer C en un valor más alto puede hacer que el modelo funcione mejor en los datos de entrenamiento, existe un alto riesgo de sobreajustar el modelo, lo que produce resultados deficientes en los datos de prueba.


3. Trucos nucleares

La explicación anterior de SVM cubre el ejemplo donde las clases azul y verde son linealmente separables. Sin embargo, ¿qué pasa si queremos aplicar SVM a problemas no lineales?

Esto es lo que hace el truco del kernel.

La función kernel es una función que transforma el problema no lineal original en un problema lineal en un espacio de alta dimensión. Para explicar este truco, veamos el siguiente ejemplo.

Supongamos que tiene dos clases: rojo y negro, así:

279f819cb478c871ace2c6e97d0ed594.png

datos 2D sin procesar

Como puede ver, los puntos rojo y negro no son linealmente separables porque no podemos dibujar una línea que coloque estas dos clases en diferentes lados de la línea. Sin embargo, podemos separarlos dibujando un círculo que ponga todos los puntos rojos en el interior y los puntos negros en el exterior.

¿Cómo convertir este problema en un problema lineal?

Agreguemos una tercera dimensión, definida como la suma de los cuadrados de los valores de x e y:

Usando este espacio 3D con coordenadas y, ahora podemos dibujar un hiperplano (una superficie 2D plana) para separar los puntos rojo y negro. Por lo tanto, ahora se puede utilizar el algoritmo de clasificación SVM.

aeb96ff86fc072873dfd21216b55b5a1.png

Datos transformados por técnicas kernel. Las clases roja y negra ahora son linealmente separables. Puede pasar al enlace original para ver el gráfico interactivo.

4 Función kernel de función de base radial (RBF) y ejemplo de Python

RBF (función de base radial) es la función de kernel predeterminada utilizada en el algoritmo de clasificación SVM de sklearn, que se puede describir mediante la siguiente fórmula: 

Entre ellos, gamma( ) puede configurarse manualmente y debe ser mayor que 0. El valor predeterminado de gamma en el algoritmo de clasificación SVM de sklearn es: 

en breve:

  es el cuadrado de la distancia euclidiana entre dos vectores propios (2 puntos).

Gamma( ) es un escalar que define el grado de influencia de una sola muestra de entrenamiento (punto).

Por lo tanto, de acuerdo con la configuración anterior, podemos controlar la influencia de puntos individuales en todo el algoritmo. Cuanto mayor sea Gamma, más cercana será la influencia de otros puntos al modelo. Veremos el efecto de cambiar gamma en el siguiente ejemplo de Python.

4.1 Configuración

Usaremos los siguientes datos y bibliotecas:

  • Datos de partidas de ajedrez de Kaggle

  • La biblioteca Scikit-learn se utiliza para dividir datos en conjuntos de entrenamiento y muestras de conjuntos de prueba, construir modelos de clasificación SVM y evaluación de modelos.

  • Plotly para visualización de datos

  • Pandas y Numpy para manipulación de datos

Importemos todas las bibliotecas:

fbc84aa719dd9d533e5344ea053899ed.png

Luego obtenemos los datos de la partida de ajedrez de Kaggle, que puede descargar en: https://www.kaggle.com/datasnaek/chess.

Una vez que los datos se guardan en su máquina, impórtelos usando el código a continuación. Tenga en cuenta que también derivamos algunas variables nuevas para nuestro uso en el proceso de modelado.

12f7aa2e49de4411659aac0731acf400.png

Ahora, creemos algunas funciones que podemos reutilizar al construir diferentes modelos y trazar los resultados.

La primera función dividirá los datos en conjuntos de entrenamiento y prueba, ajustará el modelo, predecirá los resultados en el conjunto de prueba y generará métricas de evaluación del rendimiento del modelo.

d86cc1516120088b3bdb41416cb49029.png

La siguiente función trazará un diagrama de dispersión 3D de Plotly utilizando los datos de prueba y la superficie de predicción del modelo.

a5b8d9c1bf39e530d4467df73f3f68c8.png


4.2 Construya un modelo utilizando los valores predeterminados de C y Gamma

Construyamos nuestro primer modelo SVM usando los campos rating_difference y turn como variables independientes (atributos/predictores), y la bandera white_win como objetivo.

Tenga en cuenta que hay un poco de trampa aquí, ya que la cantidad total de pasos solo se sabrá después de que termine el juego. Por lo tanto, si queremos generar predicciones del modelo antes de que comience el juego, el campo de turnos no estará disponible. Sin embargo, esto es solo para fines ilustrativos, por lo tanto, lo usaremos en los ejemplos a continuación.

El código es corto ya que usamos la función de ajuste definida anteriormente.

La función imprime las siguientes métricas de evaluación del modelo:

9b25e015e5d6a8ab5f2fccae843cd0d8.png

Podemos ver que el rendimiento del modelo en los datos de prueba es similar al rendimiento del modelo en los datos de entrenamiento, lo que indica que el modelo se generaliza bien con los hiperparámetros predeterminados.

Ahora, visualizamos las predicciones simplemente llamando a la función Plot_3D:

d52f8c55fc280e5645f642cdbba75487.png

Tenga en cuenta que los puntos negros en la parte superior indican una categoría real de 1 (las blancas ganaron) y los puntos inferiores indican una categoría real de 0 (las blancas no ganaron). Al mismo tiempo, la superficie representa la probabilidad de que el modelo produzca que las blancas ganen.

Aunque existe una variación local en la probabilidad, el límite de decisión se encuentra cerca de x=0 (es decir, diferencia de puntuación=0) porque aquí es donde la probabilidad cruza el límite p=0,5.

4.3 SVM modelo 2: Gamma=0.1

Ahora veamos qué sucede cuando establecemos un valor gamma relativamente alto.

921983e50df4852042c038979424cf22.png

Podemos ver que el aumento de gamma conduce a un mejor rendimiento del modelo en los datos de entrenamiento, pero a una disminución en el rendimiento de los datos de prueba. El siguiente diagrama nos ayuda a entender claramente por qué.

320220b0ff4a12c1917bc13044776714.png

En lugar de la superficie suave predicha antes, ahora tenemos una superficie muy "afilada". Para entender por qué este es el caso, debemos observar más de cerca las funciones del kernel.

Cuando elegimos una gamma más alta, le decimos a la función que los puntos que están más cerca son más importantes que los puntos que están más lejos. Como resultado, obtenemos estos "picos" porque las predicciones dependen en gran medida de los puntos individuales en los ejemplos de entrenamiento, en lugar de los puntos circundantes.

Por el contrario, reducir el valor gamma le dice a la función que considere la importancia no solo de los puntos individuales sino también de los puntos circundantes al hacer predicciones. Para verificar esto, veamos otro ejemplo con un valor gamma relativamente bajo.

4.4 SVM modelo 3-Gamma=0.000001

Volvamos a ejecutar estas funciones con las métricas de rendimiento del modelo SVM con Gamma=0.000001.

73e8a2120ce5d6660085b147e2296dfb.png

Como era de esperar, la reducción del valor gamma hizo que el modelo fuera más robusto y mejoró el rendimiento del modelo en los datos de prueba (precisión = 0,66). La siguiente figura ilustra cómo la superficie de predicción se vuelve más suave después de dar más influencia a otros puntos.

216e2b33faba38e1f4b38ce94ed9db64.png

Plano de predicción para un modelo de clasificación SVM con gamma=0.000001. Imágenes cortesía de los autores.


4.5 Ajuste del hiperparámetro C

Decidí no incluir un ejemplo usando un valor diferente de C en este artículo, ya que afecta la suavidad del plano predicho de manera similar, aunque por una razón diferente. Puede probarlo usted mismo pasando un valor como C=100 a la función de ajuste.

5. Conclusión

El algoritmo SVM es muy potente y flexible. Aunque solo he cubierto los aspectos básicos del uso de una de las funciones del núcleo disponibles, espero que esto le haya dado una idea del funcionamiento interno de las SVM y las RBF. Esto debería permitirle explorar todas las demás opciones por su cuenta.

Editor: Wang Jing

b5b1d2be725037cff0b839d9bb681761.png

Supongo que te gusta

Origin blog.csdn.net/tMb8Z9Vdm66wH68VX1/article/details/131886686
Recomendado
Clasificación