Heim >Backend-Entwicklung >Python-Tutorial >Die Zähmung des Machine-Learning-Pipeline-Biests: ZenML-Edition
Schnall dich an, denn wir begeben uns auf eine Reise vom Jupyter-Dschungel ins ZenML-Nirvana. Nein, ZenML macht Sie nicht zu einem Meditationsmeister, aber wird Sie zu einem Pipeline-Profi machen. Legen Sie also Ihre 100 Zeilen Spaghetti-Code beiseite. Es ist Zeit, die großen Geschütze einzusetzen.
Um mitzumachen, installieren Sie ZenML (glauben Sie mir, das ist einfacher, als Ihrem Chef zu erklären, warum Ihr letztes Modell kaputt gegangen ist). Typen sind hier wichtig, also keine Freestyle-Codierung; Wir werden im Laufe der Zeit darüber reden.
Erstellen Sie eine neue Datei mit dem Namen „pipelines.py“. In diesem Meisterwerk bauen wir unsere Pipeline auf – etwas, das etwas sauberer ist als ein Wirrwarr der Datenverarbeitung. Beginnen Sie mit dem Pipeline-Dekorator von ZenML:
from zenml import pipeline @pipeline(name="used_car_price_predictor") def ml_pipeline(): # We’ll fill in these dots soon. ...
Hier ist unser erster ZenML-Schritt, bei dem wir Daten aus einer ZIP-Datei einlesen (da Daten natürlich nie in einfachen CSVs vorliegen). Lernen Sie unsere data_ingestion_step-Funktion kennen, bei der wir die Daten importieren und in ein Artefakt werfen – ein ZenML-Begriff für „Wir geben dieses Durcheinander an den nächsten Schritt weiter, aber technisch ist es jetzt ausgefallen.“
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
In ml_pipeline extrahieren wir die tatsächlichen Daten aus dem Artefakt wie folgt:
raw_data_artifacts = data_ingestion_step(file_path="data/playground-series-s4e9.zip") train, test, sample = raw_data_artifacts
Diese Schritte sind relativ schmerzlos, aber nicht übermütig. Mit dem Step Decorator von ZenML behandeln wir fehlende Werte, entwickeln Funktionen und bereinigen Ausreißer.
@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 ...
Und in der Pipeline:
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')
Unsere Daten sind endlich sauber. Jetzt ist es an der Zeit, es in Trainings- und Testsätze aufzuteilen. Man könnte meinen, dass dies der einfache Teil wäre, aber Sie liegen falsch – Typ-Casting ist der Schlüssel.
X_train, X_test, y_train, y_test = data_splitter(cleaned_train)
Hier wird es knifflig. Sklearns RegressorMixin ist für die Portabilität nützlich, aber ZenML-Artefakte funktionieren nicht immer gut. Also hacken wir es, indem wir eine benutzerdefinierte PipelineRegressor-Klasse erstellen:
from sklearn.pipeline import Pipeline from sklearn.base import RegressorMixin class PipelineRegressor(Pipeline, RegressorMixin): pass
Jetzt verwenden wir diese Klasse in unserem model_building_step. Sie müssen mlflow initialisieren, die Spalten protokollieren und den Vorgang abschließen:
from zenml import pipeline @pipeline(name="used_car_price_predictor") def ml_pipeline(): # We’ll fill in these dots soon. ...
Mit dem erstellten Modell treffen wir einige Vorhersagen und protokollieren Bewertungsmetriken – wenn es nur so einfach wäre wie „Schau, es ist genau!“ Hier ist die ZenML-Version davon:
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
Herzlichen Glückwunsch, du hast es geschafft! Führen Sie nun ml_pipeline() aus und gehen Sie zum ZenML-Dashboard, um eine DAG-Ansicht des Prozesses zu erhalten. Die MLFlow-Benutzeroberfläche zeigt Metriken, Modelldetails und verwendete Funktionen an.
Nützliche Links
Das obige ist der detaillierte Inhalt vonDie Zähmung des Machine-Learning-Pipeline-Biests: ZenML-Edition. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!