Support Vector Machine (SVM)
Una máquina de vectores de soporte (SVM) separa las clases con el hiperplano de margen más amplio y usa kernels para crear límites curvos. Descubre cómo funciona, cómo ajustarla y consulta el código.
Una máquina de vectores de soporte (SVM) es un algoritmo de aprendizaje supervisado que clasifica los datos buscando el hiperplano que separa dos clases con el mayor margen posible, es decir, la distancia entre el límite y los puntos de entrenamiento más próximos de cada clase. Esos puntos más cercanos, los vectores de soporte, son los únicos ejemplos de entrenamiento que determinan el límite. Las funciones kernel permiten a las SVM aprender límites curvos, y hay variantes que admiten regresión y detección de valores atípicos. Vladimir Vapnik y sus colegas desarrollaron el método en AT&T Bell Labs; la versión con kernel apareció en 1992 y la formulación de margen blando que se utiliza hoy se publicó en Cortes y Vapnik en 1995. Antes del aprendizaje profundo, las SVM estaban entre los clasificadores más precisos para texto, imágenes y datos biológicos, y siguen ofreciendo un buen rendimiento con conjuntos de datos pequeños y medianos con muchas características.
Cómo funcionan las SVM#
Una SVM lineal predice la clase a partir del signo de w·x + b, por lo que su límite de decisión es el hiperplano w·x + b = 0 y, si se escalan los pesos para que los puntos más cercanos cumplan |w·x + b| = 1, el margen tiene una anchura de 2/‖w‖. El entrenamiento maximiza el margen minimizando ‖w‖² y exigiendo que todos los puntos de entrenamiento queden en el lado correcto. Las clases reales se solapan, así que la SVM de margen blando permite que algunos puntos crucen el margen con un coste determinado por el parámetro de regularización C. Su pérdida hinge no penaliza los puntos clasificados correctamente más allá del margen y aplica al resto una penalización que aumenta linealmente con la infracción. Un valor pequeño de C tolera más infracciones y proporciona un margen más ancho y suave; un valor grande de C se ajusta más a los datos de entrenamiento, con mayor riesgo de sobreajuste. En el modelo entrenado, solo los puntos situados en el margen o en el lado incorrecto tienen un peso distinto de cero; son los vectores de soporte, y mover cualquier otro punto sin cruzar el margen no cambia el límite.
El truco del kernel#
Cuando ningún hiperplano separa las clases, proyectar los datos en más dimensiones puede hacer que sean separables: dos anillos concéntricos en 2D se pueden separar con un plano una vez que una tercera característica, x₁² + x₂², mide la distancia de cada punto al centro. En su forma dual, el entrenamiento y la predicción de las SVM utilizan los datos únicamente mediante productos escalares entre pares de puntos, así que una función kernel k(x, x′) puede devolver directamente el producto escalar en el espacio proyectado, sin calcular nunca las coordenadas proyectadas. Este es el truco del kernel. Los kernels más habituales son el lineal, el polinómico y la función de base radial (RBF), exp(−γ‖x − x′‖²), donde γ determina hasta dónde llega la influencia de cada vector de soporte. Este ejemplo ajusta SVC de scikit-learn con un kernel lineal y otro RBF sobre dos anillos concéntricos:
from sklearn.datasets import make_circles
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
# Two concentric rings: no straight line separates the classes
X, y = make_circles(n_samples=500, factor=0.4, noise=0.1, random_state=0)
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)
for kernel in ("linear", "rbf"):
clf = SVC(kernel=kernel, C=1.0)
clf.fit(X_train, y_train)
print(f"{kernel}: test accuracy {clf.score(X_test, y_test):.2f}, support vectors {clf.n_support_.sum()}")El kernel lineal obtiene una puntuación de 0,43 en los puntos reservados, peor que adivinar, y conserva 360 de los 375 puntos de entrenamiento como vectores de soporte. El kernel RBF separa perfectamente los anillos (1,00) con solo 42 vectores de soporte.
Elegir un kernel y los hiperparámetros#
Las distancias y los productos escalares dependen de la escala de las características, por lo que primero se estandarizan las entradas de la SVM. La guía práctica de los autores de LIBSVM, la biblioteca que utiliza SVC de scikit-learn, recomienda escalar las características, empezar con el kernel RBF y elegir C y γ mediante búsqueda en rejilla con validación cruzada. Cuando hay muchas más características que muestras, como ocurre con el texto, un kernel lineal ofrece un rendimiento similar y se entrena mucho más rápido. El tiempo de entrenamiento de las SVM con kernel crece, como mínimo, de forma cuadrática con el número de muestras, así que, cuando se superan las decenas de miles de muestras, las SVM lineales o las características de kernel aproximadas sustituyen al modelo de kernel exacto.
Las SVM en visión artificial#
La visión artificial clásica combinaba características diseñadas manualmente con SVM lineales. El detector de peatones de Dalal y Triggs de 2005 puntuaba histogramas de gradientes orientados (HOG) con una SVM lineal, y el detector de objetos R-CNN de 2014 clasificaba las características CNN de cada región candidata con una SVM lineal por clase, hasta que Fast R-CNN las sustituyó en 2015 por una capa softmax entrenada junto con la red. Los detectores modernos aprenden las características y el clasificador conjuntamente, y las SVM siguen utilizándose como clasificadores rápidos sobre características fijas. Una SVM lineal entrenada con los vectores que devuelve YOLO26 desde model.embed(), uno embedding por imagen, es una sonda lineal que añade una nueva categoría de imagen sin volver a entrenar la red.
Aplicaciones#
- Clasificación de texto: Los vectores de recuento de palabras tienen decenas de miles de dimensiones dispersas, donde las SVM lineales separan con precisión temas, spam y sentimientos; una ventaja que Thorsten Joachims demostró para la categorización de texto en 1998.
- Bioinformática: Los estudios de expresión génica clasifican tumores a partir de miles de genes medidos y solo decenas o cientos de pacientes; es un contexto en el que el margen limita el sobreajuste. Los kernels de cadenas comparan directamente secuencias de proteínas.
- Detección de anomalías: Una SVM de una clase aprende un límite únicamente alrededor de los datos normales y señala los puntos que quedan fuera, por lo que resulta adecuada para detectar fraudes y supervisar máquinas cuando los fallos son demasiado poco frecuentes para etiquetarlos.
- Regresión: La regresión de vectores de soporte ajusta una función dentro de un tubo de anchura ε, ignora los errores menores que ε y solo conserva como vectores de soporte los puntos situados dentro o fuera del tubo.
SVM frente a algoritmos relacionados#
- K vecinos más cercanos (KNN): Almacena todo el conjunto de entrenamiento y compara cada punto nuevo con sus vecinos al predecir; una SVM solo conserva sus vectores de soporte.
- Árboles de decisión y bosques aleatorios: Dividen los datos usando una característica cada vez, no necesitan escalar las características y admiten columnas numéricas y categóricas combinadas, mientras que las SVM necesitan entradas numéricas y escaladas.
- Redes neuronales: Aprenden la transformación de características a partir de los datos en vez de fijarla mediante un kernel, lo que les permite escalar a millones de imágenes, donde las SVM con kernel se vuelven demasiado lentas.
- Regresión logística: También aprende un límite lineal, pero minimiza la pérdida logarítmica para todos los puntos de entrenamiento y genera probabilidades. Una SVM genera distancias con signo respecto al límite, y SVC de scikit-learn solo produce probabilidades con
probability=True, que aplica el escalado de Platt mediante una validación cruzada interna de 5 particiones.










