SUPPORT VECTOR MACHINE (SVM) - MÁQUINA DE VECTORES DE SOPORTE

Las máquinas de soporte vectorial, máquinas de vectores de soporte o máquinas de vector soporte (Support Vector Machines, SVMs) son un conjunto de algoritmos de aprendizaje supervisado desarrollados por Vladimir Vapnik y su equipo en los laboratorios AT&T.

Una máquina de vectores de soporte (SVM) es un algoritmo de aprendizaje supervisado que se puede emplear para clasificación binaria o regresión, construye un hiperplano óptimo en forma de superficie de decisión, de modo que el margen de separación entre las dos clases en los datos se amplía al máximo. Los vectores de soporte hacen referencia a un pequeño subconjunto de las observaciones de entrenamiento que se utilizan como soporte para la ubicación óptima de la superficie de decisión.

Las máquinas de vectores de soporte pertenecen a una clase de algoritmos de Machine Learning denominados métodos kernel y también se conocen como máquinas kernel.

El entrenamiento de una máquina de vectores de soporte consta de dos fases:

1. Transformar los predictores (datos de entrada) en un espacio de características altamente dimensional. En esta fase es suficiente con especificar el kernel; los datos nunca se transforman explícitamente al espacio de características. Este proceso se conoce comúnmente como el truco kernel.

2. Resolver un problema de optimización cuadrática que se ajuste a un hiperplano óptimo para clasificar las características transformadas en dos clases. El número de características transformadas está determinado por el número de vectores de soporte.

Para construir la superficie de decisión solo se requieren los vectores de soporte seleccionados de los datos de entrenamiento. Una vez entrenados, el resto de los datos de entrenamiento son irrelevantes.

Entre los kernels populares que se emplean con las máquinas SVM se incluyen:

Ejemplo en 2–dimensiones

En el siguiente ejemplo idealizado para 2-dimensiones, la representación de los datos a clasificar se realiza en el plano x-y. El algoritmo SVM trata de encontrar un hiperplano 1-dimensional (en el ejemplo que nos ocupa es una línea) que une a las variables predictoras y constituye el límite que define si un elemento de entrada pertenece a una categoría o a la otra.

Existe un número infinito de posibles hiperplanos (líneas) que realicen la clasificación pero, ¿cuál es la mejor y cómo la definimos? La mejor solución es aquella que permita un margen máximo entre los elementos de las dos categorías. Se denominan vectores de soporte a los puntos que conforman las dos líneas paralelas al hiperplano, siendo la distancia entre ellas (margen) la mayor posible.

Hay infinitos hiperplanos posibles

Soft margin: Errores de entrenamiento

Idealmente, el modelo basado en SVM debería producir un hiperplano que separe completamente los datos del universo estudiado en dos categorías. Sin embargo, una separación perfecta no siempre es posible y, si lo es, el resultado del modelo no puede ser generalizado para otros datos. Esto se conoce como sobreajuste (overfitting).

Con el fin de permitir cierta flexibilidad, los SVM manejan un parámetro C que controla la compensación entre errores de entrenamiento y los márgenes rígidos, creando así un margen blando (soft margin) que permita algunos errores en la clasificación a la vez que los penaliza.

H1 no separa las clases. H2 las separa, pero solo con un margen pequeño. H3 las separa con el margen máximo.

Función Kernel

La manera más simple de realizar la separación es mediante una línea recta, un plano recto o un hiperplano N-dimensional.

Desafortunadamente los universos a estudiar no se suelen presentar en casos idílicos de dos dimensiones como en el ejemplo anterior, sino que un algoritmo SVM debe tratar con:

    1. más de dos variables predictoras,
    1. curvas no lineales de separación,
    1. casos donde los conjuntos de datos no pueden ser completamente separados,
    1. clasificaciones en más de dos categorías.

Debido a las limitaciones computacionales de las máquinas de aprendizaje lineal, éstas no pueden ser utilizadas en la mayoría de las aplicaciones del mundo real. La representación por medio de funciones Kernel ofrece una solución a este problema, proyectando la información a un espacio de características de mayor dimensión el cual aumenta la capacidad computacional de la máquinas de aprendizaje lineal. Es decir, mapearemos el espacio de entradas X a un nuevo espacio de características de mayor dimensionalidad (Hilbert):

        F = {φ(x)|x ∈ X}

        x = {x1, x2, · · ·, xn} → φ(x) = {φ1(x), φ2(x), · · ·, φn(x)}
        
Tipos de funciones Kernel (Núcleo)
  • Polinomial-homogénea: \(K(x_{i}, x_{j}) = (x_{i}·x_{j})^{n}\)
  • Perceptron: \(K(x_{i}, x_{j})= || x_{i}-x_{j} ||\)
  • Función de base radial Gaussiana: separado por un hiperplano en el espacio transformado: \(K(x_{}, x_{j})=e^{(-(x_{i}-x_{j})^{2}/2(sigma)^{2})}\)

Ejemplo de aplicación usando SVM en la base de datos Paramicina

Treloar (1974) obtuvo los datos sobre la velocidad de una reacción enzimática. El número de conteos por minuto de producto radiactivo de la reacción se midió en función de la: concentración de sustrato en partes por millón (ppm) y a partir de estos conteos se calculó la velocidad inicial (o velocidad) de la reacción (conteos / min / min), ademas de utilizar la cantidad de paramicina (ml) y por el ultimo el nivel de concentracion (%) . El experimento se realizó con la enzima tratada, y con la enzima no tratada.

load("Paramicina.Rdata")
head (Paramicina, n = 10)
##    Sustrato Velocidad Cantidad Nivel  Estado
## 1      1.01        66        7  3.32 Tratado
## 2      0.65        90        9  2.58 Tratado
## 3      0.97        75        6  3.99 Tratado
## 4      0.77        47        6  3.66 Tratado
## 5      0.29       171        6  4.34 Tratado
## 6      0.19       149        6  2.87 Tratado
## 7      0.28        90        8  3.46 Tratado
## 8      0.65       196        9  3.02 Tratado
## 9      0.10       103        5  2.64 Tratado
## 10     0.97       186        7  4.39 Tratado

Matriz de Confusión

library(e1071)
rndSample <- sample(1:nrow(Paramicina), 150)
tr <- Paramicina[rndSample, ] #data de entranamiento
ts <- Paramicina[-rndSample, ] #data de evaluación
s <- svm(Estado ~ ., tr) 
ps <- predict(s, ts)
(cm <- table(ps, ts$Estado))
            
ps           No Tratado Tratado
  No Tratado         24      19
  Tratado            29      28

INTERPRETACIÓN: Podemos observar en la matriz de confusion que hay ( ) enzimas que estan clasificadas como no tratadas y ( ) que las clasifica como tratadas; ademas tenemos que hay ( ) enzimas que las clasifica como tratadas y ( ) como no tratadas.

100*(1-sum(diag(cm))/sum(cm))  # the error rate
## [1] 48

INTERPRETACIÓN: El porcentaje de error para la clasificacion de la base de datos es de el ( ) %

Aplicación

Para este modelo de clasificación se creo una la aplicación que predice a que tipo de Estado pertenece la enzima introduciendo los datos como se ve a continuacion:

La aplicación SUPPORT VECTOR MACHINE se encuentra en el siguiente enlace: https://daicy.shinyapps.io/apli/