+ All Categories
Home > Documents > Entrega Memoria 1

Entrega Memoria 1

Date post: 13-Nov-2023
Category:
Upload: independent
View: 0 times
Download: 0 times
Share this document with a friend
21
Universidad de los Andes Facultad de Ingenier ´ ıa y Ciencias Aplicadas OPTIMIZACI ´ ON DEL TIEMPO DE PROCESOS PARA SUPPORT VECTOR MACHINES MEDIANTE PARALELIZACI ´ ON PARA PROBLEMAS DE MINER ´ IA DE DATOS MAT ´ IAS BENAVENTE ESCAND ´ ON Memoria para optar al t´ ıtulo de Ingeniero Civil Industrial menci´ on Gesti´ on de Operaciones Profesor Gu´ ıa: SEBASTI ´ AN ALEJANDRO MALDONADO ALARC ´ ON ING-IN-001/11 Santiago, Diciembre de 2015
Transcript

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.

-

c© MATIAS BENAVENTE ESCANDON 2015

Todos los derechos reservados.

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

Agradecimientos

Agradecimientos

v

Dedicatoria

vi

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

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

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

Bibliografıa

Panagiotis, M. & Konstantinos, M. (2013). Accelerating Kernel Density Estimation

on the GPU Using the CUDA Framework. In Applied Mathematical Sciences,

volume 7 (pp. 1447–1476). Florina 53200, Greece: HIKARI Ltd.

12


Recommended