UNIVERSIDAD AFRO-AMERICANA DE ÁFRICA CENTRAL
Facultad de Ingenierías-Departamento de Informática
SISTEMAS DE TIEMPO REAL
Python
Machine Learning
MTR. SAMUEL ELA NSOGO NSA
PROFESOR/INGENIERO
Machine Learning
El Machine Learning es una técnica asociada a la detección automática de
patrones relevantes dentro de un conjunto de datos. En los últimos años, se
ha convertido en una herramienta muy común en prácticamente todas las
tareas que requieren extraer información a partir de grandes cantidades de
datos (Shalev-Shwartz & Ben-David, 2014). En el día a día, estamos rodeados
de tecnología basada en Machine Learning: el filtrado de correos
electrónicos, los sistemas de recomendaciones, la detección facial y el
reconocimiento del habla del smartphone, la previsión del tiempo
atmosférico o la consulta del tráfico en la carretera. También se emplea en
otros ámbitos como la medicina, el marketing, la logística o el mantenimiento
de equipos industriales.
Debido a la complejidad de todas estas aplicaciones, un ser humano no es
capaz de programar una serie de especificaciones concretas para la
realización de dichas tareas, sino que tiene que dotar a las propias
computadoras con la habilidad de aprender de la experiencia y de adaptarse
a las nuevas situaciones (Shalev-Shwartz & Ben-David, 2014). Por otro lado,
existen diferentes tipos de aprendizaje: el aprendizaje supervisado, el
aprendizaje no supervisado, el aprendizaje reforzado y el aprendizaje
profundo. Cada uno de ellos tiene unas características y unos algoritmos
determinados, por lo que se utilizarán unos u otros dependiendo del
problema.
Historia del Machine Learning
El Machine Learning se fundamenta en las matemáticas, la estadística y la
computación. Los desarrollos en computación no llegaron hasta la década de
1940, pero antes de ese momento hubo varios métodos y técnicas
matemáticas y estadísticas que sirvieron de base para lo que hoy se conoce
como Machine Learning: el Teorema de Bayes, el ajuste por Mínimos
Cuadrados y las Cadenas de Márkov. El Teorema de Bayes (1763) calcula la
probabilidad de un evento A dado otro evento B a partir de la probabilidad
del evento B dado A (Hayes, 2019). Esto quiere decir que, por ejemplo, si se
tienen tres líneas de producción y se conoce la probabilidad de que un
producto sea defectuoso habiéndose fabricado en la línea de producción A,
es posible conocer la probabilidad de que un producto defectuoso provenga
de la línea de producción A. El ajuste por Mínimos Cuadrados (1805) es una
técnica de optimización matemática que busca la función continua que mejor
se aproxime a una serie de datos según el criterio de mínimo error cuadrático
(Abdi, 2003). Por otra parte, la cadena de Márkov (1913) es un tipo de
proceso estocástico discreto en el que la probabilidad de que ocurra un
evento solo depende del evento inmediatamente anterior (Oxford
Dictionaries, 2019). En 1950, Alan Turing publicó un artículo titulado
‘Computación e Inteligencia’ en el que se preguntaba si las máquinas podían
pensar (González, 2018). Para ello propuso el imitation game, una prueba
consistente en una conversación escrita entre una persona y una máquina
por la cual la computadora se consideraba inteligente si la persona no era
capaz de distinguir si estaba hablando con una persona o con una máquina
(Marr, 2016). La primera red neuronal artificial fue creada por Marvin Minsky
y Dean Edmonds en 1951 bajo el nombre de SNARC (Stochastic Neural
Analog Reinforcement Computer), y su propósito era imitar a una rata a la
hora de aprender a salir de un laberinto. En 1952, Arthur Samuel escribió un
programa diseñado para aprender a jugar a las damas a partir de sus propios
errores. Más tarde, en 1957, Fran Rosenblatt diseña el Perceptron, una red
neuronal que reconocía caracteres de forma similar al de los sistemas
visuales biológicos (Marr, 2016). Pronto se vieron algunas de las limitaciones
del Perceptron, ya que su arquitectura de una única neurona solo permitía la
resolución de problemas lineales sin la posibilidad de extender el método de
aprendizaje a otras redes más complejas. Tras la publicación del libro
Perceptrons: an introduction to computational geometry (Minsky & Papert,
1969), que explicaba matemáticamente las limitaciones del perceptrón, hubo
un corte repentino en la financiación de proyectos de inteligencia artificial y,
en particular, de aquellos que involucraban redes neuronales. Este periodo de
más de quince años se conoce como el invierno de la inteligencia artificial,
que acabó gracias a la publicación Learning representations by back-
propagating errors (Rumelhart, Hinton, & Williams, 1986) por la cual se
mostraba experimentalmente el algoritmo para conseguir que una red
neuronal autoajustara sus parámetros a partir de sus errores:
Backpropagation (Santana, 2018). Diez años más tarde, en 1996, el
computador DeepBlue de IBM ganó una partida de ajedrez al vigente
campeón mundial (Marr, 2016). Al año siguiente, la nueva versión
DeeperBlue consiguió vencer todas las partidas (González, 2018). En 2006,
Geoffrey Hinton presentaba el concepto de Deep Learning o aprendizaje
profundo, basado en el concepto de Backpropagation, que permite que los
computadores distingan objetos y textos procedentes de imágenes y vídeos
(Marr, 2016). La compañía británica DeepMind Technologies, fundada en
2010 y adquirida por Google en 2014, logró desarrollar una red neuronal
capaz de aprender a jugar a videojuegos analizando únicamente el
comportamiento de los pixeles en la pantalla. En 2015, DeepMind creó un
algoritmo llamado AlphaGo, que venció a jugadores profesionales en el juego
de mesa chino Go, considerado el más complejo y difícil de anticipar (BBC,
2019). OpenAI es una compañía sin ánimo de lucro creada en 2015 y
dedicada a la investigación en inteligencia artificial para el bien de la
humanidad. En 2017, esta compañía despunta los avances en agentes
conversacionales o chatbots, así como en el mundo de los videojuegos (Marr,
2016). Actualmente, el término singularity está en boca de todos los
expertos. Este concepto es el resultado del crecimiento exponencial de las
capacidades cognitivas de la inteligencia artificial hasta el punto de igualar o
superar las del cerebro humano. Así, la inteligencia artificial crearía versiones
mejoradas de sí misma, llegando a tener a los humanos como esclavos.
Ciertos organismos estudian la probabilidad de que este escenario ocurra en
un futuro y, aunque no sea muy probable, sigue suponiendo un gran riesgo
para la raza humana (BBC, 2019).
Fundamentos del Machine Learning
En este apartado se presentan los fundamentos para comprender la forma en
la que las máquinas aprenden. Para ello, se explican los conceptos de función
de coste y de método del descenso del gradiente. A continuación, se
muestran los principales errores o problemas que surgen a la hora de realizar
un modelo de Machine Learning: la varianza (variance), el sesgo (bias), el
sobreajuste (overfitting) y el subajuste (underfitting). Por último, se explican
los pasos a seguir para desarrollar e implementar una solución con Machine
Learning.
El aprendizaje
El aprendizaje en un sistema de Machine Learning consiste en el ajuste de los
parámetros de un modelo en función de los datos recibidos. Este conjunto de
datos recibe el nombre de data set, el cual contiene variables tanto
independientes como dependientes. Las variables independientes (features)
son aquellas columnas del data set usadas por el algoritmo para generar un
modelo que prediga lo mejor posible las variables dependientes. Por otro
lado, las variables dependientes (labels) son las columnas del data set
resultado de una correlación entre variables independientes, por lo que
deben ser predichas por el modelo implementado (Esteve, 2017). La
programación clásica se entiende como un conjunto de reglas diseñadas por
una persona con el fin de obtener unas respuestas que cumplan dichas reglas
a partir de unos datos de entrada.
El Machine Learning, en cambio, se encarga de obtener el conjunto de reglas
más efectivas que relacionan los datos de entrada con las respuestas que
esperamos obtener a través del aprendizaje. La ventaja del Machine Learning
es que estas reglas pueden aplicarse a diferentes datos de entrada para
producir respuestas que han sido generadas automáticamente por lo que el
sistema aprendió y no por las instrucciones generadas por un humano
(Chollet, 2017).
La programación clásica frente al Mahine Learning
La programación tradicional es adecuada para tareas específicas y bien
definidas, como la resolución de problemas matemáticos o la ejecución de
tareas repetitivas.
Los programas tradicionales se basan en un conjunto de instrucciones
específicas que se escriben o codifican y se ejecutan en un orden
determinado.
En cambio, la IA utiliza algoritmos de aprendizaje automático que permiten
que los sistemas aprendan y se adapten a nuevos escenarios a medida que se
les presenta información adicional.
Como se presenta en la imagen anterior, un programa tradicional cuenta con
unas reglas de negocio establecidas según el propósito que estamos buscando,
contiene información de entrada (histórico de datos) y esta se procesa de
acuerdo a las reglas y nos arroja un resultado.
Por el otro lado, un proyecto de IA contiene datos de entrenamiento, que
validará si nuestro modelo es bueno, la cual basado en datos históricos se le
ha enseñado a través de decisiones o etiquetas para que tenga un marco de
referencia en el momento que procese nueva información y pueda arrojar
igualmente un resultado.
Algoritmo de machine learning (aprendizaje automático)
- Algoritmos de regresión
- Algoritmos de agrupación
- Algoritmos bayesianos
- Algoritmos de árbol de decisión
- Algoritmos de redes neuronales
- Algoritmos de Aprendizaje profundo
Algoritmos de regresión
Los algoritmos de regresión son un tipo de algoritmo de aprendizaje
automático que se utiliza para predecir valores numéricos basados en datos
de entrada. Los algoritmos de regresión intentan encontrar una relación entre
las variables de entrada y la variable de salida ajustando un modelo
matemático a los datos. El objetivo de la regresión es encontrar una relación
matemática entre las características de entrada y la variable objetivo que
pueda usarse para hacer predicciones precisas sobre datos nuevos e invisibles.
Existen muchos tipos diferentes de algoritmos de regresión, por lo que en ese
modulo solamente veremos la regresión lineal.
Regresión lineal: La regresión lineal es un algoritmo simple y ampliamente
utilizado. Asume una relación lineal entre las variables independientes y la
variable objetivo. El algoritmo estima los coeficientes de la ecuación lineal que
mejor se ajusta a los datos. La ecuación puede tener la forma: y= mx +c , donde
y es la variable objetivo, x es la característica de entrada, m es la pendiente y
c es la intersección.
Ejemplo: Las aplicaciones incluyen la predicción de precios de vivienda en
función de características como los metros cuadrados y el número de
habitaciones o la estimación de ventas en función del gasto en publicidad.
Algoritmos de agrupación
Los algoritmos de machine learning que son implementados para aprendizaje
no supervisado se encuentran los algoritmos de agrupación. Gracias a ellos
podemos agrupar las entidades en función de similitudes. Definido como un
problema de aprendizaje no supervisado que tiene como objetivo generar
datos de entrenamiento con un conjunto determinado de entradas, pero sin
ningún valor objetivo. Es el proceso de encontrar estructuras similares en un
conjunto de datos sin etiquetar para hacerlo más comprensible y
manipulable.
Revela subgrupos en los conjuntos de datos heterogéneos disponibles, de
modo que cada grupo individual tiene una mayor homogeneidad que el
conjunto. En palabras más simples, estos grupos son grupos de objetos
similares que difieren de los objetos de otros grupos.
En la agrupación, la máquina aprende los atributos y tendencias por sí misma
sin ningún mapeo de entrada-salida proporcionado. Los algoritmos de
agrupamiento extraen patrones e inferencias del tipo de objetos de datos y
luego crean clases discretas para agruparlos adecuadamente.
El uso de GRD ofrece muchas ventajas, ya que permite dar explicación a
variación en ingresos y costos de una manera lógica y detallada.
Los Grupos Relacionados por el Diagnóstico (GRD) son algoritmos de
agrupación de pacientes que ayudan a la gestión clínica y a la gestión
financiera de hospitales y centros de atención sanitaria, cuya validez ha sido
reconocida a nivel internacional. En los últimos años, estos algoritmos han
adquirido gran relevancia en distintos países de América Latina.
Algoritmos bayesianos
Los algoritmos de machine learning conocidos como bayesianos reciben esta
denominación porque están basados en el teorema de bayes. Dentro de su
funcionamiento realizan clasificaciones de cada valor como independiente de
cualquier otro. Esto permite predecir con mucha efectividad una clase o
categoría dentro de un conjunto dado de características mediante modelos
probabilísticos. La imagen destacada es la ecuación – con P (A | B) es
probabilidad posterior, P (B | A) es probabilidad, P (A) es probabilidad previa
de clase, y P (B) predictora probabilidad previa.
Algoritmos de árbol de decisión
Los árboles de decisión son implementados como algoritmos de machine
learning debido a que, al ser similares a un diagrama de flujo, utilizan un
método determinado de cruce para representar los posibles resultados que
ocasionaría la toma de una decisión. En estos modelos cada nodo representa
una prueba en una variable específica y las ramas muestran los resultados
que deja dicha prueba como producto.
Desde el punto de vista de la toma de decisiones empresariales, un árbol de
decisiones es el número mínimo de preguntas sí / no que uno tiene que
hacer, para evaluar la probabilidad de tomar una decisión correcta, la
mayoría del tiempo. Este método le permite abordar el problema de una
manera estructurada y sistemática para llegar a una conclusión lógica.
Algoritmos de redes neuronales
Una red neuronal está estructurada como el cerebro humano y consta de
neuronas artificiales, también conocidas como nodos. Estos nodos están
apilados uno al lado del otro en tres capas:
- La capa de entrada
- Las capas ocultas
- La capa de salida
Los datos proporcionan a cada nodo información en forma de entradas. El
nodo multiplica las entradas con pesos aleatorios, las calcula y agrega un
sesgo. Finalmente, se aplican funciones no lineales, también conocidas como
funciones de activación, para determinar qué neurona activar.
Aprendizaje profundo
En los últimos años ha emergido un área específica del Machine Learning
llamada Deep Learning o Aprendizaje Profundo, que se basa en algoritmos de
aprendizaje en múltiples niveles de representación y de abstracción con el fin
de modelar relaciones más complejas entre los datos. Los niveles se
corresponden con distintos niveles de conceptos, donde los más altos vienen
definidos por los más bajos de forma jerárquica. Esta idea de
representaciones sucesivas por capas es lo que da el nombre de “profundo” a
este tipo de aprendizaje, siendo la profundidad del modelo el número de
capas que contiene (Deng & Yu, 2013).
En Deep Learning, estas representaciones por capas forman una Red
Neuronal (Neural Network) que, al fin y al cabo, es un conjunto estructurado
de neuronas. Estos términos provienen de la neurobiología ya que estas
redes se inspiran en el funcionamiento del cerebro. Las capas están formadas
por un número determinado de neuronas, donde cada neurona recibe
información de la capa anterior por medio de estímulos externos a través de
sus conexiones de entrada. Las neuronas realizan cálculos internamente y
devuelven un valor de salida que se transmite a las neuronas de la capa
siguiente. En la última capa, la salida es la predicción buscada (Chollet, 2017).
Arquitectura básica de una red neuronal
Sin embargo, para llegar a una buena predicción, la red debe ser capaz de
minimizar el error entre la predicción y el valor esperado mediante el
autoajuste de los parámetros del modelo. La neurona asigna un peso (w) a
cada una de sus variables de entrada (x) para reflejar la intensidad con la que
cada variable afecta a la salida (Villanueva, 2019).
Tras calcular la combinación lineal de los pesos y las entradas, se aplica una
función de activación (∅) cuyo objetivo es distorsionar la salida (y), es decir,
hacerla no lineal para que la red pueda resolver problemas no lineales
(Villanueva, 2019).
Algunas de las funciones de activación más usadas en redes neuronales son
la función escalón, la función sigmoide, la función rectificadora lineal y la
función tangente hiperbólica (Villanueva, 2019).
Funciones de activaciones más usadas
Una representación esquemática de la neurona se muestra en la siguiente
figura:
Representación esquemática de una neurona
ackpropagation (propagación hacia atrás) es el mecanismo por el cual las
redes neuronales aprenden, transmitiendo información sobre el error desde
las últimas capas hasta las primeras y modificando así sus parámetros. Por lo
tanto, la red neuronal sabe el peso o la influencia que ha tenido cada
neurona en ese resultado erróneo. El problema de este mecanismo es que el
error se va diluyendo a medida que se propaga entre capa y capa, así que en
redes muy profundas solo se entrenan las últimas capas mientras que las
primeras apenas sufren cambios (Chollet, 2017; Deng & Yu, 2013).
La ventaja del aprendizaje en Deep Learning es que permite que todas las
capas del modelo aprendan al mismo tiempo, en lugar de sucesivamente.
Cuando el modelo ajusta un parámetro, el resto de los parámetros que
dependen de él se ajustan automáticamente. De esta forma, todo está
supervisado bajo una única señal de realimentación (Chollet, 2017).
Otras propiedades importantes que hacen del Deep Learning una revolución
en el mundo de la inteligencia artificial son la simplicidad, la escalabilidad y la
versatilidad. La simplicidad se debe a la automatización del feature
engineering, esto es, el proceso de creación de características que tanto
tiempo y esfuerzo supone en las etapas previas al desarrollo de un modelo.
La escalabilidad permite trabajar con conjuntos de datos de diferentes
tamaños, mientras que la versatilidad hace que algunos modelos ya
entrenados se puedan emplear para otros propósitos (Chollet, 2017).
El Deep Learning se emplea para una gran cantidad de aplicaciones, como
por ejemplo la identificación de clientes potenciales para una empresa, el
análisis de imágenes y datos médicos para predecir enfermedades, la
detección y prevención de amenazas en tiempo real en el ámbito de la
ciberseguridad, la generación de textos y el procesamiento del lenguaje, o la
identificación de varios objetos en imágenes y vídeos.
Existen múltiples tipos de redes neuronales, cada una diseñada para unos
usos específicos y distintos niveles de complejidad. Escoger un tipo u otro
depende también del tipo de datos con los que se va a trabajar. No obstante,
el objetivo de todas ellas es encontrar patrones en los datos para llevar a
cabo una tarea concreta como puede ser la clasificación, el agrupamiento o la
predicción de un valor (Dormehl, 2019). A continuación, se explican tres tipos
de redes neuronales: las Convolutional Neural Networks, las Recurrent Neural
Networks y las Generative Adversarial Networks.
Convolutional Neural Networks
Una Red Neuronal Convolutiva (Convolutional Neural Network, CNN) es un
algoritmo de Deep Learning empleado normalmente para clasificar imágenes
y agruparlas en función de sus características. Las CNN realizan el
reconocimiento óptico de caracteres (Optical Caracter Recognition, OCR) para
digitalizar texto y posibilitar el procesamiento del lenguaje natural. Se aplican
también en la identificación de sonidos a través de espectrogramas
(Krizhevsky, Sutskever, & Hinton, 2012; Saha, 2018).
Los avances en visión artificial aplicados a los coches autónomos, a los
drones, a la seguridad o a los diagnósticos médicos han aumentado mucho
en los últimos años gracias al reconocimiento de imágenes a través de las
CNN. La ventaja principal de las CNN frente a otros sistemas de identificación
de imágenes es la capacidad de aprender los filtros necesarios para pre-
procesar la imagen (automated feature engineering), en lugar de realizarlo
manualmente (Fernández, 2018; Saha, 2018).
El objetivo de una CNN es reducir las imágenes para facilitar su procesado sin
perder información crítica. Para ello, lo primero es aplicar capas convolutivas
para detectar los patrones en los datos que proporciona la imagen. Un filtro
en las primeras capas convolutivas de la red se encarga de extraer las
características de menor nivel, mientras que en las capas posteriores se
extraen características de mayor nivel con el fin de obtener una red que
permita comprender la totalidad de la imagen. Pueden aplicarse varios filtros,
donde cada uno de ellos detecta tipos diferentes de patrones. El paso o stride
es la cantidad de pixeles que recorre un filtro en cada iteración. El número de
filtros empleados equivale a la profundidad de la CNN (Krizhevsky, Sutskever,
& Hinton, 2012; Saha, 2018).
Arquitectura general de CNN
Las CNN tienen múltiples capas que procesan y extraen características de los
datos:
Capa de convolución
CNN tiene una capa de convolución que tiene varios filtros para realizar la
operación de convolución.
Unidad lineal rectificada (ReLU)
Las CNN tienen una capa ReLU para realizar operaciones sobre elementos. El
resultado es un mapa de características rectificado.
Capa de agrupación (Pooling)
El mapa de características rectificado luego se alimenta a una capa de
agrupación. La agrupación es una operación de muestreo descendente que
reduce las dimensiones del mapa de características.
Luego, la capa de agrupación convierte las matrices bidimensionales
resultantes del mapa de características agrupadas en un vector lineal único,
largo y continuo aplanándolo.
Capa completamente conectada
Se forma una capa completamente conectada cuando la matriz aplanada de
la capa de agrupación se alimenta como entrada, lo que clasifica e identifica
las imágenes.
Recurrent Neural Networks
Las redes neuronales recurrentes (RNN) son un tipo de red neuronal artificial
diseñada para procesar secuencias de datos. Funcionan especialmente bien
para trabajos que requieren secuencias, como datos de series temporales,
voz, lenguaje natural y otras actividades.
RNN funciona según el principio de guardar la salida de una capa particular y
enviarla a la entrada para predecir la salida de la capa.
A continuación, se muestra cómo puede convertir una red neuronal de
avance en una red neuronal recurrente:
Red neuronal recurrente
Los nodos de diferentes capas de la red neuronal se comprimen para formar
una única capa de redes neuronales recurrentes. A, B y C son los parámetros
de la red.
"x" es la capa de entrada, "h" es la capa oculta e "y" es la capa de salida. A, B
y C son los parámetros de red utilizados para mejorar el resultado del
modelo. En cualquier momento t, la entrada actual es una combinación de
las entradas en x(t) y x(t-1). La salida en cualquier momento dado se devuelve
a la red para mejorarla.
Red neuronal recurrente completamente conectada
Funcionamiento de la red neuronal recurrente:
La capa de entrada 'x' recibe la entrada de la red neuronal, la procesa y la
pasa a la capa intermedia.
La capa intermedia 'h' puede constar de múltiples capas ocultas, cada una
con sus propias funciones de activación, pesos y sesgos.
Generative Adversarial Networks
Una Red Generativa Adversaria (Generative Adversarial Network, GAN) es un
tipo de algoritmo de Deep Learning capaz de aprender a generar nuevos
conjuntos de datos, habitualmente imágenes. Estas redes están formadas, a
su vez, por dos redes: una generadora y otra discriminadora. La generadora
realiza un proceso llamado de convolución, pues genera una imagen a partir
de un vector de números, es decir, al contrario que las CNN. Por otro lado, la
discriminadora es la que se alimenta con imágenes reales para clasificar la
imagen generada como verdadera o falsa (Goodfellow, 2014; Martínez,
2019). El esquema de una GAN se muestra en la siguiente figura:
Esquema de una GAN
Las redes generadora y discriminadora son adversarias, ya que su mecanismo
de aprendizaje es como un juego en el que ambas compiten por mejorar. La
red generativa aprende las razones por las cuales la red discriminadora ha
rechazado su imagen, y actúa en consecuencia para generar imágenes más
realistas. El problema de las GAN es que, además de generar imágenes de
baja resolución, el aprendizaje es lento e inestable (Goodfellow, 2014;
Martínez, 2019).
No obstante, en la publicación de NVIDIA titulada “Progressive Growing of
GANs for Improved Quality, Stability, and Variation” (Karras, Aila, Laine, &
Lehtinen, 2018), se demuestran los resultados de aplicar un aprendizaje
adaptativo a las GAN. Esto supone comenzar el aprendizaje generando
imágenes de baja resolución e ir aumentando la calidad de la imagen a
medida que la red va adquiriendo cierto nivel de conocimiento. En
consecuencia, la imagen realiza un ajuste más fino en las últimas fases del
aprendizaje, reduciendo así los tiempos y el poder de cómputo. Algunos
ejemplos de rostros generados automáticamente por esta GAN se muestran
en la siguiente figura:
Ejemplos de rostros generados por una GAN
En un estudio realizado por la Universidad de Berkeley (Zhu, Park, Isola, &
Efros, 2018) se presenta un tipo de GAN llamado CYCLEGAN, cuyo objetivo es
transformar cualquier imagen de un estilo a otro. Mediante aprendizaje no
supervisado, se alimenta a la red con imágenes de un mismo estilo. La red
detecta las características de ese estilo y lo aplica a las imágenes que se
introduzcan posteriormente en la red. Para ello se crea un ciclo formado por
dos GAN: la primera traduce la imagen al estilo deseado, y la segunda realiza
la traducción en sentido inverso para verificar que el resultado es válido
Figura:
Transformaciones en una CYCLEGAN
Herramientas y librerías de Machine Learning en Python
Python se ha convertido en uno de los lenguajes de programación más
populares para el desarrollo de aplicaciones de Machine Learning. Esto se
debe a una combinación de factores, incluyendo sus características, facilidad
de uso y el amplio ecosistema de herramientas y librerías de Python para
análisis de datos y visualización.
Además, Python cuenta con una amplia variedad de librerías de Machine
Learning de código abierto, como Scikit-learn, TensorFlow y Keras, que
facilitan la creación de modelos de Machine Learning de alta calidad con una
variedad de algoritmos y técnicas de aprendizaje automático.
Las herramientas y librerías básicas útiles para el desarrollo de aplicaciones
de Machine Learning en Python. A continuación, voy a citar algunas de las
más comunes.
- NumPy es una librería de Python que se utiliza para trabajar con arrays
multidimensionales y matrices, y proporciona una gran cantidad de
funciones matemáticas para operar con ellos. Es una herramienta
básica de Python para el procesamiento de datos numéricos y se utiliza
ampliamente en la creación de modelos de Machine Learning.
- Pandas es una librería de Python que se utiliza para la manipulación y
análisis de datos en Python. Es útil para la limpieza de datos, la unión
de conjuntos de datos, el filtrado y la agregación de datos, y la
transformación de datos para su uso en modelos de Machine Learning.
- Matplotlib es una librería de Python que se utiliza para crear
visualizaciones y gráficos de datos en Python. Es útil para visualizar
conjuntos de datos y patrones de datos para ayudar a comprender los
datos y ajustar los modelos de Machine Learning.
- SciPy es una librería de Python que se utiliza para el procesamiento de
señales, la optimización y la resolución de problemas numéricos.
Proporciona una gran cantidad de funciones y herramientas para la
creación de modelos de Machine Learning y la resolución de
problemas numéricos.
- Scikit-Learn es una librería de aprendizaje automático de Python que
se utiliza ampliamente en la industria. Proporciona herramientas y
funcionalidades para la selección de características, la validación, la
selección y la implementación de modelos de Machine Learning en
Python.
- TensorFlow es una librería de aprendizaje automático de código
abierto desarrollada por Google. Se utiliza ampliamente para la
creación de modelos de Deep Learning y para la implementación de
redes neuronales.
- Keras es una librería de Deep Learning de alto nivel que se ejecuta
sobre TensorFlow y proporciona una interfaz de programación de
aplicaciones (API) fácil de usar para la creación de modelos de redes
neuronales. Keras y tensorflow poseen tres formas para implementar
arquitecturas de redes neuronales: Modelo secuencial, API funcional y
modelo subclase.
- PyTorch es una librería de aprendizaje automático de código abierto
desarrollada por Facebook. Se utiliza ampliamente para la creación de
modelos de Deep Learning y para la implementación de redes
neuronales.
Ejemplo:
Conversión de temperatura: Conversión de Celsius a Fahrenheit aplicando
programación tradicional y aprendizaje automático.
Formula o algoritmo para la conversión de escalas de temperatura de grado
Celsius a Fahrenheit:
Aplicando programación tradicional obtendremos lo siguiente:
El código python funcional del algoritmo se puede observar a continuación:
La programación tradicional es adecuada para tareas específicas y bien
definidas, como la resolución de problemas matemáticos o la ejecución de
tareas repetitivas.
Los programas tradicionales se basan en un conjunto de instrucciones
específicas que se escriben o codifican y se ejecutan en un orden
determinado.
Como se presenta en la imagen anterior, un programa tradicional cuenta con
unas reglas establecidas según el propósito que estamos buscando, contiene
información de entrada y esta se procesa de acuerdo a las reglas y nos arroja
un resultado.
En cambio, la IA utiliza algoritmos de aprendizaje automático que permiten
que los sistemas aprendan y se adapten a nuevos escenarios a medida que se
les presenta información adicional.
A continuación, se ilustra un ejemplo de una tabla que cuenta con siete
ejemplos y muestra los resultados en grados Celsius y los resultados
correspondientes en Fahrenheit. Lograremos eso con una red neuronal.
Voy a empezar a construir la red neuronal simple:
A continuación, se puede apreciar el funcionamiento interno de una red
neuronal simple:
Entrada = 15
Peso = 1.8
Sesgo = 4.5
El sesgo es la tendencia de un modelo de machine learning para hacer
predicciones inexactas o injustas porque hay errores sistemáticos en el
modelo de ML o en los datos utilizados para entrenar el modelo.
En escenarios complejos utilizaremos redes con muchas capas miles de
neuronas, millones de conexiones.
Nuestro modelo actual queda de la siguiente forma:
Al comenzar los valores del peso y el sesgo se inician de forma aleatoria, al
inicializar la red se genera totalmente aleatoria.
Etapa 1:
Etapa 2:
Etapa 3:
Por ejemplo, si queremos convertir 15 grados Celsius a grados Fahrenheit
obtendremos lo siguiente:
Por lo tanto, la red neuronal por de momento predice 15 grados Celsius son
26.5 grados Fahrenheit.
Las redes neuronales ajustan automáticamente los pesos y sesgos para
después podrá hacer predicciones lo más acertada posibles, para lograrlo la
red va tomar todos esos datos de entrada que yo le di y por cada uno va
hacer la predicción.
Desde Google colab voy entrenar el modelo, colab es una herramienta que
nos permite escribir y ejecutar código arbitrario de Python en el navegador.
Es ideal para aplicarlo en aprendizaje automático, análisis de datos sin tener
que hacer ningún tipo de instalación adicional.
Volvemos en el flujo de nuestra red
Si hacemos la comparación con la formula inicial:
Analizando podemos observar que: 1.798 es prácticamente 1.8 y 31.9 es
prácticamente 32 por lo tanto, la red sin realizar la fórmula podemos llegar al
siguiente resultado que es prácticamente exacto.
En este escenario especifico que se trata de una función lineal y podemos
observar que la fórmula de conversión aplica perfectamente con esa pequeña
red, hace primero una multiplicación y luego una suma.
Un problema más complejo no podríamos resolverlo con una red tan simple.
Voy a resolver el mismo problema añadiendo más capas y más neuronas a la
red, es decir voy a añadir dos capas intermedias con tres neuronas para
aplicar el mismo proceso.
Con esa estructura obtendremos el siguiente código python en Google colab:
Exportar desde python- Google colab e importar para integrarlo en una
página web para poder hacer predicciones en tiempo real con javascript.
Arquitectura:
Con python y tensorflow diseñamos y entrenamos los modelos, una vez que
ya tenemos la red entrenada podemos exportarla e integrarlo en la página
web.
Desde Google colab podemos descargar los archivos .bin y [Link]
Una vez descargado los archivos necesarios, a continuación, voy integrarlos
en mi carpeta de mi proyecto [Link].
El codigo final html:
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" type="image/png" sizes="32x32" href="favicon-
[Link]">
<link rel="icon" type="image/png" sizes="16x16" href="favicon-
[Link]">
<title>Celsius a Fahrenheit</title>
<link
href="[Link]
.css" rel="stylesheet" integrity="sha384-
EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC"
crossorigin="anonymous">
<style>
#resultado {
font-weight: bold;
font-size: 1.2rem;
text-align: center;
}
</style>
</head>
<body>
<main>
<div class="px-4 py-2 my-2 text-center border-bottom">
<img class="d-block mx-auto mb-2" src="[Link]"
alt="" width="80" height="80">
<h1 class="display-5 fw-bold">Celsius a Fahrenheit</h1>
<div class="col-lg-6 mx-auto">
<p class="lead mb-0">Conversión de grados celsius a fahrenheit
utilizando [Link]</p>
</div>
</div>
<div class="b-example-divider"></div>
<div class="container mt-5">
<div class="row">
<div class="col-12 col-md-4 offset-md-4">
<form>
<div class="mb-3">
<label for="celsius" class="form-label">Grados Celsius:
<span id="lbl-celsius">0</span></label>
<input type="range" class="form-range" min="-200"
max="200" id="celsius" oninput="cambiarCelsius()">
<div class="form-text">Desliza para cambiar el valor de
grados celsius</div>
</div>
<div class="mb-3">
<label for="celsius" class="form-label">Resultado</label>
<div id="resultado">
0 grados celsius son 32 grados fahrenheit
</div>
</div>
</form>
</div>
</div>
</div>
<div class="b-example-divider"></div>
<div class="bg-dark text-secondary mt-5 px-4 py-2 text-center">
<div class="py-5">
<h1 class="display-5 fw-bold text-white">Sistemas de tiempo
real</h1>
<div class="col-lg-6 mx-auto">
<p class="fs-5 mb-4">Aprende machine learning con python</p>
</div>
</div>
</div>
<div class="b-example-divider mb-0"></div>
</main>
<script
src="[Link]
[Link]" integrity="sha384-
MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM"
crossorigin="anonymous"></script>
<script
src="[Link]
</script>
<script type="text/javascript">
var modelo = null;
//Cargar modelo
(async () => {
[Link]("Cargando modelo...");
modelo = await [Link]("[Link]");
[Link]("Modelo cargado...");
})();
function cambiarCelsius() {
var celsius = [Link]("celsius").value;
//[Link]("resultado").innerHTML = celsius + "
celsius son " + [Link](4.234556789)+ " fahrenheit!";
[Link]("lbl-celsius").innerHTML=celsius;
if (modelo != null) {
var tensor = tf.tensor1d([parseFloat(celsius)]);
var prediccion = [Link](tensor)
//[Link]("My oredict ....."+prediccion);
var prediccion = [Link](tensor).dataSync();
prediccion = [Link](prediccion,1);
//alert(prediccion)
[Link]("resultado").innerHTML = celsius + "
celsius son " + prediccion + " fahrenheit!";
} else {
}
}
</script>
</body>
</html>
Desde el terminal de VSCode voy a ejecutar el servidor en el puerto 4000
mediante los siguientes comandos:
python -m [Link] 4000
finalmente, para hacer predicciones en tiempo real ingresamos la siguiente
url: [Link]
Podemos observar las predicciones en tiempo real de nuestro modelo y con
los resultados esperados.
Bibliografía:
[Link]
autom%C3%A1tico-ai/
[Link]
[Link]
[Link]
[Link]
[Link]
[Link]
[Link]
with-tf-keras/
[Link]
[Link]
[Link]
[Link]
learning-en-python/
[Link]
[Link]
python/