Date post: | 13-Nov-2023 |
Category: |
Documents |
Upload: | independent |
View: | 0 times |
Download: | 0 times |
Universidad de los Andes
Facultad de Ingenierıa y Ciencias Aplicadas
OPTIMIZACION DEL TIEMPO DE PROCESOS
PARA SUPPORT VECTOR MACHINES
MEDIANTE PARALELIZACION PARA
PROBLEMAS DE MINERIA DE DATOS
MATIAS BENAVENTE ESCANDON
Memoria para optar al tıtulo deIngeniero Civil Industrial mencion Gestion de Operaciones
Profesor Guıa: SEBASTIAN ALEJANDRO MALDONADO ALARCON
ING-IN-001/11
Santiago, Diciembre de 2015
Certifico que he leıdo esta memoria y que en mi opinionsu alcance y calidad son completamente adecuados comopara ser considerada una memoria conducente al tıtulode Ingeniero.
SEBASTIAN ALEJANDRO MALDONADO ALARCON(Profesor Guıa)
Certifico que he leıdo esta memoria y que en mi opinionsu alcance y calidad son completamente adecuados comopara ser considerada una memoria conducente al tıtulode Ingeniero.
-
Certifico que he leıdo esta memoria y que en mi opinionsu alcance y calidad son completamente adecuados comopara ser considerada una memoria conducente al tıtulode Ingeniero.
-
Resumen
En la presente memoria se utilizara el metodo de SVM (Support Vector Machines)
para la clasificacion binaria, con el objetivo de mejorar el rendimiento en terminos de
tiempo en problemas de minerıa de datos de gran escala.
En la actualidad, existen varias librerıas en distintos tipos de lenguajes que dan he-
rramientas para la solucion de este tipo de problemas, especialmente mencionaremos
la librerıa SeDuMi de Matlab y Scikit-learn para Python, en donde ambas librerıas
tienen la facultad de resolver el problema de optimizacion que presenta SVMs.
Debido a que los algoritmos para el desarrollo de SVM necesitan de una inmensa
cantidad de calculos matematicos, se utilizara la tecnica de procesamiento paralelo.
En el presente trabajo se utilizara con la plataforma CUDA (Compute Unified Device
Architecture) desarrollada por la empresa nVidia, que permite el procesamiento de
datos de forma paralela en las tarjetas graficas o GPU (Graphics Processing Units)
de esta marca.
La metodologıa del presente trabajo sera de comparar la diferencia de tiempo entre
los resultados obtenidos con la librerıa SeDuMi (Matlab) y la librerıa Scikit-learn de
Python utilizando en esta ultima las herramientas que ofrece CUDA para paralelizar
las operaciones matematicas y optimizar los tiempos en la resolucion de problemas
de SVMs.
iv
Indice general
Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . iv
Agradecimientos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . v
1. Introduccion 1
1.1. Motivacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2. Descripcion del problema . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.3. La importancia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.4. Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.5. Metodologıa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.6. Contribucion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2. Revision Bibliografica 5
2.1. Support Vector Machines (SVM) . . . . . . . . . . . . . . . . . . . . 5
2.1.1. Contextualizacion . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.1.2. SVM Lineal . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.1.3. SVM Primal . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.1.4. SVM Dual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.1.5. Kernel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.1.6. SVM a gran escala . . . . . . . . . . . . . . . . . . . . . . . . 9
2.1.7. Sequential Minimal Optimization (SMO) . . . . . . . . . . . . 9
2.2. Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.3. CUDA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.3.1. Arquitectura de las GPU . . . . . . . . . . . . . . . . . . . . . 10
Bibliografıa 12
vii
Indice de figuras
2.1. Ilustracion de transformacion de un espacio vectorial a otro mediante
una funcion Kernel (Maldonado, 2014). . . . . . . . . . . . . . . . . . 8
2.2. Imagen ilustrativa del uso de la GPU y CPU. Fuente: www.nvidia.com 10
viii
Indice de tablas
2.1. Funciones Kernel estandar . . . . . . . . . . . . . . . . . . . . . . . . 9
ix
Capıtulo 1
Introduccion
1.1. Motivacion
En el transcurso del tiempo, el ritmo en las industria y la vida en general ha ido
adoptando una necesidad por la inmediatez debido a multiples factores tales como la
globalizacion, nuevas tecnologıas, la intensa competencia entre empresas, entre otros.
Debido a este hecho, el tiempo ha ido tomando gran importancia haciendolo uno
de los factores claves y fundamentales para todo tipo de proceso tales como la Bioin-
formatica, calculos financieros, creditos financieros, procesamiento y reconocimiento
de imagenes entre muchos otros.
Una gran cantidad de estos procesos utilizan el modelo de clasificacion SVM, que
permiten separar los datos segun sus caracterısticas en distintos grupos y ası poder
predecir el comportamiento de nuevos datos o realizar interpretaciones sobre estos.
Por lo tanto, la finalidad de esta memoria es poder optimizar la forma en que se
realizan estas operaciones matematicas mediante metodos de paralelizacion, especıfi-
camente utilizando la GPU y ası poder reducir los tiempos que toman los algoritmos
de SVMs.
1.2. Descripcion del problema
En la actualidad el acceso a la informacion y la integracion de la tecnologıa en los
procesos diarios han hecho que las bases de datos, en general, hayan ido creciendo de
1
forma exponencial. Ademas, las tecnicas cada vez mas sofisticadas y complejas han
dado como resultado modelos matematicos con una gran cantidad de operaciones en
sus algoritmos.
La minerıa de datos es un campo de las ciencias de la computacion referido al proceso
que intenta descubrir patrones en grandes volumenes de conjuntos de datos, proce-
so conocido tambien como KDD (Knowledge Discovery in Databases). Este proceso
consiste en la realizacion de una serie de etapas aplicables a una base de datos con el
fin de extraer informacion util que apoya a la toma de decisiones. El proceso intenta
clasificar, agrupar y analizar la informacion para poder interpretar y predecir nuevos
datos segun sus variables. Uno de los metodos de clasificacion que se utilizan es SVMs.
El problema surge cuando la cantidad de datos o muestras y su composicion o canti-
dad de variables por dato comienzan a crecer. En este punto, la resolucion de estos
problemas comienza a tomar cada vez mas recursos computacionales debido al orden
en que crecen las necesidades operacionales de los algoritmos y por consiguiente se
tiene un aumento en el tiempo proporcionalmente a este.
Dado este escenario, la finalidad de la presente memoria, es utilizar las herramientas
disponibles en distintas librerıas y la utilizacion de metodos avanzados para la reso-
lucion de problemas cuadraticos que se presentan en SVMs para poder paralelizar en
la GPU estas operaciones matematicas y ası reducir los tiempos y costos computacio-
nales requeridos.
1.3. La importancia
La obtencion de informacion de manera rapida y eficaz juega un papel funda-
mental en el desarrollo de cualquier proyecto o proceso, dando como resultado una
tendencia a la optimizacion de estos.
Por esto, no solo es importante obtener resultados de gran precision, si no que tam-
bien el tiempo que demoran en obtenerse. El factor tiempo puede ser fundamental
a la hora de tomar decisiones, incluso los datos resultantes pueden ya no ser validos
por el tiempo transcurrido entre el procesamiento y la obtencion de estos.
2
Otro factor relevante, es el ritmo acelerado en que cambian las cosas hoy en dıa
en todo tipo de ambitos, haciendo que los intervalos de tiempos requeridos, para apli-
car estos modelos matematicos, sean cada vez mas pequeno y por consiguiente, se
evidencia la necesidad de optimizar la forma en que estos algoritmos se llevan a cabo.
1.4. Objetivos
General:
Reducir los tiempos en la resolucion de problemas de minerıa de datos para pro-
blemas de clasificacion de gran escala que utilizan el metodo de SVMs.
Especıficos:
1. Estudiar y analizar los algoritmos para la resolucion de problemas de SVMs y
utilizar el que mas se adecue a la implementacion de la paralelizacion.
2. Desarrollar los algoritmos en el ambito de CUDA.
3. Implementacion y medicion de tiempos de los algoritmos mediante la plataforma
CUDA.
4. Implementar y medicion de tiempos de algoritmos sin paralelizar utilizando
Scikit-learn de Python y SeDuMi de Matlab.
5. Comparar los resultados obtenidos y concluir.
1.5. Metodologıa
Para desarrollar el presente trabajo, se necesita primero tener un entendimiento
de lo que es SVM, lo que el modelo propone y su planteamiento matematico. Una vez
entendido esto, se tiene un problema cuadratico de optimizacion, el cual puede ser
resuelto mediante varias tecnicas, tal como lo es el algoritmo SMO (Sequential Mini-
mal Optimization), metodos de punto interior para programacion conica entre otros
algoritmos. Una vez que se tenga conocimiento de como funcionan estos algoritmos en
terminos de uso computacional, se tiene que estudiar como se pueden paralelizar estos
procesos, es decir, realizar las operaciones matematicas requeridas de forma paralela
3
y ası obtener resultados con mayor rapidez y eficacia.
Existen varias plataformas que dan solucion a la paralelizacion de procesos compu-
tacionales. Una de estas es la plataforma CUDA desarrollada por nVidia, la cual sera
utilizada en la presente memoria y se estudiara como funciona este metodo de forma
general mediante la utilizacion de la GPU.
Para el lenguaje Python, existe la librerıa Scikit-learn, la cual entrega una gran can-
tidad de herramientas para Machine Learning y en especıfico, entrega herramientas
para el desarrollo de problemas de clasificacion para SVMs. Esta librerıa sera estu-
diada y se analizara que algoritmo utiliza y su implementacion bajo CUDA para su
paralelizacion.
Luego de haber obtenido los tiempos necesarios para la obtencion de resultados con
el metodo de paralelizacion, se haran las mismas pruebas pero con las librerıas Scikit-
learn y SeDuMi de Matlab sin paralelizacion, para comparar los resultados obtenidos
y determinar la diferencia de tiempo en el procesamiento y obtencion de los resultados.
Dado todo lo anterior, se hara una comparacion de los resultados obtenidos, se de-
terminara como afecta la incorporacion de la paralelizacion en el proceso de SVM en
terminos temporales y las respectivas conclusiones.
1.6. Contribucion
A partir de esta memoria, se busca contribuir a cualquier persona particular, tales
como investigadores, desarrolladores y para empresas como farmaceuticas, empresas
de desarrollo tecnologico y, en general, para cualquier entidad.
4
Capıtulo 2
Revision Bibliografica
2.1. Support Vector Machines (SVM)
2.1.1. Contextualizacion
SVM es un modelo de aprendizaje supervisado para el analisis de informacion y
reconocimiento de patrones desarrollado por Vladimir Vapnik y su equipo en labora-
torios de AT&T.
La idea basica de los algoritmos de SVMs, es tomar un conjunto de entrenamiento
(de muestras) en donde cada elemento corresponde a uno de dos posibles conjuntos.
Los algoritmos de soporte vectorial construyen un modelo matematico capaz de iden-
tificar o predecir a que categorıa va a pertenecer un nuevo elemento, del cual no se
sabe a su categorıa a priori.
Supongamos un conjunto de datos de entrenamiento, donde cada uno pertenece a
uno de dos grupos. Dados estos datos, se quiere determinar a que grupo pertenecera
un nuevo elemento, es decir, se intenta predecir a que grupo deberıa de pertenecer un
nuevo dato, segun la informacion obtenida con el conjunto de entrenamiento. Se dice
que los datos del conjunto son vectores de dimension n (cada dato tiene n variables) y
se quiere encontrar el hiperplano de dimension n–1 que separe a todos los elementos
de un grupo, dejando a todos los datos de un grupo a un lado del hiperplano y a lado
contrario a los del otro grupo.
5
2.1.2. SVM Lineal
Formalmente, podemos escribir un estos datos de entrada como
(x1, y1), (x2, y2), ..., (xn, yn), x ∈ RN , yi ∈ {+1,−1} (2.1)
Donde xi es un vector de dimension N e yi indica a que clase pertenece el vector
xi. Dado este conjunto de datos, se quiere encontrar el hiperplano y sus vectores
soportantes de tal manera de que estos sean paralelos y esten a una misma distancia
del vector separador y la distancia entre estos sea la maxima posible tal que separe
todos los puntos pertenecientes a un grupo del otro. Estos vectores satisfacen
< w, x > +b =
0 para el vector separador
{1,−1} para los vectores soportantes(2.2)
La variable w representa el vector normal u ortogonal al plano, por lo que la distancia
entre los vectores o hiperplanos soportantes es 2‖w‖ por lo que para maximizar esta
distancia, se debe minimizar ‖w‖. Dado que tenemos que definir a que grupo pertenece
cada dato, se formula la funcion de decision
f(xi) = signo(< wi, xi > +b) (2.3)
con estas ecuaciones podemos obtener la formulacion del primal de SVM.
2.1.3. SVM Primal
Para poder formular adecuadamente lo planteado anteriormente, debemos modi-
ficar las ecuaciones para los hiperplanos soportantes de la ecuacion (2.2), imponiendo
que ningun dato se encuentre en la region que esta entre estos. Se pueden combinar
estas dos ecuaciones y sustituirse por yi · (wT · xi + b) ≥ 1 con i = 1, ...,m. Ademas,
debemos tener en cuenta de que puede no existir un hiperplano que separe los datos
de una categorıa con otra, es decir, que no cumpla con todas las restricciones plan-
teadas por el problema. En este caso, debemos de introducir una serie de variables de
holgura ξi, i = 1, ...,m. para relajar las restricciones y penalizar a cada elemento que
esta mal categorizado en la funcion objetivo
6
mınimow,b,ξ
1
2· ‖w‖2 + C
m∑i=1
ξi
sujeto a: yi · (wT · xi + b) ≥ 1− ξi i = 1, ...,m,
ξi ≥ 0 i = 1, ...,m.
(2.4)
siendo parametro C ∈ R simboliza un ponderador que castiga a los dato que estan
mal clasificados.
2.1.4. SVM Dual
A partir del problema de optimizacion (2.4) se puede construir la formulacion me-
diante la tecnica de los multiplicadores de Lagrange y la aplicacion de las condiciones
de Karush-Kuhn-Tucker (KKT)
maximoα
m∑i=1
αi −1
2·
m∑i,s=1
αiαsyiysxi · xs
sujeto a:m∑i=1
αiyi = 0
0 < αi < C i = 1, ...,m.
(2.5)
Dado (2.5), podemos ahora introducir la funcion Kernel.
2.1.5. Kernel
Dado el problema planteado en (2.5), podemos aplicar una funcion Kernel reem-
plazando el producto punto xi · xj por k(xi, xj). Esta funcion lleva los puntos o datos
de entrada a una dimension mayor, siendo ası mas facil la separacion de los datos,
como se muestra en la figura 2.1.
7
Figura 2.1: Ilustracion de transformacion de un espacio vectorial a otro mediante unafuncion Kernel (Maldonado, 2014).
Definida formalmente, tenemos una funcion de mapeo
φ : RN → F
x→ φ(x)
luego, podemos definir la funcion Kernel como sigue:
k(x, x′) := (φ(x) · φ(x′))
k : RN × RN → R
(x, x′)→ k(x, x′)
quedando el problema (2.5) de la siguiente forma:
maximoα
N∑i=1
αi −1
2·
N∑i,s=1
αiαsyiysk(xi, xj)
sujeto a:m∑i=1
αiyi = 0
C ≥ αi ≥ 0, ∀ i = 1, ..., N
(2.6)
y se redefine la funcion de decision por
f(xj) = signo(N∑i=1
αiyi · k(xi, xj) + b)
La tabla 2.1 muestra las funciones Kernel mas conocidas y que seran utilizadas en
la presente memoria
8
Tabla 2.1: Funciones Kernel estandar
Lineal k(xi, xj) = xi · xjPolinomial k(xi, xj) = (axi · xj + r)d
Gaussiana k(xi, xj) = exp(−γ|‖xi − xj‖2)Sigmoide k(xi, xj) = tanh(axi · xj + r)
2.1.6. SVM a gran escala
Los metodos para el calculo del kernel son del orden de O(n2k) (Panagiotis &
Konstantinos, 2013), donde n es el numero de observaciones y k es el numero de
variables. Debido a que cada vez se tienen bases de datos mas grandes y con una
mayor cantidad de variables, el computo de estos calculos comienza a ser cada vez
mas complejo en terminos de utilizacion de recursos computacionales. Es en este
punto en donde la necesidad de metodos alternativos para la resolucion de problemas
se hace evidente y en donde entra en juego la tecnica de paralelizar los procesos.
2.1.7. Sequential Minimal Optimization (SMO)
El problema de optimizacion presentado por SVM (2.6) puede ser resuelto por
varios metodos, cada uno con un nivel de paralelizacion distinto. El algoritmo SMO,
inventado y desarrollado por John Platt en 1998, fue creado para poder solucionar
este problema cuadratico.
Este algoritmo es un metodo iterativo convergente, que reduce cada paso de opti-
mizacion a su forma mınima: actualizar dos pesos αi. El problema computacional se
convierte ahora en actualizar las condiciones optimas de KKT para el resto de los αi
y luego encontrar los proximos dos pesos que se actualizaran en la siguiente iteracion.
Este proceso es repetido hasta llegar a la convergencia, procediendo de la siguiente
manera:
1. Encontrar un multiplicador de Lagrange α1 que viole las condiciones de KKT
para el problema de optimizacion.
2. Elegir un segundo multiplicador α2 y optimizar el par (α1, α2).
3. Repetir los pasos 1 y 2 hasta llegar a la convergencia.
Una buena eleccion de los pesos α1 y α2 puede llevar a una conversion mas rapida
del problema de SMO.
9
2.2. Python
El lenguaje Python ha ido crecimiento a traves de los anos en popularidad y adap-
tacion por parte de los programadores, debido a que es un lenguaje de codigo abierto,
es decir, puede ser modificado y recibe aportes de todas partes del mundo originando
ası un lenguaje mas rico y con mayor cantidad de aportes de todo tipo. Uno de los
aportes que ha dado la comunidad interesada en Python es la librerıa Scikit-learn.
2.3. CUDA
Esta herramienta entregada por nVidia, entrega una arquitectura para el calculo
paralelo que aprovecha la gran potencia de las GPU para proporcionar un incremento
en el rendimiento del procesamiento de informacion.
2.3.1. Arquitectura de las GPU
Para poder entender de mejor manera que es lo que hace que una GPU tenga un
mayor rendimiento que unidad central de procesamiento o CPU (Central Processing
Unit), debemos de entender como funcionan y su principal diferencia.
Figura 2.2: Imagen ilustrativa del uso de la GPU y CPU. Fuente: www.nvidia.com
En la figura 2.2 se puede observar que ciertas partes del codigo que requieren un
uso intensivo para su procesamiento. Se puede observar que la GPU tiene una mayor
cantidad de nucleos (cuadros verdes), en cambio la CPU tiene una cantidad mucho
menor. Cada uno de estos nucleos es capaz de realizar una tarea independiente de la
10
otra. Es este hecho del que se aprovecha la computacion paralela mediante la utiliza-
cion de la GPU, para realizar una gran cantidad de calculos pequenos y ası aprovechar
de manera mas eficiente cada nucleo.
11