Maison développement back-end Tutoriel Python Pourquoi vous avez besoin de l'informatique distribuée pour l'apprentissage automatique dans le monde réel

Pourquoi vous avez besoin de l'informatique distribuée pour l'apprentissage automatique dans le monde réel

Sep 10, 2024 am 06:49 AM

Why You Need Distributed Computing for Real-World Machine Learning

Et comment PySpark peut vous aider à gérer d'énormes ensembles de données comme un pro

Les frameworks d'apprentissage automatique comme PyTorch et TensorFlow sont géniaux pour créer des modèles. Mais la réalité est que lorsqu’il s’agit de projets réels, où vous traitez de gigantesques ensembles de données, vous avez besoin de plus qu’un simple bon modèle. Vous avez besoin d’un moyen de traiter et de gérer efficacement toutes ces données. C'est là que l'informatique distribuée, comme PySpark, entre en jeu pour sauver la situation.

Expliquons pourquoi la gestion du Big Data dans le monde réel de l'apprentissage automatique signifie aller au-delà de PyTorch et TensorFlow, et comment PySpark vous aide à y parvenir.
Le vrai problème : le Big Data
La plupart des exemples de ML que vous voyez en ligne utilisent de petits ensembles de données gérables. Vous pouvez mettre le tout en mémoire, jouer avec et entraîner un modèle en quelques minutes. Mais dans des scénarios réels, comme la détection de fraude par carte de crédit, les systèmes de recommandation ou les prévisions financières, vous avez affaire à des millions, voire des milliards de lignes. Soudain, votre ordinateur portable ou votre serveur ne peut plus le gérer.

Si vous essayez de charger toutes ces données dans PyTorch ou TensorFlow en même temps, les choses vont se casser. Ces frameworks sont conçus pour la formation de modèles, et non pour gérer efficacement d'énormes ensembles de données. C'est là que l'informatique distribuée devient cruciale.
Pourquoi PyTorch et TensorFlow ne suffisent pas
PyTorch et TensorFlow sont parfaits pour créer et optimiser des modèles, mais ils ne sont pas à la hauteur lorsqu'il s'agit de tâches de données à grande échelle. Deux problèmes majeurs :

  • Surcharge de mémoire : ils chargent l'intégralité de l'ensemble de données en mémoire avant l'entraînement. Cela fonctionne pour de petits ensembles de données, mais lorsque vous disposez de téraoctets de données, la partie est terminée.
  • Pas de traitement de données distribué : PyTorch et TensorFlow ne sont pas conçus pour gérer le traitement de données distribué. Si vous disposez d’énormes quantités de données réparties sur plusieurs machines, cela ne vous aide pas vraiment.

C'est là que PySpark brille. Il est conçu pour fonctionner avec des données distribuées, en les traitant efficacement sur plusieurs machines tout en gérant des ensembles de données volumineux sans faire planter votre système.

Exemple concret : Détection de fraude par carte de crédit avec PySpark
Prenons un exemple. Supposons que vous travailliez sur un système de détection de fraude utilisant les données de transactions par carte de crédit. Dans ce cas, nous utiliserons un ensemble de données populaire de Kaggle. Il contient plus de 284 000 transactions, et moins de 1 % d'entre elles sont frauduleuses.

Étape 1 : configurer PySpark dans Google Colab
Nous utiliserons Google Colab pour cela car il nous permet d'exécuter PySpark avec une configuration minimale.

!pip install pyspark

Copier après la connexion

Ensuite, importez les bibliothèques nécessaires et démarrez une session Spark.

import os
from pyspark.sql import SparkSession
from pyspark.sql.functions import col, sum, udf
from pyspark.ml.feature import VectorAssembler, StringIndexer, MinMaxScaler
from pyspark.ml.classification import RandomForestClassifier, GBTClassifier
from pyspark.ml.tuning import ParamGridBuilder, CrossValidator
from pyspark.ml.evaluation import BinaryClassificationEvaluator, MulticlassClassificationEvaluator
from pyspark.ml.linalg import Vectors
import numpy as np
from pyspark.sql.types import FloatType
Copier après la connexion

démarrer une session pyspark

spark = SparkSession.builder \
    .appName("FraudDetectionImproved") \
    .master("local[*]") \
    .config("spark.executorEnv.PYTHONHASHSEED", "0") \
    .getOrCreate()
