13 · Clasificación con SVM: margen duro y blando
Encuentra la brecha más amplia posible entre clases, penaliza violaciones con variables de holgura y descubre por qué solo los vectores de soporte importan.
SVM encuentra el MARGEN más amplio posible entre clases — y los puntos en la frontera (vectores de soporte) son los únicos que importan.
Sin esto:
Sin SVM pierdes el clasificador geométrico más elegante y la puerta de entrada a los métodos kernel.
La regresión logística y SVM suelen llamarse "primas geométricas": ambas encuentran una frontera lineal que separa dos clases, y ambas pueden regularizarse. Pero sus filosofías son muy diferentes.
La regresión logística maximiza la verosimilitud de las etiquetas de entrenamiento — es indiferente a dónde se sitúa la frontera siempre que las probabilidades sean correctas.
SVM está obsesionada con la geometría. Encuentra el hiperplano que maximiza el margen — la distancia perpendicular entre la frontera y los puntos de entrenamiento más cercanos.
El hiperplano separador
Un clasificador lineal define un hiperplano:
wᵀx + b = 0
Los puntos de un lado satisfacen wᵀx + b > 0 (clase +1); los del otro lado satisfacen wᵀx + b < 0 (clase −1).
El margen
Después de normalizar w de modo que los puntos de entrenamiento más cercanos satisfagan |wᵀx + b| = 1, las dos "fronteras del margen" paralelas son:
wᵀx + b = +1 (puntos positivos más cercanos) wᵀx + b = −1 (puntos negativos más cercanos)
La distancia perpendicular entre estos dos planos es 2/||w||. Maximizar el margen equivale a minimizar ½||w||² — un programa cuadrático convexo con solución única.
Margen duro — raramente realista
Si los datos son perfectamente separables de forma lineal, el SVM de margen duro encuentra la frontera que mantiene TODOS los puntos estrictamente fuera de la zona del margen. En la práctica, los datos reales casi siempre tienen solapamiento o valores atípicos.
Margen blando — el SVM práctico
Se introducen variables de holgura ξᵢ ≥ 0, una por punto de entrenamiento. Se permite que un punto viole el margen en ξᵢ unidades. El objetivo se convierte en:
Minimizar ½||w||² + C·Σξᵢ
sujeto a yᵢ(wᵀxᵢ + b) ≥ 1 − ξᵢ y ξᵢ ≥ 0.
El hiperparámetro C controla el compromiso:
- C grande → margen pequeño, baja tolerancia a clasificaciones erróneas (bajo sesgo, alta varianza)
- C pequeño → margen grande, más tolerancia (alto sesgo, menor varianza)
La formulación dual y los vectores de soporte
Mediante dualidad lagrangiana, la solución depende solo de los puntos de entrenamiento con variable dual αᵢ no nula. Estos son exactamente los puntos EN el margen (ξᵢ = 0) o que lo VIOLAN (ξᵢ > 0). Se llaman vectores de soporte porque "soportan" (definen) la frontera de decisión.
Python (in browser)
La línea amarilla sólida es la frontera de decisión (wᵀx + b = 0). Las líneas grises punteadas son las fronteras del margen (wᵀx + b = ±1). Los puntos circulados son los vectores de soporte — las únicas muestras de entrenamiento que determinan la frontera.
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
Python (in browser)
Izquierda: C = 0.1 — el modelo tolera muchas violaciones para mantener un margen amplio y robusto. Derecha: C = 100 — el modelo lucha por clasificar correctamente cada punto, reduciendo el margen. Un margen ajustado sobre datos solapados lleva a una mala generalización.
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
Python (in browser)
`model.support_vectors_` contiene los valores de características reales de los vectores de soporte. `model.support_` contiene sus índices originales en X. `model.n_support_` es el conteo por clase. Solo estos puntos determinan w y b — el resto de los datos de entrenamiento es irrelevante una vez ajustado el modelo.
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
El objetivo de SVM es un programa cuadrático — garantizadamente convexo de forma global. El término C·Σξᵢ es la pérdida hinge disfrazada. Nota que la forma dual solo usa productos punto xᵢᵀxⱼ — reemplazarlos con una función kernel K(xᵢ, xⱼ) da SVMs no lineales sin nunca calcular el mapa de características de alta dimensión.
Los 'vectores de soporte' en un SVM son:
- El margen = 2/||w||; maximizar el margen equivale a minimizar ½||w||² — un programa cuadrático convexo único.
- SVC de margen blando introduce variables de holgura ξᵢ; C controla la penalización — C alto = margen ajustado, C bajo = margen amplio.
- Solo los vectores de soporte (αᵢ > 0) determinan la frontera de decisión — todos los demás puntos de entrenamiento son irrelevantes después del ajuste.
- No uses SVC estándar con más de ~50k muestras — escala O(n²) a O(n³). Usa LinearSVC para problemas lineales grandes.
Clasificación de texto con características dispersas de alta dimensión (SVM era el estándar de oro antes del deep learning). Detección de anomalías mediante SVM de una clase. Los ejemplos y tutoriales de sklearn todavía presentan SVM ampliamente como la segunda línea base más común después de la regresión logística.
Si lo quitas: Te perderías el puente conceptual de los modelos lineales a los métodos kernel — y el clasificador más eficiente en datos para problemas tabulares pequeños/medianos.