首頁  >  文章  >  後端開發  >  馴服機器學習管道野獸:ZenML 版

馴服機器學習管道野獸:ZenML 版

Patricia Arquette
Patricia Arquette原創
2024-11-27 02:07:14621瀏覽

Taming the Machine Learning Pipeline Beast: ZenML Edition

ZenML 的 Zen 簡介

繫好安全帶,因為我們即將踏上從 Jupyter 叢林到 ZenML 涅槃的旅程。不,ZenML 不會讓您成為冥想大師,但它會讓您成為管道專家。所以,拋開你那 100 行義大利麵式的程式碼吧;是時候拿出大槍了。

要繼續操作,請安裝 ZenML(相信我,這比向你的老闆解釋為什麼你的上一個模型壞了更容易)。 類型在這裡很重要,所以沒有自由式編碼;我們邊走邊討論這個問題。

首先要事:神聖的 pipelines.py

建立一個名為 pipelines.py 的新檔案。在這部傑作中,我們將建立我們的管道——比混亂的數據處理更乾淨的東西。從 ZenML 的管道裝飾器開始:

from zenml import pipeline

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

第 1 步:數據攝取,又稱“打開潘多拉的拉鍊”

這是我們的第一個 ZenML 步驟,我們將從 .zip 檔案中讀取資料(當然,因為資料永遠不會以簡單的 CSV 形式出現)。來認識我們的data_ingestion_step 函數,我們在其中導入資料並將其放入一個工件中——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

在 ml_pipeline 中,我們從工件中提取實際數據,如下所示:

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

簡單的步驟(不要太舒服)

第 2 步:缺失值、特徵工程和異常值檢測

這些步驟相對輕鬆,但不要驕傲。使用 ZenML 的步驟裝飾器,我們處理缺失值、設計特性並清理異常值。

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

正在籌備中:

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

第三步:資料分割

我們的數據終於乾淨了。現在是時候將其分為訓練集和測試集了。您可能認為這會是簡單的部分,但您錯了——類型轉換是關鍵。

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

模型建造迷宮

第四步:建立一個不會破壞每一步的模型

這就是事情變得棘手的地方。 Sklearn 的 RegressorMixin 對於可移植性很有用,但 ZenML 工件並不總是很好用。因此,我們透過建立自訂 PipelineRegressor 類別來破解它:

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

class PipelineRegressor(Pipeline, RegressorMixin):
    pass

現在,我們在 model_building_step 中使用此類。您需要初始化 mlflow、記錄列並結束該過程:

from zenml import pipeline

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

使用足夠的數據進行評估,讓自己感覺很聰明

第五步:模型評估

建立模型後,我們會進行一些預測並記錄評估指標 - 如果只是像「看,它是準確的!」那麼簡單就好了!這是 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

結束:我們的 ZenML 工作流程已完成

恭喜你,你成功了!現在,執行 ml_pipeline() 並前往 ZenML 儀表板以查看流程的 DAG 視圖。 MLFlow UI 將顯示指標、模型詳細資訊和使用中的功能。

有用連結

  • 目標編碼:“編碼分類變數:深入研究目標編碼”
  • 完整程式碼:GitHub - NevroHelios/Used-Car-Price-Prediction-endToEnd

以上是馴服機器學習管道野獸:ZenML 版的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn