ホームページ  >  記事  >  バックエンド開発  >  機械学習パイプラインの野獣を飼いならす: ZenML 編

機械学習パイプラインの野獣を飼いならす: ZenML 編

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-27 02:07:14619ブラウズ

Taming the Machine Learning Pipeline Beast: ZenML Edition

ZenML の Zen の紹介

私たちは Jupyter ジャングルから ZenML の涅槃への旅に出るので、しっかりと準備をしてください。いいえ、ZenML はあなたを瞑想マスターにはしませんが、パイプラインのプロにしてくれます。したがって、100 行のスパゲッティ コードを脇に置いておきましょう。大きな武器を投入する時が来ました。

手順を進めるには、ZenML をインストールします (信じてください、前のモデルが壊れた理由を上司に説明するよりも簡単です)。ここでは が重要なので、フリースタイル コーディングは必要ありません。それについては、これからお話しします。

まず最初に: 神聖なパイプライン.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: データの取り込み、別名 Pandora の Zip を開く

これが最初の 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')

ステップ 3: データの分割

私たちのデータはついにクリーンになりました。次に、トレーニング セットとテスト セットに分割します。これは簡単な部分だと思うかもしれませんが、それは間違いです。型キャストが重要です。

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

モデル構築の迷宮

ステップ 4: すべてのステップを中断しないモデルを構築する

ここが難しいところです。 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.
    ...

賢いと感じるのに十分なデータを使用して評価する

ステップ 5: モデルの評価

モデルが構築されたら、いくつかの予測を行い、評価指標をログに記録します。それが「ほら、正確だ!」というくらい簡単だったらいいのですが。これの 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/中古車価格予測-endToEnd

以上が機械学習パイプラインの野獣を飼いならす: ZenML 編の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。