Introduction à Spark MLlib pour Big Data et Machine Learning

Contenu

Cet article a été publié dans le cadre de la Blogathon sur la science des données.

Vue d'ensemble

introduction

Apache Spark est un framework de traitement de données qui peut rapidement effectuer des tâches de traitement sur de très grands ensembles de données et peut également répartir les tâches de traitement de données sur plusieurs ordinateurs., soit seul, soit en conjonction avec d’autres outils informatiques distribués. Il s’agit d’un moteur d’analyse unifié ultra-rapide pour le Big Data et l’apprentissage automatique.

Pour prendre en charge Python avec Spark, La communauté Apache Spark a publié un outil, PySpark. Avec Pyspark, vous pouvez travailler avec RDD dans le langage de programmation python.

Les composants Spark sont:

  1. Noyau d'étincelle
  2. Spark SQL
  3. Diffusion Spark
  4. Étincelle MLlib
  5. GraphX
  6. Étincelle R
Étincelle MLlib

Noyau d'étincelle

Toutes les fonctionnalités fournies par Apache Spark sont axées sur le haut de Spark Core. Gérer toutes les fonctionnalités E / Essentiel S. Utilisé pour la répartition des tâches et la récupération des pannes. Spark Core est intégré à une collection spéciale appelée RDD (jeu de données distribué résilient). RDD fait partie des abstractions de Spark. Spark RDD gère le partitionnement des données sur tous les nœuds d’un cluster. Les conserve dans le pool de mémoire du cluster en tant qu’unité unique. Deux opérations sont effectuées dans RDD:

Transformation: c’est une fonction qui produit de nouveaux rdds à partir de rdds existants.

action: En transformation, Les RDD sont créés les uns par rapport aux autres. Mais quand nous voulons travailler avec l’ensemble de données réel, ensuite, à ce moment-là, nous utilisons Action.

Spark SQL

Le composant Spark SQL est un framework distribué pour le traitement des données structurées. Spark SQL fonctionne pour entrer des informations structurées et semi-structurées. Il permet également des applications analytiques puissantes et interactives dans les données historiques et de transmission. DataFrames et SQL fournissent un moyen commun d’entrer une plage de sources de données. Sa principale caractéristique est d’être un optimiseur basé sur les coûts et la tolérance aux échecs de requête moyens..

Diffusion Spark

Il s’agit d’un module complémentaire à l’API principale de Spark qui permet un traitement de flux évolutif, transmissions de données en direct hautes performances et tolérantes aux pannes. Diffusion Spark, regroupe les données actives en petits lots. Il le livre ensuite au système par lots pour traitement. Fournit également des fonctionnalités de tolérance aux pannes.

Spark GraphX:

GraphX dans Spark est une API pour les graphiques et l’exécution de graphiques parallèles. Il s’agit d’un moteur d’analyse de graphes réseau et d’un entrepôt de données. Dans les graphiques, il est également possible de regrouper, classer par catégories, Scooch, rechercher et trouver des itinéraires.

SparkR:

SparkR fournit une implémentation de cadre de données distribuée. Prend en charge les opérations en tant que sélection, filtré, agrégation, mais dans de grands ensembles de données.

Étincelle MLlib:

Spark MLlib est utilisé pour effectuer l’apprentissage automatique dans Apache Spark. MLlib se compose d’algorithmes et d’utilitaires populaires. MLlib on Spark est une bibliothèque d’apprentissage automatique évolutive qui analyse à la fois des algorithmes de haute qualité et à grande vitesse. Algorithmes d’apprentissage automatique en tant que régression, classification, regroupement, exploration de modèles et filtrage collaboratif. Les primitives d’apprentissage automatique de niveau inférieur, en tant qu’algorithme générique d’optimisation de la descente de gradient, ils sont également présents dans MLlib.

Spark.ml est la principale API d’apprentissage automatique pour Spark. La bibliothèque Spark.ml offre une API de niveau supérieur construite sur DataFrames pour créer des pipelines ML.

Les outils Spark MLlib sont fournis ci-dessous:

  1. Algorithmes ML
  2. Caractérisation
  3. Pipelines
  4. Persistance
  5. Utilitaires
  1. Algorithmes ML

    Les algorithmes ML forment le cœur de MLlib. Ceux-ci incluent des algorithmes d’apprentissage courants tels que la classification., régression, regroupement et filtrage collaboratifs.

    MLlib standardise les API pour aider à combiner plusieurs algorithmes en un seul pipeline ou flux de travail. Les concepts clés sont les pipelines Api, où le concept de pipeline s’inspire du projet scikit-learn.

    Transformateur:

    Un transformateur est un algorithme qui peut transformer un DataFrame en un autre DataFrame. Techniquement, un transformateur implémente une méthode de transformation (), qui convertit un DataFrame en un autre, généralement en ajoutant une ou plusieurs colonnes. Par exemple:

    Un transformateur de fonctionnalités peut prendre un DataFrame, lire une colonne (par exemple, texte), l’affecter à une nouvelle colonne (par exemple, vecteurs d’entités) et générez un nouveau DataFrame avec la colonne affectée attachée.

    Un modèle d’apprentissage peut prendre un DataFrame, lire la colonne contenant les vecteurs d’entité, prédire la balise pour chaque vecteur d’entité et générer un nouveau DataFrame avec des balises prédites ajoutées sous forme de colonne.

    Estimateur:

    Un estimateur est un algorithme qui peut être monté sur un DataFrame pour produire un transformateur. Techniquement, un estimateur met en œuvre une méthode d’ajustement (), qui accepte un DataFrame et produit un Modèle, qui est un transformateur. Par exemple, un algorithme d’apprentissage tel que LogisticRegression est un estimateur, et appel fit () entraîne un LogisticRegressionModel, qui est un modèle et, pour cela, un transformateur.

    Transformer.transform () et Estimator.fit () sont apatrides. Dans le futur, Les algorithmes avec état peuvent être compatibles avec d’autres concepts.

    Chaque instance d’un transformateur ou d’un estimateur a un ID unique, ce qui est utile pour spécifier des paramètres (décrit ci-dessous).

  2. Caractérisation

    La caractérisation comprend l’extraction, transformation, diminution de la dimensionnalité et de la sélection des caractéristiques.

    1. L’extraction de fonctionnalités consiste à extraire des fonctionnalités à partir de données brutes.
    2. La transformation des fonctionnalités inclut la mise à l’échelle, renouveler ou modifier des fonctionnalités
    3. La sélection des fonctionnalités implique le choix d’un sous-ensemble de fonctionnalités indispensables parmi un grand ensemble de fonctionnalités.

  3. Tuyaux:

    Un pipeline enchaîne plusieurs transformateurs et estimateurs pour spécifier un flux de travail AA. Il fournit également des outils pour construire, parcourir et régler les pipelines ML.

    En apprentissage automatique, il est courant d’exécuter une séquence d’algorithmes pour traiter et apprendre des données. MLlib représente un flux de travail sous la forme d’un pipeline, qui est une séquence d’étapes de pipeline (Transformateurs et estimateurs) à exécuter dans un ordre spécifique. Nous utiliserons ce flux de travail simple comme exemple d’exécution dans cette section.

    Exemple: l’exemple de pipeline illustré ci-dessous effectue le prétraitement des données dans un ordre spécifique comme suit:

    1. Appliquer la méthode String Indexer pour rechercher l’index des colonnes catégorielles

    2. Appliquer le codage OneHot pour les colonnes catégorielles

    3. Appliquer l’indexeur de chaîne pour la colonne “étiqueter” de la variable de sortie

    4. VectorAssembler s’applique à la fois aux colonnes catégorielles et aux colonnes numériques. VectorAssembler est un transformateur qui combine une liste donnée de colonnes en une seule colonne vectorielle.

    Le flux de travail du pipeline exécutera la modélisation des données dans l’ordre spécifique ci-dessus.

    à partir de pyspark.ml.feature importer OneHotEncoderEstimator, StringIndexer, VectorAssembler
    categoricalColumns = [« emploi », « conjugal », « éducation », 'par défaut', « logement », « prêt »]
    étapes = []
    pour categoricalCol dans categoricalColumns:
        stringIndexer = StringIndexer(inputCol = categoricalCol, outputCol = categoricalCol + 'Indexeur')
        encoder = OneHotEncoderEstimator(inputCols=[stringIndexer.getOutputCol()], outputCols=[catégoriqueCol + "Vec"])
        étapes += [stringIndexer, encodeur]
    label_stringIdx = StringIndexer(inputCol="dépôt", outputCol="étiqueter")
    étapes += [label_stringIdx]
    numericColumns = ['âge', « équilibre », « durée »]
    assembleurInputs = [c + "Vec" pour c dans categoricalColumns] + numericColumns
    Vassembler = VectorAssembler(inputCols = assembleurInputs, outputCol="caractéristiques")
    étapes += [Vassembler]
    from pyspark.ml import Pipeline
    pipeline = Pipeline(étapes = étapes)
    pipelineModel = pipeline.fit(df)
    df = pipelineModel.transform(df)
    selectedCols = ['étiqueter', 'caractéristiques'] + cols
    df = df.select(sélectionnéCols)

    Trame de données

    Los marcos de datos proporcionan una API más fácil de utilizar que los RDD. L’API basée sur DataFrame pour MLlib fournit une API cohérente dans tous les algorithmes ML et dans plusieurs langues. Les infrastructures de données facilitent les pipelines d’apprentissage automatique pratiques, en particulier les transformations de fonctionnalités.

    from pyspark.sql import SparkSession
    spark = SparkSession.builder.appName('mlearnsample').obtenirOuCréer()
    df = spark.read.csv(« loan_bank.csv », en-tête = Vrai, inferSchema = Vrai)
    df.printSchema()
  4. Persistance:

    La persistance permet d’enregistrer et de charger des algorithmes, modèles et pipelines. Cela permet de réduire le temps et les efforts, puisque le modèle est persistant, peut être chargé / réutiliser à tout moment si nécessaire.

    from pyspark.ml.classification import LogisticRegression
    lr = LogisticRegression(caractéristiquesCol="caractéristiques", labelCol="étiqueter")
    lrModel = lr.fit(former)

    à partir de pyspark.ml.evaluation importer BinaryClassificationEvaluator

    évaluateur = BinaryClassificationEvaluator ()

    imprimer (« Zone d’essai sous ROC », évaluateur.évaluer (prédictions))

    
    
    prédictions = lrModel.transform(test)
    prédictions.select('âge', 'étiqueter', 'rawPrediction', 'prédiction').spectacle()
  5. Utilitaires:

    Utilitaires pour l’algèbre linéaire, statistiques et traitement des données. Exemple: mllib.linalg sont les utilitaires MLlib pour l’algèbre linéaire.

Matériel de référence:

https://spark.apache.org/docs/latest/ml-guide.html

Remarques finales

Spark MLlib est nécessaire s’il s’agit de Big Data et de machine learning. Dans ce billet, a appris les détails de Spark MLlib, cadres de données et pipelines. Dans le futur article, nous travaillerons sur du code pratique pour implémenter des pipelines et construire des modèles de données à l’aide de MLlib.

Abonnez-vous à notre newsletter

Nous ne vous enverrons pas de courrier SPAM. Nous le détestons autant que vous.