Maison >développement back-end >Tutoriel Python >Apprivoiser la bête du pipeline d'apprentissage automatique : édition ZenML

Apprivoiser la bête du pipeline d'apprentissage automatique : édition ZenML

Patricia Arquette
Patricia Arquetteoriginal
2024-11-27 02:07:14727parcourir

Taming the Machine Learning Pipeline Beast: ZenML Edition

Introduction au Zen de ZenML

Attachez votre ceinture, car nous partons pour un voyage de la jungle de Jupyter au nirvana ZenML. Non, ZenML ne fera pas de vous un maître de méditation, mais il va fera de vous un pro du pipeline. Alors, mettez de côté vos 100 lignes de code spaghetti ; il est temps de faire appel aux gros canons.

Pour suivre, installez ZenML (croyez-moi, c'est plus facile que d'expliquer à votre patron pourquoi votre dernier modèle est tombé en panne). Les Types comptent ici, donc pas de codage freestyle ; nous en parlerons au fur et à mesure.

Tout d'abord : les pipelines sacrés.py

Créez un nouveau fichier appelé pipelines.py. Dans ce chef-d’œuvre, nous allons construire notre pipeline, quelque chose d’un peu plus propre qu’un fouillis de traitement de données. Commencez avec le décorateur de pipeline de ZenML :

from zenml import pipeline

@pipeline(name="used_car_price_predictor")
def ml_pipeline():
    # We’ll fill in these dots soon.
    ...

Étape 1 : Ingestion de données, c'est-à-dire ouverture du Zip de Pandora

Voici notre première étape ZenML, où nous lirons les données d'un fichier .zip (car, bien sûr, les données ne sont jamais présentées dans de simples fichiers CSV). Découvrez notre fonction data_ingestion_step, où nous importons les données et les jetons dans un artefact – un terme ZenML signifiant « nous transmettons ce désordre à l'étape suivante, mais c'est techniquement sophistiqué maintenant. »

from zenml import step
import pandas as pd
from typing import Tuple

@step(enable_cache=False)
def data_ingestion_step(file_path: str) -> Tuple[pd.DataFrame, pd.DataFrame, pd.DataFrame]:
    # Extract zip files and read data with pd.read_csv()
    ...
    return train, test, sample  # This tuple is now an “Artifact” – no fancy unboxing needed

Dans ml_pipeline, nous extrayons les données réelles de l'artefact comme ceci :

raw_data_artifacts = data_ingestion_step(file_path="data/playground-series-s4e9.zip")
train, test, sample = raw_data_artifacts

Étapes simples (ne soyez pas trop à l'aise)

Étape 2 : valeurs manquantes, ingénierie des fonctionnalités et détection des valeurs aberrantes

Ces étapes sont relativement indolores, mais ne soyez pas arrogantes. À l'aide du décorateur d'étapes de ZenML, nous gérons les valeurs manquantes, concevons les fonctionnalités et nettoyons les valeurs aberrantes.

@step(enable_cache=False)
def handle_missing_values_step(df: pd.DataFrame) -> pd.DataFrame:
    # Code to fill missing values
    ...

@step(enable_cache=False)
def feature_engineering_step(df: pd.DataFrame, strategy: str, features: list) -> pd.DataFrame:
    # Log-transform and other fancy tricks
    ...

@step(enable_cache=False)
def outlier_detection_step(df: pd.DataFrame, feature: str, strategy: str, method: str) -> pd.DataFrame:
    # Outlier removal or adjustment
    ...

Et en préparation :

filled_train = handle_missing_values_step(train)
engineered_train = feature_engineering_step(filled_train, strategy='log', features=['price'])
cleaned_train = outlier_detection_step(df=engineered_train, feature='price', strategy='IQR', method='remove')

Étape 3 : fractionnement des données

Nos données sont enfin propres. Il est maintenant temps de le diviser en ensembles de formation et de test. On pourrait penser que ce serait la partie la plus facile, mais vous auriez tort : le casting de type est la clé.

X_train, X_test, y_train, y_test = data_splitter(cleaned_train)

Le labyrinthe de construction de maquettes

Étape 4 : Créer un modèle qui ne casse pas chaque étape

C’est ici que les choses se compliquent. Le RegressorMixin de Sklearn est utile pour la portabilité, mais les artefacts ZenML ne fonctionnent pas toujours bien. Nous le piratons donc en créant une classe PipelineRegressor personnalisée :

from sklearn.pipeline import Pipeline
from sklearn.base import RegressorMixin

class PipelineRegressor(Pipeline, RegressorMixin):
    pass

Maintenant, nous utilisons cette classe dans notre model_building_step. Vous devrez initialiser mlflow, enregistrer les colonnes et terminer le processus :

from zenml import pipeline

@pipeline(name="used_car_price_predictor")
def ml_pipeline():
    # We’ll fill in these dots soon.
    ...

Évaluer avec juste assez de données pour se sentir intelligent

Étape 5 : Évaluation du modèle

Une fois le modèle construit, nous faisons des prédictions et des mesures d'évaluation des journaux - si seulement c'était aussi simple que « regardez, c'est précis ! » En voici la version ZenML :

from zenml import step
import pandas as pd
from typing import Tuple

@step(enable_cache=False)
def data_ingestion_step(file_path: str) -> Tuple[pd.DataFrame, pd.DataFrame, pd.DataFrame]:
    # Extract zip files and read data with pd.read_csv()
    ...
    return train, test, sample  # This tuple is now an “Artifact” – no fancy unboxing needed

La fin : alias, notre flux de travail ZenML est terminé

Félicitations, vous avez réussi ! Maintenant, exécutez ml_pipeline() et accédez au tableau de bord ZenML pour une vue DAG du processus. L'interface utilisateur de MLFlow affichera les métriques, les détails du modèle et les fonctionnalités utilisées.

Liens utiles

  • Encodage cible : "Encodage de variables catégorielles : une plongée approfondie dans l'encodage cible"
  • Code complet : GitHub - NevroHelios/Used-Car-Price-Prediction-endToEnd

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:
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