Spark MLlib: biblioteca de aprendizaje automático de Apache Spark



Este blog de Spark MLlib le presentará la biblioteca de aprendizaje automático de Apache Spark. Incluye un proyecto de sistema de recomendación de películas que utiliza Spark MLlib.

Spark MLlib es el componente de aprendizaje automático de Apache Spark.Uno de los principales atractivos de Spark es la capacidad de escalar la computación de forma masiva, y eso es exactamente lo que necesita para los algoritmos de aprendizaje automático. Pero la limitación es que todos los algoritmos de aprendizaje automático no se pueden paralelizar de manera efectiva. Cada algoritmo tiene sus propios desafíos para la paralelización, ya sea el paralelismo de tareas o el paralelismo de datos.

Dicho esto, Spark se está convirtiendo en la plataforma de facto para crear algoritmos y aplicaciones de aprendizaje automático.Bueno, puedes ver el seleccionados por expertos de la industria antes de continuar con el blog.Los desarrolladores que trabajan en Spark MLlib están implementando cada vez más algoritmos de máquina de manera escalable y concisa en el marco de Spark. A través de este blog, aprenderemos los conceptos de Machine Learning, Spark MLlib, sus utilidades, algoritmos y un caso de uso completo del Sistema de Recomendación de Películas.





Los siguientes temas se tratarán en este blog:

  1. ¿Qué es el aprendizaje automático?
  2. Descripción general de Spark MLlib
  3. Herramientas Spark MLlib
  4. Algoritmos MLlib
  5. Caso de uso: sistema de recomendación de películas

¿Qué es el aprendizaje automático?

Desarrollado a partir del estudio del reconocimiento de patrones y la teoría del aprendizaje computacional en inteligencia artificial, el aprendizaje automático explora el estudio y la construcción de algoritmos que pueden aprender de los datos y hacer predicciones sobre ellos; dichos algoritmos superan el seguimiento de instrucciones de programas estrictamente estáticas al realizar predicciones o decisiones basadas en datos. , mediante la construcción de un modelo a partir de entradas de muestra.



Aprendizaje automático - Spark MLlib - Edureka Figura: Herramientas de aprendizaje automático

El aprendizaje automático está estrechamente relacionado con la estadística computacional, que también se centra en la elaboración de predicciones mediante el uso de computadoras. Tiene fuertes vínculos con la optimización matemática, que ofrece métodos, teoría y dominios de aplicación al campo. Dentro del campo de la analítica de datos, el aprendizaje automático es un método utilizado para idear modelos y algoritmos complejos que se prestan a una predicción que en uso comercial se conoce como analítica predictiva.

Hay tres categorías de tareas de aprendizaje automático:



  1. Aprendizaje supervisado : El aprendizaje supervisado es donde tiene variables de entrada (x) y una variable de salida (Y) y usa un algoritmo para aprender la función de mapeo desde la entrada hasta la salida.
  2. Aprendizaje sin supervisión : El aprendizaje no supervisado es un tipo de algoritmo de aprendizaje automático que se utiliza para extraer inferencias de conjuntos de datos que consisten en datos de entrada sin respuestas etiquetadas.
  3. Aprendizaje reforzado : Un programa de computadora interactúa con un entorno dinámico en el que debe realizar un objetivo determinado (como conducir un vehículo o jugar un juego contra un oponente). El programa recibe retroalimentación en términos de recompensas y castigos mientras navega por su espacio de problemas.Este concepto se llama aprendizaje por refuerzo.

Descripción general de Spark MLlib

Spark MLlib se usa para realizar aprendizaje automático en Apache Spark. MLlib consta de algoritmos y utilidades populares.

Descripción general de MLlib:

  • spark.mllib contiene la API original construida sobre RDD. Actualmente se encuentra en modo de mantenimiento.
  • spark.ml proporciona una API de nivel superior construida sobre DataFrames paraconstrucción de canalizaciones de ML. spark.ml es la API de aprendizaje automático principal para Spark en este momento.

Herramientas Spark MLlib

Spark MLlib proporciona las siguientes herramientas:

  • Algoritmos ML: Los algoritmos ML forman el núcleo de MLlib. Estos incluyen algoritmos de aprendizaje comunes como clasificación, regresión, agrupación y filtrado colaborativo.
  • Caracterización: La caracterización incluye extracción, transformación, reducción de dimensionalidad y selección de características.
  • Tuberías: Las canalizaciones proporcionan herramientas para construir, evaluar y ajustar ML Pipelines.
  • Persistencia: La persistencia ayuda a guardar y cargar algoritmos, modelos y canalizaciones.
  • Utilidades: Utilidadespara álgebra lineal, estadística y manejo de datos.

Algoritmos MLlib

Los algoritmos y utilidades populares en Spark MLlib son:

  1. Estadísticas básicas
  2. Regresión
  3. Clasificación
  4. Sistema de recomendación
  5. Clustering
  6. Reducción de dimensionalidad
  7. Extracción de características
  8. Mejoramiento

Veamos algunos de estos en detalle.

Estadísticas básicas

Estadísticas básicas incluye las técnicas de aprendizaje automático más básicas. Éstos incluyen:

  1. Resumen estadístico : Los ejemplos incluyen media, varianza, recuento, máximo, mínimo y numNonZeros.
  2. Correlaciones : Spearman y Pearson son algunas formas de encontrar la correlación.
  3. Muestreo estratificado : Estos incluyen sampleBykey y sampleByKeyExact.
  4. Prueba de hipótesis : La prueba de chi-cuadrado de Pearson es un ejemplo de prueba de hipótesis.
  5. Generación de datos aleatorios : RandomRDD, Normal y Poisson se utilizan para generar datos aleatorios.

Regresión

Regresión El análisis es un proceso estadístico para estimar las relaciones entre variables. Incluye muchas técnicas para modelar y analizar varias variables cuando el foco está en la relación entre una variable dependiente y una o más variables independientes. Más específicamente, el análisis de regresión ayuda a comprender cómo cambia el valor típico de la variable dependiente cuando se varía cualquiera de las variables independientes, mientras que las otras variables independientes se mantienen fijas.

El análisis de regresión se usa ampliamente para la predicción y el pronóstico, donde su uso se superpone sustancialmente con el campo del aprendizaje automático. El análisis de regresión también se utiliza para comprender cuáles de las variables independientes están relacionadas con la variable dependiente y para explorar las formas de estas relaciones. En circunstancias restringidas, el análisis de regresión se puede utilizar para inferir relaciones causales entre las variables independientes y dependientes.

Clasificación

Clasificación Es el problema de identificar a cuál de un conjunto de categorías (subpoblaciones) pertenece una nueva observación, sobre la base de un conjunto de entrenamiento de datos que contiene observaciones (o instancias) cuya pertenencia a la categoría es conocida. Es un ejemplo de reconocimiento de patrones.

Aquí, un ejemplo sería asignar un correo electrónico dado en clases de 'spam' o 'no spam' o asignar un diagnóstico a un paciente determinado según lo descrito por las características observadas del paciente (sexo, presión arterial, presencia o ausencia de ciertos síntomas, etc.).

Sistema de recomendación

A sistema de recomendación es una subclase de sistema de filtrado de información que busca predecir la 'calificación' o 'preferencia' que un usuario le daría a un artículo. Los sistemas de recomendación se han vuelto cada vez más populares en los últimos años y se utilizan en una variedad de áreas que incluyen películas, música, noticias, libros, artículos de investigación, consultas de búsqueda, etiquetas sociales y productos en general.

Los sistemas de recomendación suelen producir una lista de recomendaciones de una de dos maneras: a través del filtrado colaborativo y basado en el contenido o el enfoque basado en la personalidad.

  1. Filtración colaborativa enfoques para construir un modelo a partir del comportamiento pasado de un usuario (artículos comprados o seleccionados previamente y / o calificaciones numéricas otorgadas a esos artículos), así como decisiones similares tomadas por otros usuarios. Este modelo se utiliza luego para predecir elementos (o calificaciones de elementos) en los que el usuario puede tener interés.
  2. Filtrado basado en contenido Los enfoques utilizan una serie de características discretas de un artículo para recomendar artículos adicionales con propiedades similares.

Además, estos enfoques a menudo se combinan como sistemas de recomendación híbridos.

Clustering

Clustering es la tarea de agrupar un conjunto de objetos de tal manera que los objetos de un mismo grupo (llamado clúster) sean más similares (en un sentido u otro) entre sí que a los de otros grupos (clústeres). Por lo tanto, es la tarea principal de la minería de datos exploratoria y una técnica común para el análisis de datos estadísticos, utilizada en muchos campos, incluido el aprendizaje automático, el reconocimiento de patrones, el análisis de imágenes, la recuperación de información, la bioinformática, la compresión de datos y los gráficos por computadora.

Reducción de dimensionalidad

Reducción de dimensionalidad es el proceso de reducir el número de variables aleatorias consideradas, mediante la obtención de un conjunto de variables principales. Se puede dividir en selección de características y extracción de características.

  1. Selección de características: La selección de características busca un subconjunto de las variables originales (también llamadas características o atributos).
  2. Extracción de características: Esto transforma los datos en el espacio de alta dimensión en un espacio de menos dimensiones. La transformación de datos puede ser lineal, como en el Análisis de componentes principales (PCA), pero también existen muchas técnicas de reducción de dimensionalidad no lineal.

Extracción de características

Extracción de características comienza a partir de un conjunto inicial de datos medidos y construye valores derivados (características) destinados a ser informativos y no redundantes, facilitando los pasos posteriores de aprendizaje y generalización y, en algunos casos, conduciendo a mejores interpretaciones humanas. Esto está relacionado con la reducción de la dimensionalidad.

Mejoramiento

Mejoramiento es la selección de los mejoreselemento (con respecto a algún criterio) de algún conjunto de alternativas disponibles.

En el caso más simple, un problema de optimización consiste en maximizar o minimizar una función real eligiendo sistemáticamente valores de entrada dentro de un conjunto permitido y calculando el valor de la función. La generalización de la teoría y las técnicas de optimización a otras formulaciones comprende una gran área de matemáticas aplicadas. De manera más general, la optimización incluye encontrar los valores 'mejores disponibles' de alguna función objetivo dado un dominio definido (o entrada),incluyendo una variedad de diferentes tipos de funciones objetivas y diferentes tipos de dominios.

Caso de uso: sistema de recomendación de películas

Planteamiento del problema: Crear un sistema de recomendación de películas que recomiende películas en función de las preferencias del usuario mediante Apache Spark.

Nuestras necesidades:

Entonces, evaluemos los requisitos para construir nuestro sistema de recomendación de películas:

  1. Procesar una gran cantidad de datos
  2. Entrada de múltiples fuentes
  3. Fácil de usar
  4. Procesamiento rápido

Como podemos evaluarnuestros requisitos, necesitamos la mejor herramienta de Big Data para procesar grandes datos en poco tiempo. Por lo tanto, Apache Spark es la herramienta perfecta para implementar nuestro sistema de recomendación de películas.

Veamos ahora el diagrama de flujo de nuestro sistema.

Como podemos ver, lo siguiente usa Streaming de Spark Streaming. Podemos transmitir en tiempo real o leer datos de Hadoop HDFS.

Obtener conjunto de datos:

Para nuestro sistema de recomendación de películas, podemos obtener calificaciones de usuarios de muchos sitios web populares como IMDB, Rotten Tomatoes y Times Movie Ratings. Este conjunto de datos está disponible en muchos formatos, como archivos CSV, archivos de texto ynd bases de datos. Podemos transmitir los datos en vivo desde los sitios web o descargarlos y almacenarlos ennuestro sistema de archivos local o HDFS.

Conjunto de datos:

La siguiente figura muestra cómo podemos recopilar conjuntos de datos de sitios web populares.

Una vez que transmitimos los datos a Spark, se parece a esto.

Aprendizaje automático:

Todo el sistema de recomendaciones se basa en el algoritmo de Machine Learning Mínimos cuadrados alternos . Aquí, ALS es un tipo de análisis de regresión donde la regresión se usa para dibujar una línea entre los puntos de datos de tal manera que la suma de los cuadrados de la distancia desde cada punto de datos se minimice. Por lo tanto, esta línea se usa para predecir los valores de la función donde se encuentra con el valor de la variable independiente.

La línea azul en el diagrama es la línea de regresión que mejor se ajusta. Para esta línea, el valor de la dimensión D es mínimo. Todas las demás líneas rojas siempre estarán más lejos del conjunto de datos en su conjunto.

Implementación de Spark MLlib:

  1. Usaremos el filtrado colaborativo (CF) para predecir las calificaciones de los usuarios para películas en particular en función de sus calificaciones para otras películas.
  2. Luego, colaboramos con la calificación de otros usuarios para esa película en particular.
  3. Para obtener los siguientes resultados de nuestro aprendizaje automático, necesitamos utilizar el DataFrame, el conjunto de datos y el servicio SQL de Spark SQL.

Aquí está el pseudocódigo de nuestro programa:

que son los tokens en java
import org.apache.spark.mllib.recommendation.ALS import org.apache.spark.mllib.recommendation.Rating import org.apache.spark.SparkConf // Importar otros paquetes necesarios object Movie {def main (args: Array [String] ) {val conf = new SparkConf (). setAppName ('Movie'). setMaster ('local [2]') val sc = new SparkContext (conf) val rawData = sc.textFile ('* Leer datos del archivo CSV de la película * ') //rawData.first () val rawRatings = rawData.map (* Dividir rawData en el delimitador de tabulación *) val ratings = rawRatings.map {* Matriz de casos de mapa de usuario, película y calificación *} // Entrenamiento del modelo val de datos = ALS.train (ratings, 50, 5, 0.01) model.userFeatures model.userFeatures.count model.productFeatures.count val predictedRating = * Predecir para el usuario 789 para la película 123 * val userId = * usuario 789 * val K = 10 val topKRecs = model.recommendProducts (* Recomendado para el usuario para el valor particular de K *) println (topKRecs.mkString ('')) val películas = sc.textFile ('* Leer datos de lista de películas *') val títulos = películas.map (línea => línea.split ('|'). tomar ( 2)). Map (array => (array (0) .toInt, array (1))). CollectAsMap () val titleRDD = movies.map (line => line.split ('|'). Take (2) ) .map (array => (array (0) .toInt, array (1))). cache () títulos (123) val moviesForUser = calificaciones. * Buscar usuario 789 * val sqlContext = * Crear contexto SQL * val películasRecomendado = sqlContext. * Crear un DataFrame de películas recomendadas * moviesRecommended.registerTempTable ('moviesRecommendedTable') sqlContext.sql ('Seleccionar recuento (*) de moviesRecommendedTable'). foreach (println) moviesForUser. * Ordene las calificaciones para el usuario 789 * .map (* Asigne la calificación al título de la película *). * Imprime la calificación * val resultados = moviesForUser.sortBy (-_. Rating) .take (30) .map (rating => (títulos (rating.product), rating.rating))}}

Una vez que generamos predicciones, podemos usar Spark SQL para almacenar los resultados en un sistema RDBMS. Además, esto se puede mostrar en una aplicación web.

Resultados:

Figura: Películas recomendadas para el usuario 77

¡Viva! Por lo tanto, hemos creado con éxito un sistema de recomendación de películas utilizando Apache Spark. Con esto, hemos cubierto solo uno de los muchos algoritmos populares que Spark MLlib tiene para ofrecer. Aprenderemos más sobre Machine Learning en los próximos blogs sobre algoritmos de ciencia de datos.

Continuando, puede continuar aprendiendo Apache Spark con Spark Tutorial, Spark Streaming Tutorialy Preguntas de la entrevista de Spark.Edureka se dedica a brindar la mejor experiencia de aprendizaje posible en línea.

Echa un vistazo a nuestro yo Si desea aprender Spark y desarrollar una carrera en el dominio de Spark y adquirir experiencia para realizar Procesamiento de datos a gran escala utilizando RDD, Spark Streaming, SparkSQL, MLlib, GraphX ​​y Scala con casos de uso de la vida real.