Máquinas de soporte vectorial (SVM)#
Son un conjunto de métodos para aprendizaje supervizado usados para regresión, clasificación y detección de outliers.
Son efectivos en espacios altamente dimensionales, inclusive cuando el número de dimensiones es mayor que el número de muestras.
Usan un subconjunto de puntos de entrenamiento en la función de decisión (llamados vectores de soporte), por lo que también son eficientes en el uso de la memoria.
No entregan estimados de probabilidad, los cuales deben ser calculados usando 5-fold cross-validation.
Construyen un hiperplano o conjunto de hiperplanos en un espacio altamente dimensional.
Una máquina de soporte vectorial es un modelo matemático de la siguiente forma:
y = w_0 + \sum_d w_d \times k(\mathbf{x}, \mathbf{x}_d)
donde:
w_0 es una constante.
\mathbf{x} es el vector de variables independientes (valor para el cual se desea calcular la salida y.
w_d son los coeficientes del modelo.
\mathbf{x}_d son los vectores de soporte.
k() es una función de núcleo (kernel function).
d=1,...,D es un índice que itera sobre el conjunto de vectores de soporte.
Los funciones kernel k() son las siguientes:
Lineal:
k(\mathbf{x}, \mathbf{z}) = \sum_i x_i \cdot z_i
Polinomial:
k(\mathbf{x}, \mathbf{z}) = 1 + \left( \sum_i x_i \cdot z_i \right)^d
donde el grado d del polinomio debe ser especificado por el modelador.
RBF:
k(\mathbf{x}, \mathbf{z}) = \exp( -\gamma \cdot ||\mathbf{x} - \mathbf{z}||^2)
con \gamma > 0.
Sigmoid:
k(\mathbf{x}, \mathbf{z}) = \tanh \left(r + \gamma \sum_i x_i \cdot y_i \right)
[1]:
import numpy as np
# Sea una SVM con kernels lineales:
#
# y = 0.3 + 0.4 * k(x, [1, 2]) + 0.5 * k(x, [3, 4]) + 0.6 * k(x, [5, 6])
#
# Los vectores de soporte son:
xd = np.array(
[
[1, 2],
[3, 4],
[5, 6],
]
)
# El punto x donde se desea evaluar la SVM es:
x = [[0.1, 0.2]]
[2]:
from sklearn.metrics.pairwise import linear_kernel
# linear kernel: f(x, y) = x^T y
# 1 * 0.1 + 2 * 0.2 = 0.5
# 3 * 0.1 + 4 * 0.2 = 1.1
# 5 * 0.1 + 6 * 0.2 = 1.7
linear_kernel(xd, x)
[2]:
array([[0.5],
[1.1],
[1.7]])
[3]:
# La salida de la SVM será:
0.3 + 0.4 * 0.5 + 0.5 * 1.1 + 0.6 * 1.7
[3]:
2.0700000000000003