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
Libérer: 2024-11-27 02:07:14
original
714 Les gens l'ont consulté

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.
    ...
Copier après la connexion
Copier après la connexion

É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
Copier après la connexion
Copier après la connexion

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
Copier après la connexion

É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
    ...
Copier après la connexion

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')
Copier après la connexion

É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)
Copier après la connexion

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
Copier après la connexion

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.
    ...
Copier après la connexion
Copier après la connexion

É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
Copier après la connexion
Copier après la connexion

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!

source:dev.to
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal