Demo
En el área de Machine Learning (Aprendizaje Automático), se suelen utilizar modelos para determinadas tareas como las predicciones, este tutorial es para iniciar o para los que se inician en el trabajo con TensorFlow, para poder trabajar en este proyecto debes saber el Lenguaje de Programación Python, terminado este tutorial, podrás crear modelos más complejos en TensorFlow, vamos con este tutorial.
Partes
- Parte 1
- Parte 2 (Final – Código Fuente en GitHub)
Antes de continuar te invito a leer los siguientes artículos:
- Que es Machine Learning, Historia y otros detalles
- Que es TensorFlow y Otros Detalles
- 5 Buenas Prácticas de Machine Learning para Desarrolladores en Python
- Tendencias que se darán en Machine Learning este 2020
- Como esta presente la Inteligencia Artificial y el Machine Learning en nuestra vida cotidiana
- Como utilizan estas 5 Grandes Empresas el Aprendizaje Automático (Machine Learning)
- Conceptos del Trabajo con Material Design y Machine Learning en Android – Parte 1
- Creando una Aplicación Android que responda ante comandos de Voz mediante Inteligencia Artificial y Machine Learning – Parte 1
Asimismo te invito a escuchar el Podcast: “Razones Por Las Cuales Te Cuesta Aprender A Programar”:
Spotify: | Sound Cloud: |
Bien ahora continuemos con el Post: Creando Nuestro Primer Modelo de Machine Learning (Aprendizaje Automático) con TensorFlow – Parte 1.
TensorFlow es un servicio que nos permite trabajar con Machine Learning y hacer predicciones mediante modelos, existen varias herramientas que nos permiten trabajar con TensorFlow, yo usaré Jupyter Notebook con el Lenguaje de Programación Python.
Proyecto
Mi proyecto va ser el siguiente, supongamos que un cliente, el cual es dueño de una plataforma en línea para ver series, películas, documentales, novelas, etc., similar a Netflix, me proporciona el monto que gasto en marketing en determinados últimos 6 meses junto con la cantidad de suscriptores que gano para su plataforma.
Mes | Monto invertido en Marketing | Suscriptores ganados |
Febrero | $ 70 | 177 |
Marzo | $ 85 | 209 |
Abril | $ 96 | 234 |
Mayo | $ 45 | 84 |
Junio | $ 50 | 158 |
Julio | $ 35 | 92 |
Puedes ver en la tabla anterior que existe una relación o lógica entre el monto invertido y los suscriptores que se ganaron para la plataforma del cliente similar a Netflix, cuando se invierte un monto mayor en marketing, aumenta la cantidad de suscriptores.
Y lo que me pide el cliente es encontrar esta relación o lógica entre el monto invertido en marketing y la cantidad de suscriptores ganados para la plataforma, para hacer esto haremos uso de Machine Learning (Aprendizaje Automático).
Preparando los datos
Comenzaré importando TensorFlow, NumPy y Matplotlib
1 2 3 4 5 6 7 8 9 |
#TensorFlow import tensorflow as tf tf.logging.set_verbosity(tf.logging.ERROR) # NumPy y Matplotlib import numpy as np import matplotlib.pyplot as plt |
Ahora usaré los datos que me entrego el cliente, estos datos son los montos invertidos por mes y los suscriptores ganados a su plataforma similar a Netflix y para verificar si estoy leyendo los datos, los imprimo en texto.
1 2 3 4 5 6 7 8 9 |
# datos monto_invertido = np.array([70, 85, 96, 45, 50, 35], dtype = float) suscriptores_ganados = np.array([177, 209, 234, 84, 158, 92], dtype = float) # Imprimimos los datos en texto para verificar for i,c in enumerate(monto_invertido): print("{} Monto Invertido = {} Suscripores Ganados".format(c, suscriptores_ganados[i])) |
Ahora crearé un gráfico haciendo uso de Matplotlib, mediante este gráfico podré comprender la relación entre las variables monto_invertido y suscriptores_ganados.
1 2 3 4 5 6 7 8 9 |
# Creamos un gráfico con los datos del cliente plt.scatter(monto_invertido, suscriptores_ganados) plt.xlim(0,105) plt.ylim(0,245) plt.xlabel('Monto Invertido') plt.ylabel('Suscripores Ganados') plt.show() |
Luego de ejecutar el código anterior, obtengo mi gráfico con los datos respectivos.
En el gráfico anterior puedes ver que al inicio la linea de puntos no es recta y al cuarto mes recién la línea empieza a ser recta, esto quiere decir que en los primeros meses durante el marketing, podrían haber estado probando y buscando el camino correcto en la publicidad, para luego en el cuarto mes lograr que se encamine de manera lineal el marketing.
Ahora voy a separar los datos en datos de entrenamiento y de prueba, haré uso de scikit-learn que nos permite hacer análisis predictivo de los datos del cliente, los métodos y elementos que usaré son de scikit-learn.
Los datos de entrenamiento se utilizan para entrenar a nuestro modelo y los datos de prueba los mantendremos por separado y luego los usaremos para verificar el rendimiento de nuestro modelo al comparar la etiqueta real de nuestros datos de prueba con la etiqueta predicha por nuestro modelo para los datos de prueba.
1 2 3 4 5 6 |
# Separamos los datos, en datos de entrenamiento y de prueba from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(monto_invertido, suscriptores_ganados, random_state = 42, train_size = 0.8, test_size = 0.2) |
Modelo
Paso seguido crearé mi modelo, este modelo lo haré lo mas simple posible, lo importante es que logre su cometido, ya que el problema no es tan complicado, esta red solo requerirá de una capa con una sola neurona.
Voy a construir una capa con el nombre de capa_a, esta capa la crearé instanciando tf.keras.layers.Dense utilizando la siguiente configuración:
input_shape=[1]
Con este elemento especificamos que la entrada a esta capa sea un valor único, esto quiere decir que la forma es una matriz unidimensional con un miembro, ya que esta es la primer y única capa, la forma de entrada es la forma de entrada de todo el modelo, el valor único es un número de tipo floating-point (numero de punto flotante) que representa a monto_invertido.
units = 1
Con este valor especificamos el número de neuronas en la capa, el número de neuronas define cuantas variables internas tiene la capa para tratar de aprender a resolver el problema. Ya que esta es la capa final, también es el tamaño de salida del modelo, un único valor flotante que representa los nuevos suscriptores ganados. En una red de varias capas, el tamaño, y la forma de la capa deberían coincidir con la input_shape de la siguiente capa.
1 2 3 4 |
# Definimos la capa o capa_a capa_a = tf.keras.layers.Dense(units=1, input_shape=[1]) |
Luego de definir la capa, voy a ensamblarla en un modelo, la definición del modelo secuencial, toma una lista de capas como argumentos que especifican el orden de cálculo desde la entrada hasta la salida. El siguiente modelo tiene una sola capa llamada capa_a.
1 2 3 4 |
# Modelo con la capa capa_a modelo = tf.keras.Sequential([capa_a]) |
En muchos casos verás capas definidas dentro de la definición del modelo, como el siguiente ejemplo.
1 2 3 4 5 6 |
# Ejemplo de capas definidas dentro de la definición del modelo modelo = tf.keras.Sequential([ tf.keras.layers.Dense(units=1, input_shape=[1]) ]) |
Bueno hasta aquí terminamos la primera parte del tutorial en donde creamos la capa y el modelo para nuestro proyecto.
Ten Paciencia, lo que quiero es que entiendas todo el proceso para Crear este Proyecto y no llenarte el capitulo de mucho contenido porque te puedes marear y no tendrás un óptimo aprendizaje.
Nota (s)
- En la siguiente parte compilaremos y entrenaremos el modelo, asimismo mostraremos estadísticas del entrenamiento del modelo, usaremos nuestro modelo para predecir datos y verificaremos la precisión de nuestro modelo.
- El código de los elementos mencionadas en este capitulo del tutorial pueden cambiar, esto no depende de nosotros, si no de las empresas que dan soporte a Jupyter Notebook y Python, que suele cambiar sus elementos en futuras versiones.
- No olvides que debemos usar la Tecnología para hacer cosas Buenas por el Mundo.
Síguenos en nuestras Redes Sociales para que no te pierdas nuestros próximos contenidos.