Cómo implementar el modelo SVM usando Python
Primero explicaré mi comprensión de SVM de forma intuitiva, que no implicará fórmulas matemáticas, y luego daré el código Python.
SVM es un modelo de dos clasificaciones. Los datos procesados se pueden dividir en tres categorías:
Linealmente separable, maximizando el intervalo difícil y aprendiendo un clasificador lineal.
>Aproximadamente separables linealmente, aprenda clasificadores lineales maximizando los márgenes suaves
Linealmente inseparables, aprenda clasificadores no lineales maximizando las funciones del núcleo y los márgenes suaves
Clasificación lineal El clasificador corresponde a una línea recta en la plano; el clasificador no lineal corresponde a una curva en el plano.
Los intervalos duros corresponden a conjuntos de datos separables linealmente y pueden clasificar correctamente todas las muestras. Debido a esto, se ven muy afectados por muestras ruidosas y no se recomiendan.
El margen suave corresponde al conjunto de datos habitual (aproximadamente linealmente separable o linealmente inseparable), lo que permite clasificar erróneamente algunas muestras cercanas al hiperplano, mejorando así el rendimiento de generalización.
Como se muestra a continuación:
La línea continua se obtiene maximizando el intervalo duro, y la capacidad de predicción obviamente no es tan buena como la línea discontinua obtenida maximizando el intervalo suave.
Para conjuntos de datos linealmente inseparables, como se muestra a continuación:
Intuitivamente, sentimos que el clasificador lineal, es decir, la línea recta, no puede separar bien los puntos rojos y azules.
Pero puedes usar una curva similar a un círculo entre el punto rojo y el punto azul para separarlos, como se muestra a continuación:
Asumimos que esta curva amarilla es un círculo. la ecuación es x^2 y^2=1, entonces ¿qué hace la función kernel?
Asignamos x^2 a X e y^2 a Y, luego el hiperplano se convierte en X Y=1.
Entonces el problema linealmente inseparable del espacio original se convierte en el problema (aproximadamente) linealmente separable del nuevo espacio.
En este punto, el método de tratar problemas (aproximadamente) linealmente separables se puede utilizar para resolver el problema de clasificación de conjuntos de datos linealmente inseparables.
------------------------------------------- ----- --------------------------------------------- ----- ----------------------------------
Le he explicado a grandes rasgos SVM en el lenguaje más simple anterior. No se utilizan conocimientos matemáticos. Pero sin las matemáticas, no se puede apreciar la esencia de SVM. Por lo tanto, describiré las ideas matemáticas de SVM en un lenguaje lo más conciso posible. Si no ha visto el proceso de derivación de SVM, puede omitir el siguiente párrafo.
Para resolver problemas (aproximadamente) linealmente separables:
Utilizando el método del margen máximo se obtiene un problema de programación cuadrática convexa. Este tipo de problemas tiene una solución óptima (teóricamente puede ser). Llame directamente al paquete de cálculo de programación cuadrática para obtener la solución óptima)
Obtenemos el problema dual del problema de optimización convexo anterior, en primer lugar porque el problema dual es más fácil de resolver y, en segundo lugar, porque se introduce la función del núcleo. y extendido a problemas no lineales.
Resuelva el problema dual para obtener la solución del problema original y luego determine el hiperplano de separación y la función de decisión de clasificación. Dado que la función objetivo y la función de decisión de clasificación en el problema dual sólo involucran el producto interno entre instancias, es decir, lt xi, xjgt;. Introducimos el concepto de función del núcleo. Ampliado para resolver problemas linealmente inseparables:
Como en el ejemplo anterior, para dos instancias cualesquiera de conjuntos de datos linealmente inseparables: xi, xj. Cuando tomamos un mapeo específico f, f (xi) y f (xj) son linealmente separables en un espacio de alta dimensión. Usando el método anterior para resolver problemas (aproximadamente) linealmente separables, vemos la función objetivo y la decisión de clasificación. implica el producto interno lt; f(xi), f(xj)gt;. Dado que el cálculo del producto interno en un espacio de alta dimensión es muy complejo, podemos introducir la función central K(xi, xj)=lt f(xi), f(xj)gt;, por lo que el problema del producto interno se convierte en un valor de función; problema. Lo más interesante es que no necesitamos conocer el mapeo f en absoluto.
¡Maravilloso!
No voy a poner el proceso de derivación aquí, porque ya hay muchos materiales de aprendizaje muy buenos. Si estás interesado, puedes leer: CS229 Lecture notes
Finalmente. , El algoritmo SMO resuelve el problema SVM. Si está interesado, lea directamente el artículo del autor: Optimización mínima secuencial: un algoritmo rápido para entrenar máquinas de vectores de soporte
Le daré el código directamente: SMO SVM<. /p>
En conjuntos de datos linealmente separables Resultados de la ejecución:
Los vectores de soporte están marcados en la imagen, lo cual es perfecto. Todos los vectores de soporte están cerca del hiperplano.
Los resultados de ejecutar en un conjunto de datos linealmente inseparables (200 muestras):
La función del núcleo utiliza un núcleo gaussiano y toma sigma diferente
sigma=1 , hay 189 vectores de soporte, lo que equivale a utilizar todo el conjunto de datos para la clasificación.
Sigma = 10, hay 20 vectores de soporte y la curva límite puede adaptarse mejor a las características del conjunto de datos.
Podemos ver que cuando hay muy pocos vectores de apoyo, se pueden obtener límites de decisión deficientes. Si hay demasiados vectores de soporte, equivale a utilizar todo el conjunto de datos para la clasificación cada vez, similar a KNN.