驯服机器学习管道野兽:ZenML 版

Patricia Arquette
发布: 2024-11-27 02:07:14
原创
617 人浏览过

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中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板