Tutorial de PySpark para principiantes: Ejemplo de aprendizaje automático

¿Qué es Apache Spark?

Spark es una solución de big data que ha demostrado ser más fácil y rápida que Hadoop MapReduce. Spark es un software de código abierto desarrollado por UC Berkeley RAD lab en 2009. Desde que fue lanzado al público en 2010, Spark ha crecido en popularidad y se utiliza a través de la industria con una escala sin precedentes.

En la era de los big data, los profesionales necesitan más que nunca herramientas rápidas y confiables para procesar la transmisión de datos. Las herramientas anteriores como MapReduce eran favoritas, pero eran lentas. Para superar este problema, Spark ofrece una solución rápida y de uso general. La principal diferencia entre Spark y MapReduce es que Spark ejecuta cálculos en memoria durante el último en el disco duro. Permite el acceso de alta velocidad y el procesamiento de datos, reduciendo tiempos de horas a minutos.

¿Qué es Pyspark?

Spark es el nombre del motor para realizar la computación en clúster, mientras que PySpark es la biblioteca de Python para usar Spark.

En este tutorial, usted aprenderá –

¿Cómo funciona Spark?

Spark se basa en el motor computacional, lo que significa que se encarga de la programación, distribución y supervisión de la aplicación. Cada tarea se realiza en varios equipos de trabajo llamados clúster de computación. Un clúster informático hace referencia a la división de tareas. Una máquina realiza una tarea, mientras que las otras contribuyen a la salida final a través de una tarea diferente. Al final, todas las tareas se agregan para producir una salida. El administrador de Spark ofrece una visión general 360 de varios trabajos de Spark.

Spark está diseñado para funcionar con

  • Python
  • Java
  • Scala
  • SQL

Una característica significativa de Spark es la gran cantidad de biblioteca incorporada, incluyendo MLLib para el aprendizaje automático. Spark también está diseñado para trabajar con clústeres de Hadoop y puede leer el amplio tipo de archivos, incluyendo datos Hive, CSV, JSON, datos de Casandra entre otros.

¿Por qué usar Spark?

Como futuro practicante de datos, debería estar familiarizado con las famosas bibliotecas de Python: Pandas y scikit-learn. Estas dos bibliotecas son fantásticas para explorar conjuntos de datos de tamaño medio. Los proyectos regulares de aprendizaje automático se construyen en torno a la siguiente metodología:

  • Cargar los datos en el disco
  • Importar los datos a la memoria de la máquina
  • Procesar/analizar los datos
  • Construir el modelo de aprendizaje automático
  • Almacenar la predicción en el disco

El problema surge si el científico de datos quiere procesar datos que son demasiado grandes para una computadora. Durante los primeros días de la ciencia de datos, los practicantes tomaban muestras de la ya que no siempre se necesitaba capacitación en grandes conjuntos de datos. El científico de datos encontraría una buena muestra estadística, realizaría una comprobación adicional de robustez y crearía un modelo excelente.

Sin embargo, hay algunos problemas con esto:

  • ¿El conjunto de datos refleja el mundo real?
  • ¿Los datos incluyen un ejemplo específico?
  • ¿Es adecuado el modelo para el muestreo?

Tome la recomendación de los usuarios, por ejemplo. Los recomendadores confían en comparar a los usuarios con otros usuarios para evaluar sus preferencias. Si el practicante de datos toma solo un subconjunto de los datos, no habrá una cohorte de usuarios que sean muy similares entre sí. Los recomendadores deben ejecutarse en el conjunto de datos completo o no en absoluto.

¿Cuál es la solución?

La solución ha sido evidente durante mucho tiempo, dividir el problema en múltiples computadoras. La computación paralela también viene con múltiples problemas. Los desarrolladores a menudo tienen problemas para escribir código paralelo y terminan teniendo que resolver un montón de problemas complejos alrededor del multiprocesamiento en sí mismo.

Pyspark le da al científico de datos una API que se puede usar para resolver los datos paralelos que se han procedido en problemas. Pyspark maneja las complejidades del multiprocesamiento, como la distribución de los datos, la distribución de código y la recopilación de resultados de los trabajadores en un clúster de máquinas.

Spark puede ejecutarse de forma independiente, pero la mayoría de las veces se ejecuta sobre un marco de computación en clúster como Hadoop. Sin embargo, en pruebas y desarrollo, un científico de datos puede ejecutar Spark de manera eficiente en sus cajas de desarrollo o portátiles sin un clúster

  • Una de las principales ventajas de Spark es construir una arquitectura que incluya gestión de streaming de datos, consultas de datos sin problemas, predicción de aprendizaje automático y acceso en tiempo real a diversos análisis.
  • Spark trabaja estrechamente con el lenguaje SQL, es decir, datos estructurados. Permite consultar los datos en tiempo real.
  • El trabajo de Data Scientist main es analizar y construir modelos predictivos. En resumen, un científico de datos necesita saber cómo consultar datos usando SQL, producir un informe estadístico y hacer uso del aprendizaje automático para producir predicciones. Data scientist gasta una cantidad significativa de su tiempo en la limpieza, transformación y análisis de los datos. Una vez que el flujo de trabajo de datos o dataset está listo, el científico de datos utiliza varias técnicas para descubrir información y patrones ocultos. La manipulación de datos debe ser robusta y la misma fácil de usar. Spark es la herramienta adecuada gracias a su velocidad y sus API enriquecidas.

En este tutorial, aprenderá a construir un clasificador con Pyspark.

Inicie Pyspark con AWS

El equipo de Jupyter crea una imagen Docker para ejecutar Spark de manera eficiente. Puede seguir este paso para iniciar la instancia de Spark en AWS.

Consulte nuestro tutorial sobre AWS y TensorFlow

Paso 1: Crear una instancia

En primer lugar, debe crear una instancia. Vaya a su cuenta de AWS e inicie la instancia. Puede aumentar el almacenamiento hasta 15g y utilizar el mismo grupo de seguridad que en el tutorial de TensorFlow.

Paso 2: Abra la conexión

Abra la conexión e instale el contenedor Docker. Para obtener más detalles, se refiere al tutorial con TensorFlow con Docker. Tenga en cuenta que, debe estar en el directorio de trabajo correcto.

Simplemente ejecute estos códigos para instalar Docker:

Paso 3: Vuelva a abrir la conexión e instalar Spark

Después de volver a abrir la conexión, puede instalar la imagen que contiene Pyspark.

Paso 4: Abrir Jupyter

Compruebe el contenedor y su nombre

Inicie el acoplador con los registros de acoplador seguidos del nombre del acoplador. Por ejemplo, docker registra zealous_goldwasser

Ve a tu navegador y ejecuta Jupyter. La dirección es http://localhost:8888/. Pegue la contraseña dada por el terminal.

Nota: si desea cargar/descargar un archivo en su máquina de AWS, puede utilizar el software Cyberduck, https://cyberduck.io/.

Instalar Pyspark en Mac/Windows con Conda

Para instalar Spark en su máquina local, una práctica recomendada es crear un nuevo entorno conda. Este nuevo entorno instalará Python 3.6, Spark y todas las dependencias.

Usuario de Mac

Usuario de Windows

Puede editar el archivo.yml. Tenga cuidado con la sangría. Se requieren dos espacios antes de:

Guárdelo y crea el entorno. Lleva un poco de tiempo.

Para obtener más detalles sobre la ubicación, consulte el tutorial Instalar TensorFlow

Puede comprobar todo el entorno instalado en su máquina

Usuario de Mac

Usuario de Windows

Nota: Ya ha creado un entorno TensorFlow específico para ejecutar los tutoriales en TensorFlow. Es más conveniente crear un nuevo entorno diferente de hello-tf. No tiene sentido sobrecargar hello-tf con Spark o cualquier otra biblioteca de aprendizaje automático.

Imagine que la mayor parte de su proyecto implica TensorFlow, pero necesita usar Spark para un proyecto en particular. Puede establecer un entorno TensorFlow para todo su proyecto y crear un entorno separado para Spark. Puede agregar tantas bibliotecas en el entorno Spark como desee sin interferir con el entorno TensorFlow. Una vez que haya terminado con el proyecto de Spark, puede borrarlo sin afectar el entorno de TensorFlow.

Jupyter

Abra Jupyter Notebook y pruebe si PySpark funciona. En un nuevo bloc de notas pegue el siguiente código:

Si se muestra un error, es probable que Java no esté instalado en su máquina. En mac, abra el terminal y escriba java -version, si hay una versión java, asegúrese de que sea 1.8. En Windows, vaya a Aplicación y verifique si hay una carpeta Java. Si hay una carpeta Java, compruebe que Java 1.8 esté instalado. A partir de este momento, PySpark no es compatible con Java9 y superior.