Copier après la connexion

Étape 2 : Charger et préparer les données

data = spark.read.csv('creditcard.csv', header=True, inferSchema=True)
data = data.orderBy("Time")  # Ensure data is sorted by time
data.show(5)
data.describe().show()
Copier après la connexion
# Check for missing values in each column
data.select([sum(col(c).isNull().cast("int")).alias(c) for c in data.columns]).show()

# Prepare the feature columns
feature_columns = data.columns
feature_columns.remove("Class")  # Removing "Class" column as it is our label

# Assemble features into a single vector
assembler = VectorAssembler(inputCols=feature_columns, outputCol="features")
data = assembler.transform(data)
data.select("features", "Class").show(5)

# Split data into train (60%), test (20%), and unseen (20%)
train_data, temp_data = data.randomSplit([0.6, 0.4], seed=42)
test_data, unseen_data = temp_data.randomSplit([0.5, 0.5], seed=42)

# Print class distribution in each dataset
print("Train Data:")
train_data.groupBy("Class").count().show()

print("Test and parameter optimisation Data:")
test_data.groupBy("Class").count().show()

print("Unseen Data:")
unseen_data.groupBy("Class").count().show()
Copier après la connexion

Étape 3 : Initialiser le modèle

# Initialize RandomForestClassifier
rf = RandomForestClassifier(labelCol="Class", featuresCol="features", probabilityCol="probability")

# Create ParamGrid for Cross Validation
paramGrid = ParamGridBuilder() \
    .addGrid(rf.numTrees, [10, 20 ]) \
    .addGrid(rf.maxDepth, [5, 10]) \
    .build()

# Create 5-fold CrossValidator
crossval = CrossValidator(estimator=rf,
                          estimatorParamMaps=paramGrid,
                          evaluator=BinaryClassificationEvaluator(labelCol="Class", metricName="areaUnderROC"),
                          numFolds=5)
Copier après la connexion

Étape 4 : Ajuster, exécuter la validation croisée et choisir le meilleur ensemble de paramètres

# Run cross-validation, and choose the best set of parameters
rf_model = crossval.fit(train_data)

# Make predictions on test data
predictions_rf = rf_model.transform(test_data)

# Evaluate Random Forest Model
binary_evaluator = BinaryClassificationEvaluator(labelCol="Class", rawPredictionCol="rawPrediction", metricName="areaUnderROC")
pr_evaluator = BinaryClassificationEvaluator(labelCol="Class", rawPredictionCol="rawPrediction", metricName="areaUnderPR")

auc_rf = binary_evaluator.evaluate(predictions_rf)
auprc_rf = pr_evaluator.evaluate(predictions_rf)
print(f"Random Forest - AUC: {auc_rf:.4f}, AUPRC: {auprc_rf:.4f}")

# UDF to extract positive probability from probability vector
extract_prob = udf(lambda prob: float(prob[1]), FloatType())
predictions_rf = predictions_rf.withColumn("positive_probability", extract_prob(col("probability")))
Copier après la connexion

Étape 5 Fonction pour calculer la précision, le rappel et le score F1

# Function to calculate precision, recall, and F1-score
def calculate_metrics(predictions):
    tp = predictions.filter((col("Class") == 1) & (col("prediction") == 1)).count()
    fp = predictions.filter((col("Class") == 0) & (col("prediction") == 1)).count()
    fn = predictions.filter((col("Class") == 1) & (col("prediction") == 0)).count()

    precision = tp / (tp + fp) if (tp + fp) != 0 else 0
    recall = tp / (tp + fn) if (tp + fn) != 0 else 0
    f1_score = (2 * precision * recall) / (precision + recall) if (precision + recall) != 0 else 0

    return precision, recall, f1_score
Copier après la connexion

Étape 6 : Trouver le meilleur seuil pour le modèle

# Find the best threshold for the model
best_threshold = 0.5
best_f1 = 0
for threshold in np.arange(0.1, 0.9, 0.1):
    thresholded_predictions = predictions_rf.withColumn("prediction", (col("positive_probability") > threshold).cast("double"))
    precision, recall, f1 = calculate_metrics(thresholded_predictions)

    if f1 > best_f1:
        best_f1 = f1
        best_threshold = threshold

print(f"Best threshold: {best_threshold}, Best F1-score: {best_f1:.4f}")
Copier après la connexion

Étape 7 : Évaluer sur des données invisibles

# Evaluate on unseen data
predictions_unseen = rf_model.transform(unseen_data)
auc_unseen = binary_evaluator.evaluate(predictions_unseen)
print(f"Unseen Data - AUC: {auc_unseen:.4f}")

precision, recall, f1 = calculate_metrics(predictions_unseen)
print(f"Unseen Data - Precision: {precision:.4f}, Recall: {recall:.4f}, F1-score: {f1:.4f}")

area_under_roc = binary_evaluator.evaluate(predictions_unseen)
area_under_pr = pr_evaluator.evaluate(predictions_unseen)
print(f"Unseen Data - AUC: {area_under_roc:.4f}, AUPRC: {area_under_pr:.4f}")
Copier après la connexion

RESULTATS

Best threshold: 0.30000000000000004, Best F1-score: 0.9062
Unseen Data - AUC: 0.9384
Unseen Data - Precision: 0.9655, Recall: 0.7568, F1-score: 0.8485
Unseen Data - AUC: 0.9423, AUPRC: 0.8618
Copier après la connexion

Vous pouvez ensuite enregistrer ce modèle (quelques Ko) et l'utiliser n'importe où dans le pipeline pyspark

rf_model.save()
Copier après la connexion

Voici pourquoi PySpark fait une énorme différence lorsqu'il s'agit de traiter de grands ensembles de données dans des tâches d'apprentissage automatique réelles :

Il évolue facilement : PySpark peut répartir les tâches entre les clusters, vous permettant de traiter des téraoctets de données sans manquer de mémoire.
Traitement des données à la volée : PySpark n'a pas besoin de charger l'intégralité de l'ensemble de données en mémoire. Il traite les données selon les besoins, ce qui le rend beaucoup plus efficace.
Formation de modèles plus rapide : grâce à l'informatique distribuée, vous pouvez entraîner des modèles plus rapidement en répartissant la charge de travail de calcul sur plusieurs machines.
Pensées finales
PyTorch et TensorFlow sont des outils fantastiques pour créer des modèles d'apprentissage automatique, mais pour les tâches réelles à grande échelle, vous avez besoin de plus. L'informatique distribuée avec PySpark vous permet de gérer efficacement d'énormes ensembles de données, de traiter les données en temps réel et de faire évoluer vos pipelines d'apprentissage automatique.

Alors, la prochaine fois que vous travaillerez avec des données massives, qu'il s'agisse de détection de fraude, de systèmes de recommandation ou d'analyse financière, pensez à utiliser PySpark pour faire passer votre projet au niveau supérieur.

Pour le code complet et les résultats, consultez ce carnet. :
https://colab.research.google.com/drive/1W9naxNZirirLRodSEnHAUWevYd5LH8D4?authuser=5#scrollTo=odmodmqKcY23

__

Je suis Swapnil, n'hésitez pas à laisser vos commentaires, résultats et idées, ou envoyez-moi un ping - swapnil@nooffice.no pour les données, les concerts et les emplois de développement de logiciels

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

<🎜>: Bubble Gum Simulator Infinity - Comment obtenir et utiliser les clés royales
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
<🎜>: Grow A Garden - Guide de mutation complet
3 Il y a quelques semaines By DDD
Nordhold: Système de fusion, expliqué
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers of the Witch Tree - Comment déverrouiller le grappin
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Tutoriel Java
1673
14
Tutoriel PHP
1278
29
Tutoriel C#
1257
24
Python vs C: courbes d'apprentissage et facilité d'utilisation Python vs C: courbes d'apprentissage et facilité d'utilisation Apr 19, 2025 am 12:20 AM

Python est plus facile à apprendre et à utiliser, tandis que C est plus puissant mais complexe. 1. La syntaxe Python est concise et adaptée aux débutants. Le typage dynamique et la gestion automatique de la mémoire le rendent facile à utiliser, mais peuvent entraîner des erreurs d'exécution. 2.C fournit des fonctionnalités de contrôle de bas niveau et avancées, adaptées aux applications haute performance, mais a un seuil d'apprentissage élevé et nécessite une gestion manuelle de la mémoire et de la sécurité.

