Heim >Backend-Entwicklung >Python-Tutorial >Die Zähmung des Machine-Learning-Pipeline-Biests: ZenML-Edition

Die Zähmung des Machine-Learning-Pipeline-Biests: ZenML-Edition

Patricia Arquette
Patricia ArquetteOriginal
2024-11-27 02:07:14701Durchsuche

Taming the Machine Learning Pipeline Beast: ZenML Edition

Einführung in das Zen von ZenML

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.

Das Wichtigste zuerst: Die heiligen Pipelines.py

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

Schritt 1: Datenaufnahme, auch bekannt als Öffnen von Pandora’s Zip

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

Einfache Schritte (nicht zu bequem werden)

Schritt 2: Fehlende Werte, Feature-Engineering und Ausreißererkennung

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

Schritt 3: Datenaufteilung

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)

Das Modellbau-Labyrinth

Schritt 4: Erstellen eines Modells, das nicht bei jedem Schritt kaputt geht

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

Auswerten mit gerade genug Daten, um sich schlau zu fühlen

Schritt 5: Modellbewertung

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

Das Ende: Auch bekannt als: Unser ZenML-Workflow ist abgeschlossen

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

  • Zielkodierung: „Kategoriale Variablen kodieren: Ein tiefer Einblick in die Zielkodierung“
  • Vollständiger Code: GitHub – NevroHelios/Used-Car-Price-Prediction-endToEnd

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn