SVM – Máquinas de vectores de soporte en R

por | Oct 3, 2016 | R | 4 Comentarios

Uso: Clasificador lineal.

Descripción: El método de SVM se basa en la búsqueda de un hiperplano que separe de forma óptima a los puntos de una clase de la de otra, que eventualmente han podido ser previamente proyectados a un espacio de dimensionalidad superior.

La característica fundamental es buscar el hiperplano que tenga la máxima distancia (margen) con los puntos que estén más cerca de él mismo. De esta forma, los puntos del vector que son etiquetados con una categoría estarán a un lado del hiperplano y los casos que se encuentren en la otra categoría estarán al otro lado.

Variable dependiente: métricas y/o no métricas

Variables independientes: métricas

Ejemplo en R: Clasificar tipo de flor atendiendo a sus características físicas como pueden ser el ancho y alto de los pétalos y sépalos.

# Cargar libreria utilizada
library(e1071)

# Carga de datos inicial, tipos de flores con diferentes caracteristicas 
data(iris)
datos <- iris
View(datos)

# Selección de una submuestra del 70% de los datos
set.seed(101)
tamano.total <- nrow(datos)
tamano.entreno <- round(tamano.total*0.7)
datos.indices <- sample(1:tamano.total , size=tamano.entreno)
datos.entreno <- datos[datos.indices,]
datos.test <- datos[-datos.indices,]

# Ejecución del modelo SVM
modelo <- svm(Species~., data=datos.entreno)

# Predicción de los restantes
prediccion <- predict(modelo,new=datos.test)

# Tabla de confusión.
# Se usa with para que aparezca el nombre de la variable Species en ella
# ya que en caso contrario no sale.
(mc <- with(datos.test,(table(prediccion,Species))))
##             Species
## prediccion   setosa versicolor virginica
##   setosa         15          0         0
##   versicolor      0         11         2
##   virginica       0          1        16
# % correctamente clasificados
(correctos <- sum(diag(mc)) / nrow(datos.test) *100)
## [1] 93.33333

4 Comentarios

  1. Paloma

    Te felicito sinceramente por el contenido de la web. Me ha resuelto muchas dudas y aclarado conceptos.

    Gracias 🙂

    Responder
  2. Maritza

    gracias por la info, también se puede aplicar para regresión? podrías compartir un ejemplo… 🙂

    Responder
  3. Santiago

    Muy buena y clara la explicación!!!! Ahora bien esta librereria no parecería ser adecuada para bases de datos mas grandes como por ejemplo de 100.000 observaciones. Pasan días enteros de proceso de datos y no se arroja ningún resultado

    Responder
  4. Juan Pablo León

    Hola Diego, gracias por la explicación.

    Sabes como graficar el hiperplano optimo de separación si se pasa de un espacio R2 a R3?

    Tengo esta información:

    datos % add_trace(x = ~x, y = ~y, z = ~z, color = ~clase , colors = c(«#0C4B8E», «#BF382A»), mode = «markers», type = «scatter3d»)

    Como puedo graficar un hiperplano que separe estas dos «poblaciones»

    Responder

Enviar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *