Las Máquinas de Soporte Vectorial (SVM, por sus siglas en inglés) son un conjunto de algoritmos supervisados utilizados para clasificación y regresión. Son especialmente conocidas por su capacidad para manejar problemas de clasificación binaria y su eficacia en espacios de alta dimensión.
Conceptos Clave
- Hiperplano Separador
El objetivo principal de una SVM es encontrar el hiperplano que mejor separa las clases en el espacio de características. En un problema de clasificación binaria, este hiperplano es una línea en 2D, un plano en 3D, y un hiperplano en dimensiones superiores.
- Margen
El margen es la distancia entre el hiperplano separador y los puntos de datos más cercanos de cada clase. SVM busca maximizar este margen para mejorar la generalización del modelo.
- Vectores de Soporte
Los vectores de soporte son los puntos de datos que están más cerca del hiperplano y que definen su posición. Estos puntos son cruciales para la construcción del hiperplano óptimo.
- Función de Kernel
Las SVM pueden utilizar funciones de kernel para transformar los datos en un espacio de mayor dimensión donde un hiperplano puede separar las clases más fácilmente. Los kernels comunes incluyen:
- Lineal
- Polinómico
- Radial Basis Function (RBF)
- Sigmoide
Ejemplo Práctico
Vamos a implementar una SVM para un problema de clasificación binaria utilizando Python y la biblioteca scikit-learn
.
Paso 1: Importar las Bibliotecas Necesarias
import numpy as np import matplotlib.pyplot as plt from sklearn import datasets from sklearn.model_selection import train_test_split from sklearn.svm import SVC from sklearn.metrics import accuracy_score, confusion_matrix, classification_report
Paso 2: Cargar y Preparar los Datos
Usaremos el conjunto de datos Iris
, que es un clásico en problemas de clasificación.
# Cargar el conjunto de datos Iris iris = datasets.load_iris() X = iris.data[:, :2] # Usamos solo las dos primeras características para visualización y = iris.target # Filtramos solo dos clases para simplificar a un problema binario X = X[y != 2] y = y[y != 2] # Dividir los datos en conjuntos de entrenamiento y prueba X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
Paso 3: Entrenar el Modelo SVM
# Crear el modelo SVM con un kernel lineal model = SVC(kernel='linear') # Entrenar el modelo model.fit(X_train, y_train)
Paso 4: Evaluar el Modelo
# Realizar predicciones y_pred = model.predict(X_test) # Evaluar el rendimiento del modelo accuracy = accuracy_score(y_test, y_pred) conf_matrix = confusion_matrix(y_test, y_pred) class_report = classification_report(y_test, y_pred) print(f"Accuracy: {accuracy}") print("Confusion Matrix:") print(conf_matrix) print("Classification Report:") print(class_report)
Paso 5: Visualizar el Hiperplano
# Función para visualizar el hiperplano def plot_decision_boundary(X, y, model): h = .02 # Paso en la malla x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1 y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1 xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h)) Z = model.predict(np.c_[xx.ravel(), yy.ravel()]) Z = Z.reshape(xx.shape) plt.contourf(xx, yy, Z, alpha=0.8) plt.scatter(X[:, 0], X[:, 1], c=y, edgecolors='k', marker='o') plt.xlabel('Feature 1') plt.ylabel('Feature 2') plt.title('SVM Decision Boundary') plt.show() # Visualizar el hiperplano plot_decision_boundary(X_test, y_test, model)
Ejercicio Práctico
Ejercicio 1: Implementar una SVM con Kernel RBF
- Modifica el código anterior para utilizar un kernel RBF en lugar de un kernel lineal.
- Evalúa el rendimiento del modelo con el nuevo kernel.
- Visualiza el hiperplano de decisión.
Solución
# Crear el modelo SVM con un kernel RBF model_rbf = SVC(kernel='rbf') # Entrenar el modelo model_rbf.fit(X_train, y_train) # Realizar predicciones y_pred_rbf = model_rbf.predict(X_test) # Evaluar el rendimiento del modelo accuracy_rbf = accuracy_score(y_test, y_pred_rbf) conf_matrix_rbf = confusion_matrix(y_test, y_pred_rbf) class_report_rbf = classification_report(y_test, y_pred_rbf) print(f"Accuracy with RBF Kernel: {accuracy_rbf}") print("Confusion Matrix with RBF Kernel:") print(conf_matrix_rbf) print("Classification Report with RBF Kernel:") print(class_report_rbf) # Visualizar el hiperplano plot_decision_boundary(X_test, y_test, model_rbf)
Conclusión
En esta sección, hemos aprendido sobre las Máquinas de Soporte Vectorial (SVM), sus conceptos clave y cómo implementarlas utilizando Python y scikit-learn
. Las SVM son herramientas poderosas para problemas de clasificación y regresión, especialmente en espacios de alta dimensión. Hemos visto cómo cambiar el kernel puede afectar el rendimiento del modelo y cómo visualizar el hiperplano de decisión.
En el siguiente módulo, exploraremos los algoritmos de Machine Learning No Supervisado, comenzando con el clustering K-means.
Curso de Machine Learning
Módulo 1: Introducción al Machine Learning
- ¿Qué es el Machine Learning?
- Historia y evolución del Machine Learning
- Tipos de Machine Learning
- Aplicaciones del Machine Learning
Módulo 2: Fundamentos de Estadística y Probabilidad
- Conceptos básicos de estadística
- Distribuciones de probabilidad
- Inferencia estadística
- Teorema de Bayes
Módulo 3: Preprocesamiento de Datos
Módulo 4: Algoritmos de Machine Learning Supervisado
- Regresión lineal
- Regresión logística
- Árboles de decisión
- Máquinas de soporte vectorial (SVM)
- K-Vecinos más cercanos (K-NN)
- Redes neuronales
Módulo 5: Algoritmos de Machine Learning No Supervisado
- Clustering: K-means
- Clustering jerárquico
- Análisis de componentes principales (PCA)
- Análisis de agrupamiento DBSCAN
Módulo 6: Evaluación y Validación de Modelos
Módulo 7: Técnicas Avanzadas y Optimización
- Ensemble Learning
- Gradient Boosting
- Redes neuronales profundas (Deep Learning)
- Optimización de hiperparámetros
Módulo 8: Implementación y Despliegue de Modelos
- Frameworks y bibliotecas populares
- Implementación de modelos en producción
- Mantenimiento y monitoreo de modelos
- Consideraciones éticas y de privacidad
Módulo 9: Proyectos Prácticos
- Proyecto 1: Predicción de precios de viviendas
- Proyecto 2: Clasificación de imágenes
- Proyecto 3: Análisis de sentimientos en redes sociales
- Proyecto 4: Detección de fraudes