Análisis con Máquinas de Soporte Vectorial (Support Vector Machines SVMs)

Las Máquinas de Soporte Vectorial (Support Vector Machines SVMs) son un conjunto de algoritmos de aprendizaje supervisados que desarrollan métodos relacionados con los problemas de clasificación y regresión. Las Máquinas de Soporte Vectorial (SVM), intuitivamente, son un modelo que dado un conjunto de ejemplos de entrenamiento, podemos etiquetarlos en diferentes clases y representar dichas muestras de los casos de entrenamiento en puntos en el espacio para tratar de separar las diferentes clases mediante un espacio lo mas amplio posible (teniendo en cuenta el coste y unos patrones óptimos de entrenamiento), para que cuando las nuevas muestras de los casos de test se pongan en correspondencia con dicho modelo puedan ser clasificadas correctamente en función de su proximidad.

Mas formalmente, una SVM es un algoritmo que a partir del producto escalar de los vectores multidimensionales de las muestras, construye un hiperplano o conjunto de hiperplanos e un espacio de dimensionalidad muy alta que separa los grupos y puede ser utilizado en problemas de clasificación o regresión. Si mediante una SVM obtenemos una buena separación entre las clases, lograremos una clasificación correcta de todas las muestras.

Dado un conjunto de entradas con las características de las muertas de entrenamiento y los valores de las etiquetas de cada una de las muestras, las Maquinas de Soporte Vectorial se encargan de proveer la solución al siguiente problema de optimización:



El hiperplano de separación nombrado buscado por el algoritmo es aquel que maximiza la distancia entre las posibles clases:



La función que define el producto escalar entre los vectores multidimensionales la denominaremos como "kernel". Dichas funciones "kernel" son las funciones matemáticas que se emplean en las Máquinas de Soporte Vectorial y son las que permiten convertir lo que seria un problema de clasificacion no lineal en el espacio dimensional original, en un sencillo problema de clasificación lineal en un espacio dimensional mayor. La funcion "kernel" que vamos a usar para nuestro problema va a ser la función gaussiana.



En la ejecución de las Máquinas de Soporte Vectorial, tendremos que configurar principalmente dos parámetros, el primer parámetro configurable es el "sigma" (σ) de nuestra función de "kernel" gaussiana que controla la anchura de la "campana".


Con un valor grande de nuestro parámetro "sigma" (σ) conseguimos que los valores de los puntos de nuestras características conocidas abarquen más, pudiendo así tomar estos más valores en su dominio y teniendo este un cambio mas suavizado en sus valores. Por el contrario, si tomamos un valor pequeño para nuestro parámetro "sigma" (σ) conseguimos que los valores de los puntos de nuestras caracteristicas conocidas tengan un dominio de valores mas reducido y que el cambio entre sus valores sea mas brusco, es decir, con un valor pequeño de nuestro parámetro "sigma" (σ) tendremos mas varianza.

El otro parámetro configurable lo encontramos en nuestra función de minimización de nuestro problema, y es el parámetro 'C' que es un término equivalente al "1/λ" que podíamos usar en la regularización de los problemas planteados con los análisis de Regresión Logística y Redes Neuronales. Realmente este parámetro "C" es el inverso del parámetro λ de regularización por lo cual, si tenemos un valor alto de nuestro parámetro tendremos una mayor varianza y la regularización será menor, mientras que por el contrario, si tenemos un valor bajo, tendremos un mayor efecto de la regularización.

En el proceso de entrenamiento nuestro objetivo es la minimización de la función de coste, de manera que se obtenga una separación correcta entre las clases presentes en el conjunto de entrenamiento. A continuación podemos ver la formulación necesaria para ello:


El detalle y codificación de los algoritmos en los que vamos a emplear las Máquinas de Soporte Vectorial la especificaremos más adelante, pero antes debemos comentar que para la resolución de los problemas de Maquinas de Soporte Vectorial, disponemos de una librería externa para su uso con diferentes lenguajes de programación como puede ser Java, C, Matlab, Python, etc. y dicha librería se denomina "LibSVM".

Nuestra codificación la vamos a realizar con Octave (también incluido en la librería LibSVM) y para ello disponemos de funciones tanto de entrenamiento (función svmTrain) como de clasificación (svmPredict). 

Antes de ejecutar dichas funciones para obtener los resultados, construiremos tanto nuestras variables predictoras o independientes 'X', como nuestra variable categórica 'Y'.



Una vez que hemos construido nuestras variables independientes o predictoras 'X' y nuestra variable categórica 'Y', podemos configurar tanto el parámetro 'C' de nuestra función de minimización como nuestro parámetro "sigma" (σ) de nuestra función "kernel" gaussiana para posteriormente iniciar el proceso de entrenamiento con la función "svmTrain" de la cual obtendremos un modelo para los datos de entrenamiento que hemos introducido.



Una vez que hemos obtenido el modelo del entrenamiento con nuestro conjunto de datos de entrenamiento, podemos decir que tenemos entrenado al sistema y por tanto ya podemos cargar nuestros conjuntos de test, estableciendo de nuevo las variables independientes o predictoras 'X' (pero esta vez variables de test), para que junto con el modelo obtenido en el entrenamiento, se las introduzcamos a la función de clasificación "svmTrain" y obtener así los resultados de la clasificación de nuestros datos de test para posteriormente analizarlos.


La variable "Group1" obtenida de la función "svmPredict" contiene los resultados de la predicción para los valores de las muestras de los casos de test introducidos ofrecidos por nuestra Máquina de Soporte Vectorial construida.

Volver a la Pagina Principal (Inicio)