繫好安全帶,因為我們即將踏上從 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中文網其他相關文章!