SVM (Máquinas de Vectores de Soporte)


🧠 ¿Qué es una SVM?

Una Máquina de Vectores de Soporte (SVM) es un algoritmo de clasificación (y también regresión) que encuentra la mejor frontera posible entre dos clases.

Imagina que tienes dos grupos de puntos (rojos y azules), y necesitas trazar una línea que los separe de la forma más limpia posible. SVM no solo traza cualquier línea, sino la línea que los separa con el mayor margen posible.

Por eso se dice que SVM maximiza el margen.


📐 ¿Cómo funciona?

  1. Encuentra una línea (o plano, en más dimensiones) que divida los datos.
  2. Se asegura de que esa línea esté lo más alejada posible de los puntos de cada clase.
  3. Solo se fija en los puntos más cercanos a la línea. A esos se les llama vectores de soporte.
  4. Si los datos no se pueden separar con una línea recta, SVM los transforma con una función llamada kernel para hacerlos separables.

🔁 ¿Qué es un «kernel»?

Es como una herramienta mágica que transforma tus datos.

KernelQué hace
linealUsa una línea normal para separar
polinómicoUsa curvas tipo parábola
RBF (gaussiano)Muy flexible, separa cosas muy mezcladas

Si una línea recta no alcanza, el kernel lo arregla 😉


📈 ¿Qué hace bien una SVM?

✅ Excelente en clasificación binaria
✅ Muy precisa cuando hay una clara separación entre clases
✅ Funciona bien en espacios de alta dimensión
✅ Robusta ante overfitting si se ajustan bien los parámetros


🚨 ¿Qué no le gusta?

❌ Es más lenta con datasets muy grandes
❌ Requiere escalar los datos (como KNN)
❌ No es tan interpretable como un árbol de decisión
❌ Difícil de ajustar si hay mucho ruido o muchas clases


🧑‍💻 Ejemplo en Python

import pandas as pd
from sklearn.svm import SVC
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import accuracy_score

# Dataset de ejemplo
data = pd.DataFrame({
    'edad': [25, 45, 35, 33, 52, 23, 41, 38],
    'ingresos': [50000, 80000, 60000, 58000, 120000, 45000, 70000, 64000],
    'compra': [0, 1, 0, 0, 1, 0, 1, 1]
})

X = data[['edad', 'ingresos']]
y = data['compra']

# Escalar los datos (muy importante para SVM)
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

# Dividir datos
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.25, random_state=42)

# Crear y entrenar modelo SVM
modelo_svm = SVC(kernel='linear')  # también puedes probar 'rbf', 'poly'
modelo_svm.fit(X_train, y_train)

# Predecir
y_pred = modelo_svm.predict(X_test)

# Evaluar
print("Precisión:", accuracy_score(y_test, y_pred))

📊 ¿Cómo ajustar una SVM?

Puedes jugar con:

  • C → controla el margen. Si es muy bajo, permite errores. Si es alto, busca separaciones más estrictas.
  • kernel → define cómo transforma los datos.
  • gamma (cuando usas rbf) → controla cuánto influye un punto en la curva.

🧩 En resumen

AspectoValor
Tipo de modeloSupervisado, clasificación y regresión
Usa transformaciónSí, con kernels
Escalado necesario
Ideal paraDatos con separación clara entre clases
PrecisiónMuy alta si está bien ajustado
InterpretabilidadMedia-baja

Comentarios

Aún no hay comentarios. ¿Por qué no comienzas el debate?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *