Menjinakkan Machine Learning Pipeline Beast: Edisi ZenML

Patricia Arquette
Lepaskan: 2024-11-27 02:07:14
asal
617 orang telah melayarinya

Taming the Machine Learning Pipeline Beast: ZenML Edition

Pengenalan kepada Zen ZenML

Ikat pinggang, kerana kami akan melakukan perjalanan dari hutan Jupyter ke nirvana ZenML. Tidak, ZenML tidak akan menjadikan anda seorang pakar meditasi, tetapi ia akan menjadikan anda pakar saluran paip. Jadi, ketepikan 100 baris kod spageti anda; sudah tiba masanya untuk membawa masuk senjata besar.

Untuk mengikuti, pasang ZenML (percayalah, lebih mudah daripada menjelaskan kepada bos anda sebab model terakhir anda rosak). Jenis penting di sini, jadi tiada pengekodan gaya bebas; kita akan bercakap tentang perkara itu semasa kita pergi.

Perkara Pertama Didahulukan: The Sacred pipelines.py

Buat fail baharu yang dipanggil pipelines.py. Dalam karya agung ini, kami akan membina saluran paip kami—sesuatu yang lebih bersih daripada kusut masai pemprosesan data. Mulakan dengan penghias saluran paip ZenML:

from zenml import pipeline

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

Langkah 1: Pengingesan Data, a.k.a. Membuka Zip Pandora

Inilah ZenML pertama kami langkah, di mana kami akan membaca data daripada fail .zip (kerana, sudah tentu, data tidak pernah datang dalam CSV mudah). Temui fungsi data_ingestion_step kami, di mana kami mengimport data dan membuangnya ke dalam artifak—istilah ZenML untuk "kami meneruskan kekacauan ini ke langkah seterusnya, tetapi ia secara teknikalnya hebat sekarang."

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
Salin selepas log masuk
Salin selepas log masuk

Dalam ml_pipeline, kami mengekstrak data sebenar daripada artifak seperti ini:

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

Langkah Lurus (Jangan Terlalu Selesa)

Langkah 2: Nilai Hilang, Kejuruteraan Ciri dan Pengesanan Outlier

Langkah-langkah ini agak tidak menyakitkan, tetapi jangan sombong. Menggunakan penghias langkah ZenML, kami mengendalikan nilai yang hilang, ciri jurutera dan membersihkan bahagian luar.

@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
    ...
Salin selepas log masuk

Dan dalam perancangan:

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')
Salin selepas log masuk

Langkah 3: Pemisahan Data

Data kami akhirnya bersih. Kini tiba masanya untuk membahagikannya kepada set latihan dan ujian. Anda fikir ini adalah bahagian yang mudah, tetapi anda silap—pemutus jenis adalah kuncinya.

X_train, X_test, y_train, y_test = data_splitter(cleaned_train)
Salin selepas log masuk

Labirint Binaan Model

Langkah 4: Membina Model yang Tidak Memecah Setiap Langkah

Di sinilah keadaan menjadi rumit. RegressorMixin Sklearn berguna untuk mudah alih, tetapi artifak ZenML tidak selalunya berfungsi dengan baik. Jadi, kami menggodamnya dengan membuat kelas PipelineRegressor tersuai:

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

class PipelineRegressor(Pipeline, RegressorMixin):
    pass
Salin selepas log masuk

Sekarang, kami menggunakan kelas ini dalam model_building_step kami. Anda perlu memulakan aliran ml, log lajur dan selesaikan proses:

from zenml import pipeline

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

Menilai dengan Cukup Data untuk Rasa Pintar

Langkah 5: Penilaian Model

Dengan model yang dibina, kami membuat beberapa ramalan dan metrik penilaian log—kalau saja ia semudah "lihat, ia tepat!" Berikut ialah versi ZenML itu:

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
Salin selepas log masuk
Salin selepas log masuk

Pengakhiran: A.k.a., Aliran Kerja ZenML Kami Selesai

Tahniah, anda berjaya! Sekarang, jalankan ml_pipeline() dan pergi ke papan pemuka ZenML untuk melihat DAG proses tersebut. UI MLFlow akan memaparkan metrik, butiran model dan ciri yang sedang digunakan.

Pautan Berguna

  • Pengekodan Sasaran: "Pengekodan Pembolehubah Kategori: Menyelam Lebih Dalam ke Pengekodan Sasaran"
  • Kod Penuh: GitHub - NevroHelios/Prediksi-Harga-Kereta-Terpakai-endToEnd

Atas ialah kandungan terperinci Menjinakkan Machine Learning Pipeline Beast: Edisi ZenML. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan