• GitHub
  • Facebook
  • LinkedIn
  • Instagram
  • Youtube

Buscar




Costo computacional - Mi investigación

En Verano de 2018 estuve haciendo una investigación sobre "Comparativa de costo tiempo - espacio de 6 implementaciones de algoritmos en Python, de machine learning para análisis de sentimientos" que básicamente es una comparación de 6 de algoritmos usados para realizar estudios de mercado, esto es para saber cuáles son más convenientes de implementar.


De acuerdo con una investigación conducida por el Social Media Examiner en 2015, "El 96% de los propietarios / publicistas de pequeñas empresas usan el marketing en redes sociales, y el 92% de ellos está de acuerdo o muy de acuerdo con la frase: 'El marketing en redes sociales es importante para mi negocio'".


El análisis del sentimiento puede ser muy útil porque ayuda a las empresas a destacar entre la multitud de competidores para llamar la atención de los clientes. Es muy útil en los siguientes aspectos: optimiza la calidad del producto conociendo la opinión de los consumidores, permite optimizar las estrategias de las campañas de publicidad además de medir su efectividad y, por si fuera poco, brinda información útil para la toma de decisiones durante una crisis y así poder manejarla. 

Como el Big Data se encuentra en el auge, para realizar éstos estudios de mercado se utilizan Bases de Datos muy, muy grandes por lo que cada algoritmo tiene un consumo diferente dependiendo de la cantidad de información que procesa.

El análisis de sentimientos en pocas palabras es poder distinguir si una reseña es buena o mala para así poder conocer la reputación de un producto, una película, etc.


Utilizando un repositorio público de datos, el cual consiste de 10,000 reseñas de películas clasificadas como buenas o malas, se extraen los adverbios de cada reseña y se toman como referencia los 5000 más usados; luego se crea un set de datos analizando individualmente cada reseña y extrayendo solo las palabras más usadas de ésta y poniéndole su clasificación (positivo o negativo). Una vez concluido todo este proceso se guarda dicho set de datos como un objeto binario que se puede reutilizar en todas las pruebas, evitando así perder tiempo en volver a tratar las reseñas para cada implementación y asegurándonos que se utilizan exactamente los mismos datos en el mismo orden.


Después se entrena un modelo computacional implementando 6 algoritmos (Naive Bayes, Multinomial Naive Bayes, Bernoulli Naive Bayes, Logistic Regression, Stochastic Gradient Descent y Linear Support Vector Classification) utilizando 1,000, 3,000, 7,000, y 10,000 registros de los datos preprocesados, y se mide la memoria y el tiempo que consumió cada implementación. Se toma el 90% de los datos de la muestra para entrenar el modelo y el 10% para medir la confianza. 


Para sacar el tiempo en segundos, se utiliza la librería timeit, específicamente la función “timeit.time”; se ejecuta 10 veces cada algoritmo y se saca un promedio. Se deshabilita el garbage collector, porque también consume tiempo, y se mide el tiempo de CPU, no el tiempo natural. 


print(mean(timeit.repeat(lambda: NaiveBayes(), number=1, repeat = 10)))

Aquí podemos ver cómo colocar un medidor de tiempo a la función "NaiveBayes()", lo que hace es repetir 10 veces esa función midiendo el tiempo que tardó y se promedian esos resultados para dar una respuesta lo más acertada posible.


Para sacar la memoria en MB se utiliza la librería “memory_profiler” al momento de llamar el script desde la terminal y se coloca la cabecera “@profile” a cada función de la cual medimos la memoria, se corren 5 veces cada algoritmo por separado y luego se promedia el resultado de la medición, esto es para evitar que se quede en la memoria algún residuo del algoritmo anterior. 
@profile
def BernoulliNaiveBayes(training_set):
BernoulliNB_classifier = SklearnClassifier(BernoulliNB())
BernoulliNB_classifier.train(training_set)
return BernoulliNB_classifier
 Aquí podemos ver cómo medí la función de entrenamiento del clasificador "BernoulliNB()"

#!/bin/bash

script -c "python3 -m memory_profiler ./BernoulliNB.py && 
python3 -m memory_profiler ./BernoulliNB.py " pruebaMemoria.txt
 Para sacar el resultado final, se imprimen los resultados del tiempo y se guardan en el archivo "pruebaMemoria.txt"; como ejemplo solo puse 2 resultados, pero en las pruebas originales si hice las 5 mediciones y lo promedié con la calculadora.


Para sacar la confianza en porcentaje, se entrena el modelo una sola vez y se compara con el 10% de la muestra de datos.


Muestra
1,000
3,000

Tiempo
Memoria
Confianza
Tiempo
Memoria
Confianza
Naive Bayes
7.7954
10.336 MiB
61.0
23.8049
10.348 MiB
64.6666
Multinomial NB
3.2346
1.617 MiB
61.0
9.3668
1.781 MiB
65.0
Bernoulli NB
3.2362
1.051 MiB
57.9999
9.3900
1.484 MiB
64.3333
Logistic Regression
3.2318
1.762 MiB
60.0
9.4182
1.430 MiB
67.0
SGD
3.3007
1.699 MiB
65.0
9.5515
1.066 MiB
61.0
Linear SVC
3.2260
1.051 MiB
65.0
9.3545
1.066 MiB
63.0


Muestra
7,000
10,000

Tiempo
Memoria
Confianza
Tiempo
Memoria
Confianza
Naive Bayes
55.6481
10.387 MiB
71.2857
80.5001
10.375 MiB
71.3999
Multinomial NB
21.5987
1.824 MiB
71.2857
33.4
2.242 MiB
71.8
Bernoulli NB
21.6255
1.816 MiB
71.7142
33.3727
2.617 MiB
72.1
Logistic Regression
21.5813
2.555 MiB
68.7142
33.380
3.641 MiB
71.1
SGD
21.8636
1.805 MiB
67.1428
33.8191
2.121 MiB
70.0
Linear SVC
21.4938
2.129 MiB
68.8571
33.3549
3.094 MiB
69.1999





Contacto

Envíame un correo


¡Contáctame!

Name

Email *

Message *

Email

galdana5190@gmail.com