برنامه نویسی

هفته 1: MLOP با DataTalks

Summarize this content to 400 words in Persian Lang
اخیراً به گروه DataTalks 2024 ملحق شده است تا امتیاز کسب کند MLOs گواهی و اساساً بر اساس شایستگی های Machine Pipeline ساخته شده است. برای تکمیل دوره تکالیفی است که باید یک هفته در میان انجام شود.

این مجموعه ای از نحوه برخورد نویسنده با این تکالیف خواهد بود و به عنوان راه حلی برای کسانی که در حال مبارزه هستند عمل می کند.

هفته 1تکلیف در اینجا اساسی است، شما باید مهارت های لازم را در پایتون، کتابخانه های ml و اسکریپت نویسی bash داشته باشید تا این کار را کامل ببینید. تکالیف زیر را ببینید:

یک را خواهیم ساخت نوت بوک ژوپیتر که به هر سوال می پردازد.

قبل از هر چیزی، یک دایرکتوری ایجاد کنید تا کارهای خود را در حال حاضر و بعداً در خود جای دهد، مانند:

MLOPS
|
– wk1

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

سپس یک محیط مجازی در دایرکتوری والد ایجاد کنید، این جایی است که تمام بسته های مورد نیاز برای کل سفر را نصب می کنید:

bash خود را راه اندازی کنید و دستورات زیر را اجرا کنید:

cd MLOPS
python3.10 -m venv MLOPS_venv
source MLOPS_venv/Scripts/activate

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این باعث ایجاد محیط مجازی می شود MLOPS_venv با Python 3.10 و همچنین دایرکتوری در پوشه والد خود با همین نام، اکنون می توانید بسته ها را در این محیط نصب کنید. خط آخر فعال کردن این محیط است.

و برای غیر فعال کردن:deactivate

Wk1:

برپایی

mkdir wk1
cd wk1
mkdir datasets
code .

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این باعث می شود wk1 دایرکتوری به کار این هفته، اگر قبلاً آن را ایجاد نکرده‌اید، برای ایجاد یک به داخل آن پیمایش کنید مجموعه داده ها زیر شاخه ای که پس از آن کد VS را راه اندازی می کند، Ctrl+Shift+P دستور ایجاد یک نوت بوک، نام آن است مشق شب.

هنگامی که این مورد ایجاد شد، مطمئن شوید که هسته را روی the تنظیم کرده اید MLOPS_venv محیط.

نوت بوک ژوپیتر

در شما تکالیف.ipynb فایل نوت بوک اجرا کنید !ls برای اینکه ببینید دایرکتوری های مورد نیاز را دارید، باید به شکل زیر باشد:

سپس چند کتابخانه مانند این را نصب کنید:## Install Packages!pip install numpy pandas seaborn scikit-learn

! – این در نوت بوک های Jupyter برای اجرای دستورات پوسته استفاده می شود.

Q1: تاکسی های سبز – داده های ژانویه و فوریه 2023 را بارگیری کنید.1.1 دانلود مجموعه داده ها

## Download Yellow Taxi Trips Files
! curl -o ./datasets/jan_yellow.parquet https://d37ci6vzurychx.cloudfront.net/trip-data/yellow_tripdata_2023-01.parquet
! curl -o ./datasets/feb_yellow.parquet https://d37ci6vzurychx.cloudfront.net/trip-data/yellow_tripdata_2023-02.parquet

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

حلقه ابزاری برای انتقال داده ها از یا به سرور است. در اینجا چیزی است که هر بخش انجام می دهد:

curl – ابزار خط فرمان برای درخواست به URL ها.-o- این گزینه به curl می گوید که خروجی را به جای نمایش در یک فایل ذخیره کند../datasets/jan_yellow.parquet – مسیری که اولین فایل در آن ذخیره خواهد شد.

بنابراین، اولین دستور یک فایل به نام را دانلود می کند yellow_tripdata_2023-01.parquet از URL داده شده و آن را به عنوان ذخیره می کند jan_yellow.پارکت در datasets فهرست راهنما.

دستور دوم همین کار را برای فایل دیگری انجام می دهد و آن را به عنوان ذخیره می کند feb_yellow.پارکت.

1.2 واردات کتابخانه ها

## Load Libraries
import numpy as np
import pandas as pd
from sklearn.feature_extraction import DictVectorizer

## Load Dataset
jan_df = pd.read_parquet(“./datasets/jan_yellow.parquet”)
print(f”1, Data Dimension: {jan_df.shape[0]} rows | {jan_df.shape[1]} columns \n”)

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

=> ابعاد داده: 3066766 ردیف | 20 ستون خروجی این پاسخ سوال را برمی گرداند.

Q2: متغیر مدت زمان (بر حسب دقیقه) را محاسبه کنید و انحراف استاندارد مدت سفر در ژانویه را واکشی کنید؟

2.1 محاسبه مدت سفر و انحراف Std

jan_df[[“tpep_pickup_datetime”, “tpep_dropoff_datetime”]] = jan_df[[“tpep_pickup_datetime”, “tpep_dropoff_datetime”]].apply(pd.to_datetime)
jan_df[“duration”] = (jan_df[“tpep_dropoff_datetime”] – jan_df[“tpep_pickup_datetime”]).dt.total_seconds()/60

print(f”2, Duration Standard Deviation: {jan_df[‘duration’].std()} \n”)

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

=> انحراف استاندارد مدت زمان: 42.59435124195458.

این کد ستون های “tpep_pickup_datetime” و “tpep_dropoff_datetime” را در jan_df DataFrame با استفاده از تابع to_datetime pandas به اشیاء datetime تبدیل می کند. سپس، مدت زمان هر سفر را با کم کردن زمان تحویل از زمان تخلیه، تبدیل نتیجه به ثانیه کل و سپس تقسیم بر 60 برای بدست آوردن مدت زمان بر حسب دقیقه محاسبه می کند.

Q3: حذف Outliers

filtered_duration = jan_df[jan_df[‘duration’].between(1,60)] clean_prop = len(filtered_duration[‘duration’])/len(jan_df[‘duration’])

print(f”3, Outlier Proportion: {clean_prop} \n”)

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

~> 98٪فیلتر می کنیم jan_df فقط سطرهایی را شامل شود که مقادیر ستون “مدت” بین 1 تا 60 دقیقه است. این حدود 98 درصد از دیتافریم اولیه را تشکیل می دهد.

Q4: ابعادی بودن ماتریس ویژگی

## Filtered columns
ml_df = filtered_duration[[‘PULocationID’, ‘DOLocationID’]].astype(str)
ml_df[‘duration’] = filtered_duration[‘duration’]

## Dictionaries
dicts_train = ml_df[[‘PULocationID’, ‘DOLocationID’]].to_dict(orient=”records”)
dicts_train[1:5]

## Vectorizers
vec = DictVectorizer(sparse = True)
feature_matrix = vec.fit_transform(dicts_train)

print(f”4, Dimension of feature_matrix: {feature_matrix.shape} \n”)

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

=> 4، ابعاد feature_matrix: (3009173، 515)

این کد کارهای زیر را انجام می دهد:

یک DataFrame ml_df جدید با ستون‌های «PULocationID» و «DOlocationID» از filtered_duration ایجاد می‌کند و آنها را به رشته‌ها تبدیل می‌کند.
ستون “دوره” را از filtered_duration به ml_df اضافه می کند.
ml_df را با استفاده از روش to_dict با orient=”records” به فهرستی از دیکشنری‌ها با کلیدهای “PULocationID” و “DOLocationID” تبدیل می‌کند.
یک DictVectorizer را راه اندازی می کند که برای تبدیل لیست فرهنگ لغت ها به ماتریسی از ویژگی های مدل های یادگیری ماشین استفاده می شود.
فهرست دیکشنری ها را به یک ماتریس پراکنده feature_matrix تبدیل می کند.
ابعاد feature_matrix را چاپ می کند.
خروجی تعداد سطرها و ستون ها در ماتریس ویژگی را نشان می دهد.

Q5: آموزش یک مدل رگرسیون خطی

## Linear Regression Model
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error

y = ml_df[‘duration’]

model = LinearRegression()
model.fit(feature_matrix, y)
y_pred = model.predict(feature_matrix)
rmse = np.sqrt(mean_squared_error(y, y_pred))

print(f”5, RMSE: {rmse}”)

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

=> RMSE: 7.649262236295703

در اینجا، ما به رگرسیون خطی مدل‌هایی از کتابخانه scikit-learn/sklearn و آموزش روی متغیر هدف مدت زمان، مدل را در یک ماتریس ویژگی برازش دهید و سپس پیش بینی کنید.

