🧠 ¿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?
- Encuentra una línea (o plano, en más dimensiones) que divida los datos.
- Se asegura de que esa línea esté lo más alejada posible de los puntos de cada clase.
- Solo se fija en los puntos más cercanos a la línea. A esos se les llama vectores de soporte.
- 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.
Kernel | Qué hace |
---|---|
lineal | Usa una línea normal para separar |
polinómico | Usa 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
Aspecto | Valor |
---|---|
Tipo de modelo | Supervisado, clasificación y regresión |
Usa transformación | Sí, con kernels |
Escalado necesario | Sí |
Ideal para | Datos con separación clara entre clases |
Precisión | Muy alta si está bien ajustado |
Interpretabilidad | Media-baja |