Una Máquina de Vectores de Soporte (SVM, Support Vector Machine) busca la frontera que separa dos clases dejando el mayor margen posible a ambos lados. No cualquier línea que separe: la que se aleja lo más posible de los ejemplos más difíciles.
El margen: separar con holgura
Imagina puntos de dos colores en un plano. Muchas rectas los separan, pero intuitivamente la mejor es la que pasa más lejos de los puntos de cada clase. Esa distancia se llama margen, y la SVM lo maximiza.
La frontera de decisión es un hiperplano definido por un vector de pesos y un sesgo :
Un punto se clasifica según el signo de . Maximizar el margen equivale a minimizar la norma de :
donde es la etiqueta de cada ejemplo.
Los vectores de soporte
Solo unos pocos puntos —los que quedan justo sobre el borde del margen— determinan dónde va la frontera. Esos son los vectores de soporte. Si movieras cualquier otro punto lejano, la frontera no cambiaría; si mueves un vector de soporte, sí. De ahí el nombre.
Margen blando: tolerar errores
Los datos reales rara vez se separan de forma perfecta. La SVM introduce variables de holgura que permiten algunas violaciones del margen, penalizadas por un parámetro :
- Un grande castiga mucho los errores: frontera ajustada, riesgo de sobreajuste.
- Un pequeño tolera más errores: frontera más suave, mejor generalización.
El truco del kernel
¿Y si las clases no se separan con una recta? El truco del kernel proyecta los datos a un espacio de mayor dimensión donde sí son separables, sin calcular esa proyección explícitamente. Basta con una función que mide similitud. El más popular es el RBF (gaussiano):
Esto permite fronteras curvas y complejas manteniendo la matemática del margen intacta.
En código
Con scikit-learn se elige el kernel y el parámetro directamente:
from sklearn.svm import SVC
# kernel="rbf" habilita fronteras no lineales; C regula la tolerancia a errores.
modelo = SVC(kernel="rbf", C=1.0, gamma="scale").fit(X_train, y_train)
modelo.predict(X_test)
print(modelo.support_vectors_.shape) # cuántos vectores de soporte se usaron
Conviene escalar las variables antes de entrenar una SVM (con StandardScaler), porque el margen depende de las distancias entre puntos.
Para llevar
La SVM separa clases maximizando el margen, apoyándose solo en los ejemplos más difíciles (los vectores de soporte). Con el truco del kernel maneja fronteras no lineales. Es potente en espacios de muchas dimensiones, aunque escala mal con conjuntos de datos enormes. En la próxima lección empezamos con otra familia, desde su unidad básica: los árboles de decisión.