ریشه میانگین مربعات خطا (RMSE) بر اساس تفاوت بین مقادیر واقعی و پیش بینی شده متغیر هدف محاسبه می شود، هر چه مقدار کمتر باشد، بهتر است.

Q6: ارزیابی مدل

در اینجا، تمام کارهایی که انجام داده‌ایم را برای اعتبارسنجی اعمال می‌کنیم فوریه مجموعه داده، به سادگی با ایجاد یک تابع:

## Compile chunks into a function
def rmse_validation(df_pth: str):
val_df = pd.read_parquet(df_pth)
val_df[[“tpep_pickup_datetime”, “tpep_dropoff_datetime”]] = val_df[[“tpep_pickup_datetime”, “tpep_dropoff_datetime”]].apply(pd.to_datetime)
val_df[“duration”] = (val_df[“tpep_dropoff_datetime”] – val_df[“tpep_pickup_datetime”]).dt.total_seconds()/60
val_df = val_df[val_df[‘duration’].between(1,60)]

val_df[[‘PULocationID’, ‘DOLocationID’]] = val_df[[‘PULocationID’, ‘DOLocationID’]].astype(str)
dicts_val = val_df[[‘PULocationID’, ‘DOLocationID’]].to_dict(orient=”records”)

feature_matrix_val = vec.transform(dicts_val)
#print(f”Dimension of feature_matrix: {feature_matrix_val.shape} \n”)

y_val = val_df[‘duration’] y_pred = model.predict(feature_matrix_val)
rmse = np.sqrt(mean_squared_error(y_val, y_pred))

return rmse

result_feb_df = rmse_validation(“./datasets/feb_yellow.parquet”)
print(f”6, Validation_RMSE: {result_feb_df}”)

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

=> 6، Validation_RMSE: 7.811812822882009

تنها تفاوت در اینجا تمایز بین است تناسب_تغییر و تبدیل همانطور که در مورد بردار اعمال می شود، ما از transform در مجموعه اعتبار سنجی استفاده می کنیم تا به سادگی تبدیل برازش را که قبلا در مجموعه آموزشی انجام شده است به ارث ببریم.

خودشه! برای بررسی کدها به wk1_submission مراجعه کنید و به سلامتی!در صورت وجود هر گونه مشکل در زیر نظر دهید.

اخیراً به گروه DataTalks 2024 ملحق شده است تا امتیاز کسب کند MLOs گواهی و اساساً بر اساس شایستگی های Machine Pipeline ساخته شده است. برای تکمیل دوره تکالیفی است که باید یک هفته در میان انجام شود.

این مجموعه ای از نحوه برخورد نویسنده با این تکالیف خواهد بود و به عنوان راه حلی برای کسانی که در حال مبارزه هستند عمل می کند.

هفته 1
تکلیف در اینجا اساسی است، شما باید مهارت های لازم را در پایتون، کتابخانه های ml و اسکریپت نویسی bash داشته باشید تا این کار را کامل ببینید. تکالیف زیر را ببینید:

یک را خواهیم ساخت نوت بوک ژوپیتر که به هر سوال می پردازد.

قبل از هر چیزی، یک دایرکتوری ایجاد کنید تا کارهای خود را در حال حاضر و بعداً در خود جای دهد، مانند:

MLOPS 
 |
 - wk1
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

سپس یک محیط مجازی در دایرکتوری والد ایجاد کنید، این جایی است که تمام بسته های مورد نیاز برای کل سفر را نصب می کنید:

  1. bash خود را راه اندازی کنید و دستورات زیر را اجرا کنید:
cd MLOPS
python3.10 -m venv MLOPS_venv
source MLOPS_venv/Scripts/activate
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این باعث ایجاد محیط مجازی می شود MLOPS_venv با Python 3.10 و همچنین دایرکتوری در پوشه والد خود با همین نام، اکنون می توانید بسته ها را در این محیط نصب کنید. خط آخر فعال کردن این محیط است.

و برای غیر فعال کردن:
deactivate

Wk1:

برپایی

mkdir wk1
cd wk1
mkdir datasets
code .
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این باعث می شود wk1 دایرکتوری به کار این هفته، اگر قبلاً آن را ایجاد نکرده‌اید، برای ایجاد یک به داخل آن پیمایش کنید مجموعه داده ها زیر شاخه ای که پس از آن کد VS را راه اندازی می کند، Ctrl+Shift+P دستور ایجاد یک نوت بوک، نام آن است مشق شب.

هنگامی که این مورد ایجاد شد، مطمئن شوید که هسته را روی the تنظیم کرده اید MLOPS_venv محیط.

نوت بوک ژوپیتر

در شما تکالیف.ipynb فایل نوت بوک اجرا کنید !ls برای اینکه ببینید دایرکتوری های مورد نیاز را دارید، باید به شکل زیر باشد:

سپس چند کتابخانه مانند این را نصب کنید:
## Install Packages
!pip install numpy pandas seaborn scikit-learn

! – این در نوت بوک های Jupyter برای اجرای دستورات پوسته استفاده می شود.

Q1: تاکسی های سبز – داده های ژانویه و فوریه 2023 را بارگیری کنید.
1.1 دانلود مجموعه داده ها

## Download Yellow Taxi Trips Files
! curl -o ./datasets/jan_yellow.parquet https://d37ci6vzurychx.cloudfront.net/trip-data/yellow_tripdata_2023-01.parquet
! curl -o ./datasets/feb_yellow.parquet https://d37ci6vzurychx.cloudfront.net/trip-data/yellow_tripdata_2023-02.parquet
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

حلقه ابزاری برای انتقال داده ها از یا به سرور است. در اینجا چیزی است که هر بخش انجام می دهد:

curl – ابزار خط فرمان برای درخواست به URL ها.
-o– این گزینه به curl می گوید که خروجی را به جای نمایش در یک فایل ذخیره کند.
./datasets/jan_yellow.parquet – مسیری که اولین فایل در آن ذخیره خواهد شد.

بنابراین، اولین دستور یک فایل به نام را دانلود می کند yellow_tripdata_2023-01.parquet از URL داده شده و آن را به عنوان ذخیره می کند jan_yellow.پارکت در datasets فهرست راهنما.

دستور دوم همین کار را برای فایل دیگری انجام می دهد و آن را به عنوان ذخیره می کند feb_yellow.پارکت.

1.2 واردات کتابخانه ها

## Load Libraries
import numpy as np
import pandas as pd
from sklearn.feature_extraction import DictVectorizer

## Load Dataset
jan_df = pd.read_parquet("./datasets/jan_yellow.parquet")
print(f"1, Data Dimension: {jan_df.shape[0]} rows | {jan_df.shape[1]} columns \n")
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

=> ابعاد داده: 3066766 ردیف | 20 ستون
خروجی این پاسخ سوال را برمی گرداند.

Q2: متغیر مدت زمان (بر حسب دقیقه) را محاسبه کنید و انحراف استاندارد مدت سفر در ژانویه را واکشی کنید؟

2.1 محاسبه مدت سفر و انحراف Std

jan_df[["tpep_pickup_datetime", "tpep_dropoff_datetime"]] = jan_df[["tpep_pickup_datetime", "tpep_dropoff_datetime"]].apply(pd.to_datetime)
jan_df["duration"] = (jan_df["tpep_dropoff_datetime"] - jan_df["tpep_pickup_datetime"]).dt.total_seconds()/60

print(f"2, Duration Standard Deviation: {jan_df['duration'].std()} \n")
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

=> انحراف استاندارد مدت زمان: 42.59435124195458.

این کد ستون های “tpep_pickup_datetime” و “tpep_dropoff_datetime” را در jan_df DataFrame با استفاده از تابع to_datetime pandas به اشیاء datetime تبدیل می کند. سپس، مدت زمان هر سفر را با کم کردن زمان تحویل از زمان تخلیه، تبدیل نتیجه به ثانیه کل و سپس تقسیم بر 60 برای بدست آوردن مدت زمان بر حسب دقیقه محاسبه می کند.

Q3: حذف Outliers

filtered_duration = jan_df[jan_df['duration'].between(1,60)]
clean_prop = len(filtered_duration['duration'])/len(jan_df['duration'])

print(f"3, Outlier Proportion: {clean_prop} \n")
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

~> 98٪
فیلتر می کنیم jan_df فقط سطرهایی را شامل شود که مقادیر ستون “مدت” بین 1 تا 60 دقیقه است. این حدود 98 درصد از دیتافریم اولیه را تشکیل می دهد.

Q4: ابعادی بودن ماتریس ویژگی

## Filtered columns
ml_df = filtered_duration[['PULocationID', 'DOLocationID']].astype(str)
ml_df['duration'] = filtered_duration['duration']

