Saltar al contenido
Introducción a Scikit-learn

Aprendizaje supervisado: Máquinas de vectores de soporte (SVM)

Introducción

Las máquinas de vectores de soporte (SVM, por sus siglas en inglés) son un algoritmo de aprendizaje supervisado utilizado en problemas de clasificación y regresión. El objetivo principal de SVM es crear una línea o hiperplano que separe los datos en diferentes clases de manera óptima. Es decir, SVM busca encontrar la mejor separación posible entre dos clases con el fin de clasificar futuros datos en una de las clases. En SVM, se utilizan vectores de soporte, que son los puntos más cercanos a la línea de separación entre las dos clases. Estos vectores se utilizan para ajustar la línea o hiperplano de manera que maximice la distancia entre las clases, lo que se conoce como la margen. SVM también puede utilizar una función kernel para transformar los datos en un espacio dimensional más alto, lo que puede ayudar a separar los datos de manera más clara. Las SVM son populares en el mundo de la ciencia de datos debido a su capacidad para manejar datos de alta dimensionalidad y su flexibilidad para ajustarse a diferentes problemas de clasificación y regresión. Sin embargo, el proceso de ajuste y selección de parámetros puede ser más complicado que en otros algoritmos de aprendizaje supervisado.

Resumen

El aprendizaje supervisado en Machine Learning se basa en entrenar un modelo a partir de un conjunto de datos etiquetados, es decir, un conjunto de datos para los cuales ya se conoce la respuesta correcta. El objetivo es que el modelo pueda predecir la respuesta correcta para nuevos datos. Las máquinas de vectores de soporte (SVM, por sus siglas en inglés) son un algoritmo de clasificación supervisada popular en Machine Learning. SVM encuentra un hiperplano en un espacio de alta dimensión que separa las clases de datos. Un hiperplano es una línea que separa dos clases de puntos de datos. En dos dimensiones, un hiperplano es simplemente una línea recta que divide los puntos de datos. En tres dimensiones, un hiperplano es un plano que divide los puntos de datos. En un espacio de varias dimensiones, un hiperplano es una superficie que separa las clases de datos. El objetivo de SVM es encontrar el hiperplano que maximiza la separación entre las clases de datos. Esto se llama el margen máximo. El margen es la distancia entre el hiperplano y los puntos de datos más cercanos de cada clase. SVM busca el hiperplano que maximice este margen, lo que significa que el modelo es menos propenso a sobreajustar los datos. SVM también puede manejar muy bien datos no lineales, utilizando una técnica llamada "kernel trick". El kernel trick es cuando se transforma el espacio de las características de los datos en un espacio de mayor dimensión, donde se puede encontrar un hiperplano que separa las clases de datos. En resumen, SVM es una técnica de aprendizaje supervisado que busca encontrar el hiperplano que maximiza el margen entre dos clases de datos. SVM también puede manejar datos no lineales utilizando el kernel trick.

Aplicación teórica

Fundamentos Matemáticos de las Máquinas de Vectores de Soporte (SVM)

Las Máquinas de Vectores de Soporte (SVM, por sus siglas en inglés) son una poderosa técnica de aprendizaje automático utilizada principalmente para clasificación y, en menor medida, para regresión. Su objetivo principal es encontrar un hiperplano que separe los datos de diferentes clases con el mayor margen posible. Aquí se explican los fundamentos matemáticos de las SVM, centrándose en los conceptos esenciales que subyacen a este método.

1. Problema de Clasificación Lineal

Para entender las SVM, consideremos un problema de clasificación binaria donde queremos separar dos clases de datos, \( \mathcal{C}_1 \) y \( \mathcal{C}_2 \), utilizando un hiperplano en un espacio \( \mathbb{R}^n \).

a. Hiperplano y Margen

Un hiperplano en un espacio \( \mathbb{R}^n \) se define como el conjunto de puntos que satisface la ecuación:

\[
\mathbf{w}^T \mathbf{x} + b = 0
\]

Donde:
- \( \mathbf{w} \) es el vector de pesos (normal al hiperplano).
- \( \mathbf{x} \) es el vector de características de una muestra.
- \( b \) es el sesgo (intersección del hiperplano con el eje).

El margen es la distancia entre el hiperplano y el punto de datos más cercano de cada clase. La SVM busca el hiperplano que maximiza este margen.

b. Maximización del Margen

Para maximizar el margen, minimizamos la función de pérdida que es inversamente proporcional al margen. Dado un conjunto de datos \( \{(\mathbf{x}_i, y_i)\}_{i=1}^N \), donde \( y_i \in \{-1, +1\} \) es la etiqueta de clase, la función objetivo para maximizar el margen es:

\[
\text{Maximizar } \frac{2}{\|\mathbf{w}\|^2}
\]

sujeto a las restricciones:

\[
y_i (\mathbf{w}^T \mathbf{x}_i + b) \geq 1 \quad \text{para todo } i
\]

2. Formulación Matemática y Optimización

a. Problema Primal

El problema de optimización para encontrar el hiperplano óptimo puede ser formulado como un problema de programación cuadrática. La función objetivo es minimizar la función de costo que está relacionada con la magnitud del vector de pesos \( \mathbf{w} \), mientras que se satisfacen las restricciones de margen:

\[
\text{Minimizar } \frac{1}{2} \|\mathbf{w}\|^2
\]

sujeto a:

\[
y_i (\mathbf{w}^T \mathbf{x}_i + b) \geq 1 \quad \text{para todo } i
\]

b. Problema Dual

El problema primal se convierte en un problema dual usando la técnica de Lagrange. La función Lagrangiana es:

\[
L(\mathbf{w}, b, \alpha) = \frac{1}{2} \|\mathbf{w}\|^2 - \sum_{i=1}^N \alpha_i \left[ y_i (\mathbf{w}^T \mathbf{x}_i + b) - 1 \right]
\]

Donde \( \alpha_i \) son los multiplicadores de Lagrange. El objetivo es maximizar la función Lagrangiana respecto a \( \alpha_i \) y minimizarla respecto a \( \mathbf{w} \) y \( b \). Esto lleva al problema dual:

\[
\text{Maximizar } \sum_{i=1}^N \alpha_i - \frac{1}{2} \sum_{i=1}^N \sum_{j=1}^N \alpha_i \alpha_j y_i y_j (\mathbf{x}_i^T \mathbf{x}_j)
\]

sujeto a:

\[
\alpha_i \geq 0 \quad \text{y} \quad \sum_{i=1}^N \alpha_i y_i = 0
\]

3. Clasificación con SVM

Una vez que se resuelve el problema dual, se obtienen los multiplicadores de Lagrange \( \alpha_i \). Usando estos, el vector de pesos \( \mathbf{w} \) se puede calcular como:

\[
\mathbf{w} = \sum_{i=1}^N \alpha_i y_i \mathbf{x}_i
\]

El sesgo \( b \) se determina a partir de los puntos de soporte, aquellos puntos donde \( \alpha_i > 0 \). La ecuación del hiperplano separador es entonces:

\[
f(\mathbf{x}) = \mathbf{w}^T \mathbf{x} + b
\]

4. SVM con Kernels

Para casos no lineales, las SVM pueden extenderse utilizando **funciones kernel** que permiten transformar el espacio de características a uno de mayor dimensión donde los datos pueden ser separables linealmente. La forma general del kernel es:

\[
K(\mathbf{x}_i, \mathbf{x}_j) = \phi(\mathbf{x}_i)^T \phi(\mathbf{x}_j)
\]

Donde \( \phi \) es una función de mapeo. Algunos ejemplos de kernels incluyen:

- Kernel Polinómico: \( K(\mathbf{x}_i, \mathbf{x}_j) = (\mathbf{x}_i^T \mathbf{x}_j + c)^d \)
- Kernel Radial Basis Function (RBF): \( K(\mathbf{x}_i, \mathbf{x}_j) = \exp\left(-\frac{\|\mathbf{x}_i - \mathbf{x}_j\|^2}{2\sigma^2}\right) \)

5. Regularización

Para manejar casos donde los datos no son perfectamente separables, se introduce un parámetro de regularización \( C \) en la formulación de SVM que controla el equilibrio entre maximizar el margen y minimizar el error de clasificación. El problema primal modificado con regularización es:

\[
\text{Minimizar } \frac{1}{2} \|\mathbf{w}\|^2 + C \sum_{i=1}^N \xi_i
\]

sujeto a:

\[
y_i (\mathbf{w}^T \mathbf{x}_i + b) \geq 1 - \xi_i \quad \text{y} \quad \xi_i \geq 0
\]

Donde \( \xi_i \) son las variables de holgura que permiten cierta cantidad de error en la clasificación.

Conclusión

Las Máquinas de Vectores de Soporte (SVM) son una herramienta poderosa para la clasificación, basada en la idea de maximizar el margen entre clases. Utilizan un enfoque de optimización que se puede extender a problemas no lineales mediante el uso de kernels. La inclusión de regularización permite que las SVM manejen datos no perfectamente separables, ofreciendo un balance entre margen y error.

 

SVM con Kernels: Extensión a Espacios de Características No Lineales

Las Máquinas de Vectores de Soporte (SVM) con kernels representan una extensión poderosa del método de SVM para manejar problemas en los que los datos no son linealmente separables en el espacio original de características. Esta técnica permite que las SVM se adapten a estructuras de datos más complejas al transformar el espacio de características original a uno de mayor dimensión donde las clases pueden ser separables linealmente.

1. Concepto de Función Kernel

En lugar de trabajar directamente en el espacio original de características, las SVM con kernels operan en un espacio de características transformado. La idea clave es usar una función kernel \( K(\mathbf{x}_i, \mathbf{x}_j) \) que calcula el producto interno en un espacio de características implícito sin necesidad de realizar explícitamente la transformación de características.

El kernel permite que el algoritmo SVM se ajuste a los datos no lineales al mapearlos a un espacio de mayor dimensión, donde es posible encontrar un hiperplano separador lineal.

2. Funciones Kernel Comunes

a. Kernel Lineal

El kernel lineal es el más simple y equivale a no transformar el espacio de características:

\[
K(\mathbf{x}_i, \mathbf{x}_j) = \mathbf{x}_i^T \mathbf{x}_j
\]

b. Kernel Polinómico

El kernel polinómico transforma el espacio de características elevando las características a una potencia \( d \), permitiendo captar interacciones entre características hasta el grado \( d \):

\[
K(\mathbf{x}_i, \mathbf{x}_j) = (\mathbf{x}_i^T \mathbf{x}_j + c)^d
\]

Donde:
- \( c \) es un término de sesgo.
- \( d \) es el grado del polinomio.

c. Kernel Radial Basis Function (RBF) o Gaussiano

El kernel RBF mide la similitud entre dos puntos en función de su distancia. Es ampliamente utilizado por su capacidad para manejar complejas relaciones no lineales:

\[
K(\mathbf{x}_i, \mathbf{x}_j) = \exp\left(-\frac{\|\mathbf{x}_i - \mathbf{x}_j\|^2}{2\sigma^2}\right)
\]

Donde:
- \( \sigma \) es un parámetro que controla el ancho del kernel. Un \( \sigma \) pequeño hace que el kernel sea muy local, mientras que un \( \sigma \) grande hace que sea más global.

d. Kernel Sigmoidal

El kernel sigmoidal está relacionado con las funciones de activación de las redes neuronales y tiene una forma similar a la función de activación de una neurona:

\[
K(\mathbf{x}_i, \mathbf{x}_j) = \tanh(\alpha \mathbf{x}_i^T \mathbf{x}_j + c)
\]

Donde:
- \( \alpha \) es un parámetro de escala.
- \( c \) es un término de sesgo.

3. Problema Dual con Kernels

Al utilizar un kernel, el problema de optimización en SVM se transforma en:

\[
\text{Maximizar } \sum_{i=1}^N \alpha_i - \frac{1}{2} \sum_{i=1}^N \sum_{j=1}^N \alpha_i \alpha_j y_i y_j K(\mathbf{x}_i, \mathbf{x}_j)
\]

sujeto a:

\[
0 \leq \alpha_i \leq C \quad \text{y} \quad \sum_{i=1}^N \alpha_i y_i = 0
\]

Donde \( C \) es el parámetro de regularización que controla el trade-off entre maximizar el margen y minimizar el error de clasificación.

4. Transformación Implícita del Espacio de Características

Una característica fundamental de los kernels es que permiten la transformación implícita del espacio de características sin tener que calcular explícitamente las coordenadas en el espacio de alta dimensión. Esto se basa en el hecho de que los kernels calculan el producto interno en el espacio transformado, lo que evita la necesidad de calcular las coordenadas transformadas directamente.

Para un kernel dado \( K(\mathbf{x}_i, \mathbf{x}_j) \), existe una función de mapeo implícita \( \phi \) tal que:

\[
K(\mathbf{x}_i, \mathbf{x}_j) = \phi(\mathbf{x}_i)^T \phi(\mathbf{x}_j)
\]

5. Elección del Kernel y Ajuste de Parámetros

La selección del kernel y el ajuste de sus parámetros (como \( d \) en el kernel polinómico, \( \sigma \) en el kernel RBF, o \( \alpha \) y \( c \) en el kernel sigmoidal) son fundamentales para el rendimiento del modelo. Esto generalmente se realiza mediante técnicas de validación cruzada y búsqueda de hiperparámetros:

- Validación Cruzada: Se utiliza para evaluar el rendimiento del modelo con diferentes configuraciones de hiperparámetros y seleccionar la mejor combinación.
- Búsqueda en Rejilla y Búsqueda Aleatoria: Se emplean para explorar diferentes valores de hiperparámetros y encontrar los que optimizan el rendimiento del modelo.

6. Ejemplo de Aplicación

Consideremos un problema de clasificación no lineal donde los datos no pueden ser separados con un hiperplano lineal. Utilizando el kernel RBF, el modelo SVM puede transformar los datos a un espacio de características donde un hiperplano puede separarlos eficientemente. La función de decisión del modelo resultante en el espacio original se basa en la combinación de los valores del kernel:

\[
f(\mathbf{x}) = \sum_{i=1}^N \alpha_i y_i K(\mathbf{x}_i, \mathbf{x}) + b
\]

Conclusión

Las SVM con kernels permiten abordar problemas de clasificación no lineales al transformar el espacio de características a dimensiones más altas donde las clases pueden ser separadas linealmente. La elección del kernel y el ajuste de sus parámetros son esenciales para el éxito del modelo. Los kernels transforman implícitamente los datos, haciendo posible trabajar con relaciones complejas sin necesidad de calcular explícitamente las transformaciones en el espacio de alta dimensión.

 

Evaluación y Optimización de Máquinas de Vectores de Soporte (SVM)

Evaluar y optimizar Máquinas de Vectores de Soporte (SVM) es crucial para asegurar que el modelo no solo se ajuste bien a los datos de entrenamiento, sino que también generalice eficazmente a datos no vistos. La evaluación y optimización se dividen en varios pasos clave:

1. Evaluación del Modelo SVM

a. Métricas de Evaluación

Para evaluar el rendimiento de una SVM, se utilizan varias métricas, dependiendo del tipo de problema (clasificación o regresión):

Para Clasificación:

- Precisión (Accuracy): Proporción de predicciones correctas sobre el total de muestras.
  
  \[
  \text{Precisión} = \frac{\text{Número de predicciones correctas}}{\text{Número total de muestras}}
  \]

- Matriz de Confusión: Muestra el número de verdaderos positivos, falsos positivos, verdaderos negativos y falsos negativos.
  
  \[
  \text{Matriz de Confusión} = \begin{bmatrix}
  TP & FP \\
  FN & TN
  \end{bmatrix}
  \]

  Donde:
  - \( TP \) = Verdaderos Positivos
  - \( FP \) = Falsos Positivos
  - \( FN \) = Falsos Negativos
  - \( TN \) = Verdaderos Negativos

- Precisión y Recall:
  - Precisión (Precision): Proporción de verdaderos positivos sobre el total de predicciones positivas.
    
    \[
    \text{Precisión} = \frac{TP}{TP + FP}
    \]

  - Recall: Proporción de verdaderos positivos sobre el total de positivos reales.
    
    \[
    \text{Recall} = \frac{TP}{TP + FN}
    \]

- F1-Score: Media armónica entre precisión y recall.
  
  \[
  F1 = 2 \cdot \frac{\text{Precisión} \cdot \text{Recall}}{\text{Precisión} + \text{Recall}}
  \]

- Área Bajo la Curva ROC (AUC-ROC): Mide el rendimiento del modelo a través de diferentes umbrales de clasificación. Una mayor área bajo la curva indica un mejor rendimiento.

**Para Regresión:**

- Error Cuadrático Medio (MSE): Promedio de los cuadrados de los errores (diferencia entre valores predichos y valores verdaderos).
  
  \[
  \text{MSE} = \frac{1}{N} \sum_{i=1}^N (\hat{y}_i - y_i)^2
  \]

- Raíz del Error Cuadrático Medio (RMSE): Raíz cuadrada del MSE. Ofrece una métrica en las mismas unidades que la variable de salida.
  
  \[
  \text{RMSE} = \sqrt{\text{MSE}}
  \]

- Error Absoluto Medio (MAE): Promedio de las diferencias absolutas entre las predicciones y los valores reales.
  
  \[
  \text{MAE} = \frac{1}{N} \sum_{i=1}^N |\hat{y}_i - y_i|
  \]

2. Optimización del Modelo SVM

a. Selección de Hiperparámetros

La optimización de una SVM involucra ajustar varios hiperparámetros clave:

- Parámetro de Regularización (C):Controla el trade-off entre maximizar el margen y minimizar el error de clasificación. Un \( C \) alto implica un margen más estrecho pero menos error de clasificación, mientras que un \( C \) bajo permite un margen más amplio pero puede permitir más errores.
  
  \[
  \text{Minimizar } \frac{1}{2} \|\mathbf{w}\|^2 + C \sum_{i=1}^N \xi_i
  \]

- Parámetro del Kernel (por ejemplo, \( \sigma \) en el kernel RBF, \( d \) en el kernel polinómico): Determina la forma del kernel y afecta la flexibilidad del modelo.
  
  Para el kernel RBF:
  \[
  K(\mathbf{x}_i, \mathbf{x}_j) = \exp\left(-\frac{\|\mathbf{x}_i - \mathbf{x}_j\|^2}{2\sigma^2}\right)
  \]
  
  Para el kernel polinómico:
  \[
  K(\mathbf{x}_i, \mathbf{x}_j) = (\mathbf{x}_i^T \mathbf{x}_j + c)^d
  \]

b. Búsqueda de Hiperparámetros

- **Búsqueda en Rejilla (Grid Search):** Evalúa todas las combinaciones posibles de hiperparámetros en una rejilla predefinida. 

- **Búsqueda Aleatoria (Random Search):** Muestra aleatoriamente combinaciones de hiperparámetros y evalúa su rendimiento. Es útil para encontrar configuraciones óptimas sin tener que evaluar todas las combinaciones posibles.

- **Optimización Bayesiana:** Utiliza modelos probabilísticos para encontrar combinaciones de hiperparámetros que maximicen la función objetivo. Se basa en la exploración y explotación de la función de rendimiento del modelo.

c. Validación Cruzada

La validación cruzada divide el conjunto de datos en varios subconjuntos (folds). Para cada conjunto, el modelo se entrena en un subconjunto y se valida en el resto. Esto proporciona una estimación robusta del rendimiento del modelo y ayuda a prevenir el sobreajuste. Una técnica común es la validación cruzada k-fold.

- Proceso:
  1. Dividir los datos en \( k \) pliegues.
  2. Entrenar el modelo \( k \) veces, cada vez con un pliegue diferente como conjunto de validación y los restantes como conjunto de entrenamiento.
  3. Calcular el rendimiento promedio del modelo en los \( k \) pliegues.

3. Técnicas Avanzadas de Optimización

- SVM con Penalización de Coste: Ajusta el parámetro de regularización para equilibrar el margen y los errores de clasificación en datos desequilibrados.

- SVM Multi-clase: Utiliza estrategias como "uno contra uno" o "uno contra el resto" para manejar problemas de clasificación con más de dos clases.

Conclusión

La evaluación y optimización de las Máquinas de Vectores de Soporte (SVM) son fundamentales para obtener modelos de alta calidad. La evaluación se basa en métricas adecuadas para el tipo de problema, mientras que la optimización implica la selección y ajuste de hiperparámetros mediante técnicas como la búsqueda en rejilla, la búsqueda aleatoria y la optimización bayesiana. La validación cruzada asegura una estimación precisa del rendimiento del modelo y ayuda a evitar el sobreajuste. La elección cuidadosa de estos elementos garantiza que el modelo SVM se ajuste bien a los datos y generalice eficazmente a nuevos datos.

 

Aplicación práctica

Un ejemplo práctico de cómo se puede realizar un problema de clasificación utilizando SVM en Python con Scikit-learn. Primero, importamos las librerías necesarias:

import numpy as np
import matplotlib.pyplot as plt
from sklearn import svm, datasets

A continuación, cargamos un dataset de iris de ejemplo haciendo uso de Scikit-learn:

# cargar dataset de iris
iris = datasets.load_iris()
# seleccionar las dos últimas características de este dataset
X = iris.data[:, 2:]
y = iris.target

Este dataset contiene información sobre tres tipos de flor de iris, y queremos clasificar las últimas dos características (la longitud de los pétalos y los sépalos) en cada tipo de flor. Ahora, dividimos los datos en conjuntos de entrenamiento y prueba:

# dividir los datos en conjunto de entrenamiento y prueba
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

Después, creamos el modelo SVM con Scikit-learn:

# crear un modelo SVM
model = svm.SVC(kernel='linear')
# entrenar el modelo con los datos de entrenamiento
model.fit(X_train, y_train)

Finalmente, hacemos predicciones sobre el conjunto de prueba y calculamos la precisión del modelo:

# hacer predicciones con el conjunto de prueba
y_pred = model.predict(X_test)
# calcular la precisión del modelo
accuracy = np.mean(y_pred == y_test)
print(f"La precisión del modelo es {accuracy:.2f}")

Este es un ejemplo muy básico de cómo utilizar SVM para clasificación en Scikit-learn. Por supuesto, hay muchas variables que se pueden ajustar en el modelo y mejorar su precisión, pero este es un buen lugar para comenzar.