← Volver a Aprende con CDIA

Clasificación: de los modelos a su evaluaciónMáquinas de Vectores de Soporte (SVM)

IntermedioMachine Learning8 min de lectura

Máquinas de Vectores de Soporte (SVM)

El modelo que separa clases maximizando el margen, apoyándose solo en los ejemplos más difíciles y llegando a fronteras no lineales con el truco del kernel.

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.