Puntos de control
Create Cloud Dataproc cluster
/ 50
Create a Logistic Regression Model
/ 50
Aprendizaje automático con Spark en Google Cloud Dataproc
- GSP271
- Descripción general
- Configuración y requisitos
- Tarea 1. Crea un clúster de Dataproc
- Tarea 2. Configura un bucket e inicia sesión en Pyspark
- Tarea 3. Lee y limpia el conjunto de datos
- Tarea 4. Desarrolla un modelo de regresión logística
- Tarea 5. Guarda y restablece un modelo de regresión logística
- Tarea 6. Haz predicciones con el modelo de regresión logística
- Tarea 7. Examina el comportamiento del modelo
- Tarea 8. Evalúa el modelo
- ¡Felicitaciones!
GSP271
Descripción general
Introducción
En este lab aprenderás a implementar la regresión logística usando una biblioteca de aprendizaje automático en Apache Spark. Spark se ejecuta en un clúster de Dataproc para desarrollar un modelo para datos de un conjunto de datos multivariable.
Dataproc es un servicio en la nube rápido, fácil de usar y completamente administrado que se utiliza para ejecutar clústeres de Apache Spark y Apache Hadoop de manera simple y rentable. Dataproc se integra fácilmente a otros servicios de Google Cloud, lo que te proporciona una plataforma eficaz y completa para procesamiento de datos, analítica y aprendizaje automático.
Apache Spark es un motor de analítica para procesamiento de datos a gran escala. La regresión logística está disponible como un módulo en MLlib, la biblioteca de aprendizaje automático de Apache Spark. Spark MLlib, también llamada Spark ML, incluye implementaciones para la mayoría de los algoritmos estándar de aprendizaje automático como agrupamientos en clústeres k-means, bosques aleatorios, mínimos cuadrados alternos, árboles de decisión, máquinas de vectores de soporte, entre otros. Spark se puede ejecutar en un clúster Hadoop, como Dataproc, con el objetivo de procesar conjuntos de datos muy grandes en paralelo.
Este lab utiliza un conjunto de datos base que se recuperó de US Bureau of Transport Statistics. El conjunto de datos proporciona información histórica sobre los vuelos internos en Estados Unidos y puede utilizarse para ilustrar una amplia gama de conceptos y técnicas de ciencia de datos. Este lab proporciona los datos como un conjunto de archivos de texto con formato CSV.
Objetivos
- Crear un conjunto de datos de entrenamiento para aprendizaje automático con Spark
- Desarrollar un modelo de aprendizaje automático de regresión logística con Spark
- Evaluar el comportamiento predictivo de un modelo de aprendizaje automático usando Spark en Dataproc
- Evaluar el modelo
Configuración y requisitos
Antes de hacer clic en el botón Comenzar lab
Lee estas instrucciones. Los labs son cronometrados y no se pueden pausar. El cronómetro, que comienza a funcionar cuando haces clic en Comenzar lab, indica por cuánto tiempo tendrás a tu disposición los recursos de Google Cloud.
Este lab práctico te permitirá realizar las actividades correspondientes en un entorno de nube real, no en uno de simulación o demostración. Para ello, se te proporcionan credenciales temporales nuevas que utilizarás para acceder a Google Cloud durante todo el lab.
Para completar este lab, necesitarás lo siguiente:
- Acceso a un navegador de Internet estándar (se recomienda el navegador Chrome)
- Tiempo para completar el lab: Recuerda que, una vez que comienzas un lab, no puedes pausarlo.
Cómo iniciar tu lab y acceder a la consola de Google Cloud
-
Haga clic en el botón Comenzar lab. Si debe pagar por el lab, se abrirá una ventana emergente para que seleccione su forma de pago. A la izquierda, se encuentra el panel Detalles del lab, que tiene estos elementos:
- El botón Abrir la consola de Google Cloud
- El tiempo restante
- Las credenciales temporales que debe usar para el lab
- Otra información para completar el lab, si es necesaria
-
Haz clic en Abrir la consola de Google Cloud (o haz clic con el botón derecho y selecciona Abrir el vínculo en una ventana de incógnito si ejecutas el navegador Chrome).
El lab inicia recursos y abre otra pestaña en la que se muestra la página de acceso.
Sugerencia: Ordene las pestañas en ventanas separadas, una junto a la otra.
Nota: Si ves el diálogo Elegir una cuenta, haz clic en Usar otra cuenta. -
De ser necesario, copia el nombre de usuario a continuación y pégalo en el diálogo Acceder.
{{{user_0.username | "Username"}}} También puedes encontrar el nombre de usuario en el panel Detalles del lab.
-
Haz clic en Siguiente.
-
Copia la contraseña que aparece a continuación y pégala en el diálogo Te damos la bienvenida.
{{{user_0.password | "Password"}}} También puedes encontrar la contraseña en el panel Detalles del lab.
-
Haz clic en Siguiente.
Importante: Debes usar las credenciales que te proporciona el lab. No uses las credenciales de tu cuenta de Google Cloud. Nota: Usar tu propia Cuenta de Google podría generar cargos adicionales. -
Haga clic para avanzar por las páginas siguientes:
- Acepta los Términos y Condiciones.
- No agregues opciones de recuperación o autenticación de dos factores (esta es una cuenta temporal).
- No te registres para obtener pruebas gratuitas.
Después de un momento, se abrirá la consola de Google Cloud en esta pestaña.
Tarea 1. Crea un clúster de Dataproc
Habitualmente, el primer paso para escribir trabajos en Hadoop es iniciar su instalación. Esto implica establecer un clúster, instalarle Hadoop y configurarlo de manera que las máquinas se reconozcan entre ellas y puedan comunicarse de manera segura.
Luego, comienzas los procesos YARN y MapReduce y, finalmente, está todo listo para escribir unos programas en Hadoop. En Google Cloud, Dataproc hace más práctico iniciar un clúster Hadoop capaz de ejecutar MapReduce, Pig, Hive, Presto y Spark.
Si estás usando Spark, Dataproc ofrece un entorno Spark completamente administrado y sin servidores, solo tienes que enviar un programa Spark y Dataproc lo ejecuta. De esta manera, Dataproc es a Apache Spark lo que Dataflow es a Apache Beam. En realidad, Dataproc y Dataflow comparten servicios de backend.
En esta parte crearás una VM y, después, un clúster Dataproc en la VM.
-
En la consola de Cloud, en menú de navegación (
), haz clic en Compute Engine > Instancias de VM.
-
Haz clic en el botón SSH junto a la VM
startup-vm
para ejecutar y conectar una terminal. -
Haz clic en Conectar para confirmar la conexión de SSH.
-
Ejecuta el siguiente comando para clonar el repositorio
data-science-on-gcp
y navegar hacia el directorio06_dataproc
:
- Establece el proyecto y la variable de bucket con el siguiente código:
- Edita el archivo
create_cluster.sh
quitando el código de dependencia zonal--zone ${REGION}-a
El resultado debería ser similar al siguiente:
-
Guarda el archivo con Ctrl+X, presiona Y e Intro
-
Crea un clúster de Dataproc para ejecutar los trabajos, especificando el nombre de tu bucket y la región en la que se encuentra:
Este comando podría tardar unos minutos.
JupyterLab en Dataproc
-
En la consola de Cloud, en el menú de navegación, haz clic en Dataproc. Es posible que tengas que hacer clic en Más Productos y desplazar hacia abajo.
-
En lista de clústeres, haz clic en el nombre del clúster para ver más detalles.
-
Haz clic en la pestaña Interfaces web y, luego, haz clic en JupyterLab en la parte inferior del panel derecho.
-
En la sección del selector de Notebook, haz clic en Python 3 para abrir un notebook nuevo.
Para usar un notebook, debes ingresar comandos en una celda. Asegúrate de ejecutar los comandos en la celda presionando Mayúsculas + Intro o haciendo clic en el triángulo que aparece en el menú superior del notebook para ejecutar las celdas seleccionadas y avanzar.
Tarea 2. Configura un bucket e inicia sesión en Pyspark
- Configura un bucket de Google Cloud Storage, en el cual se alojarán tus archivos sin procesar:
- Ejecuta la celda presionando Mayúsculas + Intro o haciendo clic en el triángulo que aparece en el menú superior del notebook para ejecutar las celdas seleccionadas y avanzar.
- Crea una sesión de Spark usando el siguiente bloque de código:
Una vez que ese código se agregue al comienzo de cualquier secuencia de comandos de Spark en Python, cualquier código que se desarrolle con la shell interactiva de Spark o el notebook de Jupyter también funcionará cuando se inicie como una secuencia de comandos independiente.
Crea un DataFrame de Spark para entrenamiento
- Ingresa los siguientes comandos en una celda nueva:
- Ejecuta la celda.
Tarea 3. Lee y limpia el conjunto de datos
Cuando iniciaste este lab, una secuencia de comandos automatizada te proporcionó datos en la forma de un conjunto de archivos CSV preparados, que se colocaron en tu bucket de Cloud Storage.
- Ahora, recupera el nombre del bucket de Cloud Storage de la variable de entorno que configuraste antes y crea el marco de datos
traindays
leyendo un CSV preparado que la secuencia de comandos automatizada colocó en tu bucket de Cloud Storage.
El archivo CSV identifica un subconjunto de días como válido para entrenamiento. Esto te permite crear vistas de todo el conjunto de datos flights
, que está dividido en un conjunto de datos que se usa para entrenar a tu modelo, y otro que prueba o valida ese modelo.
Lee el conjunto de datos
- Ingresa y ejecuta los siguientes comandos en una celda nueva:
- Crea una vista de Spark SQL:
- Consulta los primeros registros de la vista del conjunto de datos de entrenamiento:
Este comando muestra los primeros cinco registros en la tabla de entrenamiento:
El próximo paso del proceso es identificar los archivos de datos de origen.
- Para ello, usa el archivo fragmentado
all_flights-00000-*
, ya que tiene un subconjunto representativo del conjunto de datos completo y se puede procesar en un tiempo razonable:
#inputs = 'gs://{}/flights/tzcorr/all_flights-*'.format(BUCKET) # FULL
- Ahora lee los datos en Spark SQL desde el archivo de entrada que creaste:
- A continuación, crea una búsqueda que use solo datos de días identificados como parte del conjunto de datos de entrenamiento:
- Inspecciona algunos datos para verificar si son correctos:
"Truncated the string representation of a plan since it was too large."
Para este lab, ignórala, ya que solo es relevante si quieres inspeccionar los registros de esquema SQL. Tu resultado debería ser similar al siguiente código:
- Indica a Spark que te proporcione un análisis del conjunto de datos:
Esto debería mostrar un resultado similar a la siguiente tabla:
Limpia el conjunto de datos
En esta tabla, los valores de la media y la desviación estándar se redondearon a dos decimales para mayor claridad, pero en la pantalla verás los valores de punto flotante completos.
En la tabla, se muestra que hay algunos problemas con los datos. No todos los registros tienen valores para todas las variables, hay diferentes estadísticas de recuento en DEP_DELAY
, TAXI_OUT
, ARR_DELAY
y DISTANCE
. Esto ocurre por los siguientes motivos:
- Hay vuelos programados que nunca salen
- Algunos vuelos salen, pero se cancelan antes del despegue
- Algunos vuelos se desvían y, por lo tanto, nunca aterrizan
- Ingresa el siguiente código en una celda nueva:
trainquery = """ SELECT DEP_DELAY, TAXI_OUT, ARR_DELAY, DISTANCE FROM flights f JOIN traindays t ON f.FL_DATE == t.FL_DATE WHERE t.is_train_day == 'True' AND f.dep_delay IS NOT NULL AND f.arr_delay IS NOT NULL """ traindata = spark.sql(trainquery) traindata.describe().show()
Esto debería mostrar un resultado similar a la siguiente tabla:
- Quita los vuelos que fueron cancelados o desviados usando la siguiente consulta:
Este resultado debería mostrar el mismo valor de recuento para cada columna, lo cual indica que solucionaste el problema.
Tarea 4. Desarrolla un modelo de regresión logística
Ahora puedes crear una función que convierta un conjunto de datos de tu DataFrame en un ejemplo de entrenamiento. Un ejemplo de entrenamiento contiene una muestra de los atributos de entrada y la respuesta correcta para esas entradas.
En este caso, respondes si el retraso de la llegada es menor a 15 minutos. Las etiquetas que usas como entrada son los valores de retraso de salida, tiempo de carreteo previo al despegue y distancia de vuelo.
- Ingresa y ejecuta lo siguiente en una celda nueva para crear la definición de la función del ejemplo de entrenamiento:
- Asigna esta función de ejemplo de entrenamiento al conjunto de datos de entrenamiento:
- Ingresa y ejecuta el siguiente comando para proporcionar un DataFrame de entrenamiento para el módulo de regresión logística de Spark:
El DataFrame de entrenamiento crea un modelo de regresión logística basada en tu conjunto de datos de entrenamiento:
- Usa el parámetro
intercept=verdadero
, porque, en este caso, la predicción para el retraso de llegadas no será igual a cero cuando todas las entradas sean cero. - Si esperas que, en algún conjunto de datos de entrenamiento, la predicción sea cero cuando todas las entradas sean igual a cero, entonces debes especificar
intercept=Falso
.
- Cuando se finalice este método de entrenamiento, el objeto
lrmodel
tendrá pesos y un valor de intercepción que puedes inspeccionar:
El resultado es similar al siguiente:
Cuando estos pesos se usen con la fórmula de regresión lineal, te permitirán crear un modelo utilizando código en el lenguaje que desees.
- Prueba esto proporcionando algunas variables de entrada para un vuelo con las siguientes características:
- Retraso de salida de 6 minutos
- Tiempo de carreteo previo al despegue de 12 minutos
- Distancia de vuelo de 594 millas
El resultado de 1 predice que el vuelo llegará a tiempo.
- Ahora prueba con un retraso de salida mucho más largo, de 36 minutos.
El resultado de 0 predice que el vuelo no llegará a tiempo.
Estos resultados no son probabilidades; se devuelven como verdadero o falso según un umbral que se configura en 0.5 de forma predeterminada.
- Puedes borrar el umbral para que se devuelva la probabilidad real:
Observa que los resultados son probabilidades, con el primer resultado cerca de 1 y el segundo, cerca de 0.
- Configura el umbral en 0.7 para que coincida con tu requisito de poder cancelar reuniones si la probabilidad de una llegada a tiempo es menor que el 70%.
Nuevamente, tus resultados son 1 y 0, pero ahora reflejan el umbral de probabilidad del 70% que necesitas y no el 50% predeterminado.
Tarea 5. Guarda y restablece un modelo de regresión logística
Puedes guardar un modelo de regresión logística de Spark directamente en Cloud Storage. Esto te permite reutilizar un modelo sin tener que volver a entrenarlo desde cero.
Una ubicación de almacenamiento contiene solo un modelo. Esto evita interferencias con otros archivos existentes, que pueden causar problemas con la carga del modelo. Para ello, asegúrate de que la ubicación de almacenamiento esté vacía antes de guardar tu modelo de regresión Spark.
- Ingresa el siguiente código en una celda nueva y ejecútalo:
Este comando debería informar un error que indica CommandException: 1 files/objects could not be removed
porque aún no se guardó el modelo. El error indica que no hay archivos en la ubicación de destino. Debes asegurarte de que la ubicación esté vacía antes de intentar guardar el modelo; esto es lo que nos garantiza este comando.
- Para guardar el modelo, ejecuta el siguiente comando:
- Ahora destruye el objeto del modelo en la memoria y confirma que ya no contiene ningún dato del modelo:
- Ahora recupera el modelo de Storage:
Se restablecieron los parámetros del modelo, es decir, los valores de intercepciones y pesos.
Tarea 6. Haz predicciones con el modelo de regresión logística
- Prueba el modelo con una situación en la que definitivamente el vuelo no llegue a tiempo:
Esto imprime en pantalla un 0, que predice que el vuelo probablemente llegará tarde, según tu umbral de probabilidad del 70%.
- Para finalizar, vuelve a probar el modelo con datos de un vuelo que llegue a tiempo:
Esto imprime en pantalla un 1, que predice que el vuelo probablemente llegará a tiempo, según tu umbral de probabilidad del 70%.
Tarea 7. Examina el comportamiento del modelo
- Ingresa el siguiente código en una celda nueva y ejecútala:
Una vez que se quiten los umbrales, obtendrás las probabilidades. La probabilidad de llegar tarde aumenta a medida que aumenta el tiempo de retraso de la salida.
- Considerando un retraso de la salida de 20 minutos y un tiempo de carreteo previo al despegue de 10 minutos, así es como la distancia afecta la probabilidad de que el vuelo llegue a tiempo:
Como se puede observar, el efecto es relativamente menor. La probabilidad aumenta de 0.63 a 0.76 aproximadamente a medida que la distancia pasa de un vuelo muy corto a un vuelo intercontinental.
- Ejecuta lo siguiente en una celda nueva:
Por otro lado, si mantienes constantes el tiempo de carreteo previo al despegue y la distancia, y analizas el efecto del retraso de la salida, vas a ver un impacto más drástico.
Tarea 8. Evalúa el modelo
- Para evaluar el modelo de regresión logística, debes probar los datos:
- Ahora asigna esta función de ejemplo de entrenamiento al conjunto de datos de prueba:
- Indica a Spark que te proporcione un análisis del conjunto de datos:
Esto debería mostrar un resultado similar a la siguiente tabla:
- Define una función
eval
y devuelve los detalles de los vuelos totales cancelados, totales no cancelados, cancelados correctos y no cancelados correctos:
- Ahora, evalúa el modelo pasando una etiqueta de predicción correcta:
Resultado:
- Mantén solo esos ejemplos cerca del umbral de decisión, que es superior al 65% y menor que el 75%:
Resultado:
¡Felicitaciones!
Ahora sabes cómo usar Spark para realizar una regresión logística con un clúster de Dataproc.
Realiza tu próximo lab
Continúa con:
Próximos pasos y más información
Capacitación y certificación de Google Cloud
Recibe la formación que necesitas para aprovechar al máximo las tecnologías de Google Cloud. Nuestras clases incluyen habilidades técnicas y recomendaciones para ayudarte a avanzar rápidamente y a seguir aprendiendo. Para que puedas realizar nuestros cursos cuando más te convenga, ofrecemos distintos tipos de capacitación de nivel básico a avanzado: a pedido, presenciales y virtuales. Las certificaciones te ayudan a validar y demostrar tus habilidades y tu conocimiento técnico respecto a las tecnologías de Google Cloud.
Última actualización del manual: 4 de diciembre de 2023
Prueba más reciente del lab: 4 de diciembre de 2023
Copyright 2024 Google LLC. All rights reserved. Google y el logotipo de Google son marcas de Google LLC. Los demás nombres de productos y empresas pueden ser marcas de las respectivas empresas a las que estén asociados.