Si necesita instalar Java, piense en vincular y descargar jdk-8u181-windows-x64.exe

Para Mac User, se recomienda usar brew.

Consulte este tutorial paso a paso sobre cómo instalar Java

Nota: Use remove para borrar completamente un entorno.

Contexto de chispa

SparkContext es el motor interno que permite las conexiones con los clústeres. Si desea ejecutar una operación, necesita un SparkContext.

Crear un SparkContext

En primer lugar, debe iniciar un SparkContext.

Ahora que SparkContext está listo, puede crear una colección de datos denominada RDD, Resilient Distributed Dataset. El cálculo en un RDD se paraleliza automáticamente en todo el clúster.

Puede acceder a la primera fila con take

Puede aplicar una transformación a los datos con una función lambda. En el ejemplo siguiente, devuelve el cuadrado de nums. Es una transformación de mapa

SQLContext

Una forma más conveniente es usar el DataFrame. SparkContext ya está configurado, puede usarlo para crear el DataFrame. También debe declarar el archivo SQLContext

SQLContext permite conectar el motor con diferentes fuentes de datos. Se utiliza para iniciar las funcionalidades de Spark SQL.

Vamos a crear una lista de tupla. Cada tupla contendrá el nombre de las personas y su edad. Se requieren cuatro pasos:

Paso 1) Crear la lista de tupla con la información

Paso 2) Construir un RDD

Paso 3) Convertir las tuplas

Paso 4) Crear un contexto de DataFrame

Si desea acceder al tipo de cada entidad, puede usar printSchema ()

Aprendizaje automático con Spark

Ahora que tiene una breve idea de Spark y SQLContext, está listo para crear su primer programa de aprendizaje automático.

Procederás de la siguiente manera:

  • Paso 1) Funcionamiento básico con PySpark
  • Paso 2) Preprocesamiento de datos
  • Paso 3) Crear una canalización de procesamiento de datos
  • Paso 4) Construir el clasificador
  • Paso 5) Capacitar y evaluar el modelo
  • Paso 6) Ajuste el hiperparámetro

En este tutorial, vamos a utilizar el conjunto de datos para adultos. El propósito de este tutorial es aprender a usar Pyspark. Para obtener más información sobre el conjunto de datos, consulte este tutorial.

Tenga en cuenta que, el dataset no es significativo y puede pensar que el cálculo lleva mucho tiempo. Spark está diseñado para procesar una cantidad considerable de datos. El rendimiento de Spark aumenta en relación con otras bibliotecas de aprendizaje automático cuando el conjunto de datos procesado aumenta.

Paso 1) Funcionamiento básico con PySpark

En primer lugar, debe inicializar el SQLContext aún no está iniciado.

luego, puede leer el archivo cvs con SQLContext.read.csv. Utilice InferSchema establecido en True para indicar a Spark que adivine automáticamente el tipo de datos. De forma predeterminada, se convierte en False.

Echemos un vistazo al tipo de datos

Puedes ver los datos con show.

Si no configuró IndersHema en True, esto es lo que está sucediendo con el tipo. Hay todos en cadena.

Para convertir la variable continua en el formato correcto, puede usar la refundición de las columnas. Puede usar WithColumn para indicar a Spark qué columna operar la transformación.

Seleccionar columnas

Puede seleccionar y mostrar las filas con selección y los nombres de las entidades. A continuación, se seleccionan edad y fnlwgt.

Recuento por grupo

Si desea contar el número de ocurrencia por grupo, puede encadenar:

  • GrupoPor ()
  • count ()

juntos. En el ejemplo siguiente, cuenta el número de filas por nivel educativo.

Describir los datos

Para obtener un resumen de estadísticas, de los datos, puede utilizar describe (). Se calculará el:

  • conteo
  • significar
  • desviación estándar
  • mín
  • Máx

Si desea que la estadística de resumen de una sola columna, agregue el nombre de la columna dentro de describe ()

Cálculo de tabulación cruzada

En alguna ocasión, puede ser interesante ver las estadísticas descriptivas entre dos columnas pareadas. Por ejemplo, puede contar el número de personas con ingresos inferiores o superiores a 50k por nivel educativo. Esta operación se denomina tabulación cruzada.

Se puede ver que ninguna gente tiene ingresos superiores a los 50k cuando son jóvenes.

Colar columna

Hay dos API intuitivas para soltar columnas:

  • drop (): soltar una columna
  • dropna (): Dejar caer NA

A continuación se coloca la columna education_num

Filtrar datos

Puede utilizar filter () para aplicar estadísticas descriptivas en un subconjunto de datos. Por ejemplo, puede contar el número de personas mayores de 40 años

13443

Estadísticas descriptivas por grupo

Finalmente, puede agrupar datos por grupo y calcular operaciones estadísticas como la media.

Paso 2) Preprocesamiento de datos

El procesamiento de datos es un paso crítico en el aprendizaje automático. Después de eliminar los datos de basura, obtiene algunas ideas importantes. Por ejemplo, usted sabe que la edad no es una función lineal con los ingresos. Cuando las personas son jóvenes, sus ingresos suelen ser inferiores a los de la mediana edad. Después de la jubilación, un hogar usa su ahorro, lo que significa una disminución en los ingresos. Para capturar este patrón, puede agregar un cuadrado a la entidad de edad

Agregar cuadrado de edad

Para agregar una nueva característica, debe:

1. Seleccione la columna
2. Aplique la transformación y agréguela al DataFrame

Puede ver que age_square se ha agregado correctamente al marco de datos. Puede cambiar el orden de las variables con select. A continuación, traes age_square justo después de la edad.

Excluir Holand-Países Bajos

Cuando un grupo dentro de una entidad sólo tiene una observación, no aporta información al modelo. Por el contrario, puede conducir a un error durante la validación cruzada.

Vamos a comprobar el origen de la casa

La característica native_country solo tiene un hogar procedente de Holanda. Tú lo excluyes.

Paso 3) Crear una canalización de procesamiento de datos

Similar a scikit-learn, Pyspark tiene una API de canalización. Una canalización es muy conveniente para mantener la estructura de los datos. Inserta los datos en la canalización. Dentro de la tubería, se realizan varias operaciones, la salida se usa para alimentar el algoritmo.

Por ejemplo, una transformación universal en el aprendizaje automático consiste en convertir una cadena en un codificador caliente, es decir, una columna por grupo. Un codificador caliente suele ser una matriz llena de ceros.

Los pasos para transformar los datos son muy similares a scikit-learn. Es necesario:

  • Indexar la cadena a numérica
  • Crear el codificador en caliente
  • Transformar los datos

Dos API hacen el trabajo: StringIndexer, OneHotEncoder

  1. En primer lugar, seleccione la columna de cadena que desea indexar. InputCol es el nombre de la columna del dataset. OutputCol es el nuevo nombre dado a la columna transformada.

  1. Ajustar los datos y transformarlos

  1. Cree las columnas de noticias basadas en el grupo. Por ejemplo, si hay 10 grupos en la entidad, la nueva matriz tendrá 10 columnas, una para cada grupo.

Construir la tubería

Construirá una canalización para convertir todas las entidades precisas y agregarlas al dataset final. La canalización tendrá cuatro operaciones, pero siéntase libre de agregar tantas operaciones como desee.

1. Codificar los datos categóricos
2. Indexar la entidad de etiqueta
3. Añadir variable continua
4. Monta los escalones.

Cada paso se almacena en una lista denominada etapas. Esta lista le dirá al VectorAssembler qué operación debe realizar dentro de la canalización.

1. Codificar los datos categóricos

Este paso es exactamente el mismo que el ejemplo anterior, excepto que recorre todas las entidades categóricas.

2. Indexar la entidad de etiqueta

Spark, como muchas otras bibliotecas, no acepta valores de cadena para la etiqueta. Convertir la entidad de etiqueta con StringIndexer y agregarla a las etapas de la lista

3. Añadir variable continua

Los InputCols del VectorAssembler es una lista de columnas. Puede crear una lista nueva que contenga todas las columnas nuevas. El siguiente código popluate la lista con las entidades categóricas codificadas y las entidades continuas.

4. Monta los escalones.

Finalmente, pasa todos los pasos en el VectorAssembler

Ahora que todos los pasos están listos, empuja los datos a la canalización.

Si comprueba el nuevo dataset, puede ver que contiene todas las entidades, transformadas y no transformadas. Solo estás interesado por la nueva etiqueta y las características. Las entidades incluyen todas las entidades transformadas y las variables continuas.

Paso 4) Construir el clasificador: logístico

Para que el cálculo sea más rápido, se convierte el modelo en un DataFrame. Debe seleccionar nueva etiqueta y entidades del modelo usando el mapa.

Está listo para crear los datos del tren como un DataFrame. Utilice el método SQLContext

Compruebe la segunda fila

Crear un tren o conjunto de pruebas

Divide el dataset 80/20 con RandomSplit.

Vamos a contar cuántas personas con ingresos por debajo o por encima de 50k tanto en el entrenamiento como en el conjunto de pruebas

Construir el regresor logístico

Por último, pero no menos importante, puede construir el clasificador. Pyspark tiene una API llamada LogisticRegresion para realizar regresión logística.

Inicializa lr indicando la columna de etiqueta y las columnas de entidad. Se establece un máximo de 10 iteraciones y se agrega un parámetro de regularización con un valor de 0.3. Tenga en cuenta que en la siguiente sección, utilizará la validación cruzada con una cuadrícula de parámetros para ajustar el modelo

#You puede ver los coeficientes de la regression

Paso 5) Capacitar y evaluar el modelo

Para generar predicción para su conjunto de pruebas, puede usar LinearModel con transform () en test_data

Puede imprimir los elementos en las predicciones

Usted está interesado por la etiqueta, la predicción y la probabilidad

Evaluar el modelo

Debe observar la métrica de precisión para ver qué tan bien (o malo) funciona el modelo. Actualmente, no hay API para calcular la medida de precisión en Spark. El valor por defecto es ROC, curva característica de funcionamiento del receptor. Es una métrica diferente que tiene en cuenta la tasa de falsos positivos.

Antes de mirar el ROC, construyamos la medida de precisión. Está más familiarizado con esta métrica. La medida de precisión es la suma de la predicción correcta sobre el número total de observaciones.

Se crea un DataFrame con la etiqueta y la predicción.

Puede verificar el número de clase en la etiqueta y la predicción

Por ejemplo, en el conjunto de pruebas, hay 1578 hogares con un ingreso superior a 50k y 5021 debajo. El clasificador, sin embargo, predijo 617 hogares con ingresos superiores a 50k.

Puede calcular la precisión calculando el recuento cuando la etiqueta se clasifica correctamente sobre el número total de filas.

0.8237611759357478

Puede envolver todo junto y escribir una función para calcular la precisión.

Métricas de ROC

El módulo BinaryClassificationEvaluator incluye las medidas ROC. La curva Característica Operativa del Receptor es otra herramienta común utilizada con la clasificación binaria. Es muy similar a la curva de precisión/recuperación, pero en lugar de trazar precisión versus recuperación, la curva ROC muestra la tasa positiva real (es decir, recuperación) frente a la tasa positiva falsa. La tasa de falsos positivos es la proporción de instancias negativas que se clasifican incorrectamente como positivas. Es igual a uno menos la tasa negativa verdadera. La verdadera tasa negativa también se llama especificidad. Por lo tanto, la curva ROC traza sensibilidad (recuerdo) versus especificidad 1

0.8940481662695192AreaUnderROC

0.8940481662695192

Paso 6) Ajuste el hiperparámetro

Por último, pero no menos importante, puede ajustar los hiperparámetros. Similar a scikit aprender que crea una cuadrícula de parámetros, y agrega los parámetros que desea ajustar. Para reducir el tiempo del cálculo, sólo se ajusta el parámetro de regularización con dos valores.

Finalmente, se evalúa el modelo utilizando el método de valiación cruzada con 5 pliegues. Se tarda unos 16 minutos en tren.

Tiempo para entrenar modelo: 978.807 segundos

El mejor hiperparámetro de regularización es 0.01, con una precisión de 85.316 por ciento.

Puede exctar el parámetro recomendado encadenando CVModel.bestModel con ExtractParamMap ()

Resumen

Spark es una herramienta fundamental para un científico de datos. Permite al practicante conectar una aplicación a diferentes fuentes de datos, realizar análisis de datos sin problemas o agregar un modelo predictivo.

Para comenzar con Spark, debe iniciar un Contexto de Spark con:

sparkContext ()

y SQL para conectarse a un origen de datos:

sqlContext () `

En el tutorial aprenderás a entrenar una regresión logística:

1. Convierta el conjunto de datos en un marco de datos con:

Tenga en cuenta que el nombre de columna de la etiqueta es newlabel y que todas las entidades se reúnen en entidades. Cambie estos valores si son diferentes en el dataset.

2. Crear el tren o conjunto de pruebas


3. Entrenar el modelo


4. Hacer predicción
0 replies

Leave a Reply

Want to join the discussion?
Feel free to contribute!

Leave a Reply

Your email address will not be published. Required fields are marked *