私たちは Jupyter ジャングルから ZenML の涅槃への旅に出るので、しっかりと準備をしてください。いいえ、ZenML はあなたを瞑想マスターにはしませんが、パイプラインのプロにしてくれます。したがって、100 行のスパゲッティ コードを脇に置いておきましょう。大きな武器を投入する時が来ました。
手順を進めるには、ZenML をインストールします (信じてください、前のモデルが壊れた理由を上司に説明するよりも簡単です)。ここでは 型 が重要なので、フリースタイル コーディングは必要ありません。それについては、これからお話しします。
pipelines.py という名前の新しいファイルを作成します。この傑作では、複雑なデータ処理よりももう少しクリーンなパイプラインを構築します。 ZenML のパイプライン デコレータから始めます:
from zenml import pipeline @pipeline(name="used_car_price_predictor") def ml_pipeline(): # We’ll fill in these dots soon. ...
これが最初の 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
これらの手順は比較的簡単ですが、生意気になる必要はありません。 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
おめでとうございます、成功しました!次に、ml_pipeline() を実行し、ZenML ダッシュボードに移動して、プロセスの DAG ビューを表示します。 MLFlow UI には、メトリクス、モデルの詳細、使用中の機能が表示されます。
役立つリンク
以上が機械学習パイプラインの野獣を飼いならす: ZenML 編の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。