Apprendre Python: 2 heures d'étude quotidienne est-elle suffisante? Apprendre Python: 2 heures d'étude quotidienne est-elle suffisante? Apr 18, 2025 am 12:22 AM

Est-ce suffisant pour apprendre Python pendant deux heures par jour? Cela dépend de vos objectifs et de vos méthodes d'apprentissage. 1) Élaborer un plan d'apprentissage clair, 2) Sélectionnez les ressources et méthodes d'apprentissage appropriées, 3) la pratique et l'examen et la consolidation de la pratique pratique et de l'examen et de la consolidation, et vous pouvez progressivement maîtriser les connaissances de base et les fonctions avancées de Python au cours de cette période.

Python vs. C: Explorer les performances et l'efficacité Python vs. C: Explorer les performances et l'efficacité Apr 18, 2025 am 12:20 AM

Python est meilleur que C dans l'efficacité du développement, mais C est plus élevé dans les performances d'exécution. 1. La syntaxe concise de Python et les bibliothèques riches améliorent l'efficacité du développement. Les caractéristiques de type compilation et le contrôle du matériel de CC améliorent les performances d'exécution. Lorsque vous faites un choix, vous devez peser la vitesse de développement et l'efficacité de l'exécution en fonction des besoins du projet.

Python vs C: Comprendre les principales différences Python vs C: Comprendre les principales différences Apr 21, 2025 am 12:18 AM

Python et C ont chacun leurs propres avantages, et le choix doit être basé sur les exigences du projet. 1) Python convient au développement rapide et au traitement des données en raison de sa syntaxe concise et de son typage dynamique. 2) C convient à des performances élevées et à une programmation système en raison de son typage statique et de sa gestion de la mémoire manuelle.

Quelle partie fait partie de la bibliothèque standard Python: listes ou tableaux? Quelle partie fait partie de la bibliothèque standard Python: listes ou tableaux? Apr 27, 2025 am 12:03 AM

PythonlistSaReparmentofthestandardLibrary, tandis que les coloccules de colocède, tandis que les colocculations pour la base de la Parlementaire, des coloments de forage polyvalent, tandis que la fonctionnalité de la fonctionnalité nettement adressée.

Python: automatisation, script et gestion des tâches Python: automatisation, script et gestion des tâches Apr 16, 2025 am 12:14 AM

Python excelle dans l'automatisation, les scripts et la gestion des tâches. 1) Automatisation: La sauvegarde du fichier est réalisée via des bibliothèques standard telles que le système d'exploitation et la fermeture. 2) Écriture de script: utilisez la bibliothèque PSUTIL pour surveiller les ressources système. 3) Gestion des tâches: utilisez la bibliothèque de planification pour planifier les tâches. La facilité d'utilisation de Python et la prise en charge de la bibliothèque riche en font l'outil préféré dans ces domaines.

Python pour l'informatique scientifique: un look détaillé Python pour l'informatique scientifique: un look détaillé Apr 19, 2025 am 12:15 AM

Les applications de Python en informatique scientifique comprennent l'analyse des données, l'apprentissage automatique, la simulation numérique et la visualisation. 1.Numpy fournit des tableaux multidimensionnels et des fonctions mathématiques efficaces. 2. Scipy étend la fonctionnalité Numpy et fournit des outils d'optimisation et d'algèbre linéaire. 3. Pandas est utilisé pour le traitement et l'analyse des données. 4.Matplotlib est utilisé pour générer divers graphiques et résultats visuels.

Python pour le développement Web: applications clés Python pour le développement Web: applications clés Apr 18, 2025 am 12:20 AM

Les applications clés de Python dans le développement Web incluent l'utilisation des cadres Django et Flask, le développement de l'API, l'analyse et la visualisation des données, l'apprentissage automatique et l'IA et l'optimisation des performances. 1. Framework Django et Flask: Django convient au développement rapide d'applications complexes, et Flask convient aux projets petits ou hautement personnalisés. 2. Développement de l'API: Utilisez Flask ou DjangorestFramework pour construire RestulAPI. 3. Analyse et visualisation des données: utilisez Python pour traiter les données et les afficher via l'interface Web. 4. Apprentissage automatique et AI: Python est utilisé pour créer des applications Web intelligentes. 5. Optimisation des performances: optimisée par la programmation, la mise en cache et le code asynchrones

See all articles