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.
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. ...
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
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')
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)
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. ...
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
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
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!