Margen suave, C y la pérdida hinge
En simple: lee esto primero
En la vida real las clases se mezclan, así que permitimos que algunos puntos se metan en el pasillo… pagando una multa.
Es como un estacionamiento: puedes pisar la línea, pero te ponen una multa proporcional a cuánto te pasaste. C decide qué tan cara es la multa.
- C grande: multas caras → casi no se permiten errores → pasillo estrecho (riesgo de memorizar).
- C chico: multas baratas → pasillo ancho, tolera errores (modelo más simple).
- La pérdida hinge: 0 si estás bien clasificado y fuera del pasillo; si no, crece en línea recta.
- holgura (ξ)
- cuánto se metió un punto en el pasillo o en el lado equivocado.
- C
- la perilla que dice cuánto castigar los errores.
- pérdida hinge
- la «multa» del SVM: cero si todo bien, y crece a medida que te equivocas.
Más abajo viene la versión completa, con fórmulas. Si una palabra aparece subrayada con puntos, pasa el mouse (o tócala) para ver qué significa.
Los datos reales no son separables
Sección titulada «Los datos reales no son separables»Las clases se traslapan, hay etiquetas mal puestas, un punto raro se mete en la otra clase. Entonces ningún cumple para todos: el margen duro es infactible. Peor: aun cuando separar es posible, insistir puede reducir el margen a una astilla por un solo outlier: overfitting con otro nombre.
Arreglo: dejar de exigir y empezar a cobrar. Un punto puede romper su margen pero paga en proporción a cuánto invade.
Holguras: una exención pagada por punto
Sección titulada «Holguras: una exención pagada por punto»| Situación | |
|---|---|
| cumple la regla original: fuera de la banda | |
| entró a la banda pero sigue del lado correcto | |
| cruzó la frontera: mal clasificado |
Sin precio, el solver pondría todos los enormes y . Así que se suman al objetivo:
C: el tipo de cambio entre ancho y violaciones
Sección titulada «C: el tipo de cambio entre ancho y violaciones»- C grande: invadir es caro ⇒ el optimizador retuerce la frontera para mantener ⇒ margen angosto, pocos vectores de soporte, alta varianza. Con se recupera el margen duro.
- C pequeño: invadir es barato ⇒ compra una banda ancha y suave, tolera violaciones ⇒ muchos vectores de soporte, alto sesgo.
C es el dial de regularización del SVM, el mismo trade-off sesgo–varianza que λ en ridge, pero invertido: C grande = regularización débil (). En la slide: C = 0.05 → margen 2.19, 38 SVs; C = 1 → 0.95, 17 SVs; C = 100 → 0.55, 12 SVs.
El dual con margen suave: un solo cambio
Sección titulada «El dual con margen suave: un solo cambio»Repitiendo la derivación con los (y multiplicadores para ), agrega una sola restricción nueva, :
Todo lo demás igual: mismo objetivo, misma restricción de balance, solo productos internos. C es un tope a cuánto puede empujar un punto: ningún outlier, por extremo que sea, ejerce más de C unidades de presión. Eso hace robusto al margen suave.
KKT clasifica cada punto en tres casos
Sección titulada «KKT clasifica cada punto en tres casos»| Condición | Significado | |
|---|---|---|
| , | sobre o fuera del margen: espectador | |
| , | vector de soporte libre, justo sobre la recta | |
| , | dentro de la banda o del lado equivocado: empuja al máximo |
Solo el caso del medio da : en un vector de soporte libre. Si no hay ninguno, queda en un intervalo y los solvers toman su punto medio. (Ahora los vectores de soporte incluyen todo punto con , no solo los que tocan el margen.)
Eliminar ξ: aparece la hinge
Sección titulada «Eliminar ξ: aparece la hinge»Con fijo, sea . La holgura debe cumplir y , y cuesta , así que el optimizador toma la mínima legal: . Sustituyendo:
El SVM no es una especie exótica: es un modelo lineal entrenado con pérdida + penalización, la receta de las sesiones 03–04, donde la pérdida resulta ser la hinge. Los tres casos de holgura son tres tramos de una misma curva: a la derecha de paga 0; entre 0 y 1 paga pero está bien; a la izquierda de 0 está mal. El costo sube linealmente.
Hinge frente a las pérdidas conocidas
Sección titulada «Hinge frente a las pérdidas conocidas»- 0/1: lo que de verdad nos importa, pero es un escalón (gradiente plano con un salto): imposible de optimizar.
- Hinge: convexa y exactamente 0 una vez que : los puntos correctos con holgura se ignoran.
- Logística: convexa, pero nunca llega a 0: todo punto sigue tirando de la frontera para siempre.
- Cuadrática: vuelve a subir para : castiga por ser demasiado correcto. No sirve para clasificar.
La zona plana de la hinge es la historia de los vectores de soporte vista como pérdida: un punto con pérdida 0 y gradiente 0 no puede influir en el ajuste.
| Vista geométrica | Vista de pérdida |
|---|---|
| maximizar la banda vacía | minimizar hinge + penalización L2 |
| restricciones y multiplicadores | sin restricciones |
| los vectores de soporte sostienen la frontera | puntos con pérdida 0 tienen gradiente 0 |
| lleva al dual y a los kernels | lleva a SGD sobre datos enormes |
En la práctica
Sección titulada «En la práctica»- Estandariza las features: mezcla todas, así que una columna en millones domina el margen en silencio. No es opcional (y el escalador se ajusta solo con los folds de entrenamiento).
- Empieza lineal. Si funciona bien, para: más rápido e interpretable.
- Si no, RBF y grilla log de C y γ juntos con validación cruzada.
- Inspecciona los vectores de soporte: si casi todos lo son, C es muy chico (o γ muy grande).
Lo que el SVM simple no da:
- Probabilidades: la salida es un score con signo, no . Las librerías ajustan una logística a los scores (Platt scaling), con CV extra, y puede contradecir el signo del score.
- Más de dos clases: es binario. One-vs-rest ( clasificadores) u one-vs-one (, lo que hace
sklearn.svm.SVC) + votación. - Entrenamiento barato en datos enormes: kernel SVM cuesta – y la matriz . Más allá de puntos, SVM lineal con SGD/hinge.
Ejercicio
Sección titulada «Ejercicio», , . Puntos: , ; , ; , . Calcula , y el objetivo.
Ver solución
- : , ⇒ (fuera de la banda).
- : , ⇒ (mal clasificado).
- : , ⇒ (mal clasificado, lejos).
Objetivo .
Autoevaluación
0/6 correctas · 0 respondidasEn código
Sección titulada «En código»from sklearn.pipeline import make_pipelinefrom sklearn.preprocessing import StandardScalerfrom sklearn.svm import SVC, LinearSVCfrom sklearn.model_selection import GridSearchCVimport numpy as np
pipe = make_pipeline(StandardScaler(), SVC(kernel='linear'))grid = GridSearchCV(pipe, {'svc__C': np.logspace(-2, 3, 11)}, cv=5).fit(X_tr, y_tr)svm = grid.best_estimator_[-1]print(grid.best_params_, 'nº de SV por clase:', svm.n_support_)
big = make_pipeline(StandardScaler(), LinearSVC(C=1.0)) # hinge + L2, escala a n grandeproba = make_pipeline(StandardScaler(), SVC(probability=True)) # Platt scaling (CV interna)Para profundizar
Sección titulada «Para profundizar»Fuente ·ML_Course_SVM.pdf (slides 50–75) · ML_Course/session-06a-margin-and-soft-margin.ipynb · BANCO_DE_PREGUNTAS_ML_PART_1.pdf