## Dictionaries
dicts_train = ml_df[['PULocationID', 'DOLocationID']].to_dict(orient="records")
dicts_train[1:5]

## Vectorizers
vec = DictVectorizer(sparse = True)
feature_matrix = vec.fit_transform(dicts_train)

print(f"4, Dimension of feature_matrix: {feature_matrix.shape} \n")
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

=> 4، ابعاد feature_matrix: (3009173، 515)

این کد کارهای زیر را انجام می دهد:

  • یک DataFrame ml_df جدید با ستون‌های «PULocationID» و «DOlocationID» از filtered_duration ایجاد می‌کند و آنها را به رشته‌ها تبدیل می‌کند.
  • ستون “دوره” را از filtered_duration به ml_df اضافه می کند.
  • ml_df را با استفاده از روش to_dict با orient=”records” به فهرستی از دیکشنری‌ها با کلیدهای “PULocationID” و “DOLocationID” تبدیل می‌کند.
  • یک DictVectorizer را راه اندازی می کند که برای تبدیل لیست فرهنگ لغت ها به ماتریسی از ویژگی های مدل های یادگیری ماشین استفاده می شود.
  • فهرست دیکشنری ها را به یک ماتریس پراکنده feature_matrix تبدیل می کند.
  • ابعاد feature_matrix را چاپ می کند.
  • خروجی تعداد سطرها و ستون ها در ماتریس ویژگی را نشان می دهد.

Q5: آموزش یک مدل رگرسیون خطی

## Linear Regression Model
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error

y = ml_df['duration']

model = LinearRegression()
model.fit(feature_matrix, y)
y_pred = model.predict(feature_matrix)
rmse = np.sqrt(mean_squared_error(y, y_pred))

print(f"5, RMSE: {rmse}")
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

=> RMSE: 7.649262236295703

در اینجا، ما به رگرسیون خطی مدل‌هایی از کتابخانه scikit-learn/sklearn و آموزش روی متغیر هدف مدت زمان، مدل را در یک ماتریس ویژگی برازش دهید و سپس پیش بینی کنید.

ریشه میانگین مربعات خطا (RMSE) بر اساس تفاوت بین مقادیر واقعی و پیش بینی شده متغیر هدف محاسبه می شود، هر چه مقدار کمتر باشد، بهتر است.

Q6: ارزیابی مدل

در اینجا، تمام کارهایی که انجام داده‌ایم را برای اعتبارسنجی اعمال می‌کنیم فوریه مجموعه داده، به سادگی با ایجاد یک تابع:

## Compile chunks into a function
def rmse_validation(df_pth: str):
    val_df = pd.read_parquet(df_pth)
    val_df[["tpep_pickup_datetime", "tpep_dropoff_datetime"]] = val_df[["tpep_pickup_datetime", "tpep_dropoff_datetime"]].apply(pd.to_datetime)
    val_df["duration"] = (val_df["tpep_dropoff_datetime"] - val_df["tpep_pickup_datetime"]).dt.total_seconds()/60
    val_df = val_df[val_df['duration'].between(1,60)]

    val_df[['PULocationID', 'DOLocationID']] = val_df[['PULocationID', 'DOLocationID']].astype(str)
    dicts_val = val_df[['PULocationID', 'DOLocationID']].to_dict(orient="records")

    feature_matrix_val = vec.transform(dicts_val)
    #print(f"Dimension of feature_matrix: {feature_matrix_val.shape} \n")

    y_val = val_df['duration']
    y_pred = model.predict(feature_matrix_val)
    rmse = np.sqrt(mean_squared_error(y_val, y_pred))

    return rmse

result_feb_df = rmse_validation("./datasets/feb_yellow.parquet")
print(f"6, Validation_RMSE: {result_feb_df}")
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

=> 6، Validation_RMSE: 7.811812822882009

تنها تفاوت در اینجا تمایز بین است تناسب_تغییر و تبدیل همانطور که در مورد بردار اعمال می شود، ما از transform در مجموعه اعتبار سنجی استفاده می کنیم تا به سادگی تبدیل برازش را که قبلا در مجموعه آموزشی انجام شده است به ارث ببریم.

خودشه!
برای بررسی کدها به wk1_submission مراجعه کنید و به سلامتی!
در صورت وجود هر گونه مشکل در زیر نظر دهید.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا