بازگشت به دوره

آموزش رایگان صفر تا صد یادگیری ماشین (Machine Learning) به زبان ساده

0% تکمیل‌شده
0/0 مرحله

اگر می‌خواهید دقت مدل یادگیری ماشین خود را افزایش دهید، Grid Search یکی از بهترین روش‌ها برای یافتن بهترین مقدار پارامترهای مدل است. در این مقاله، با یک مثال عملی از Logistic Regression، یاد می‌گیریم که چطور با Grid Search عملکرد مدل را بهبود دهیم.


📌 فهرست مطالب

در یادگیری ماشین Grid Search چیست؟ 🤔

در یادگیری ماشین، مدل‌ها پارامترهایی دارند که روی نحوه یادگیری و عملکرد آن‌ها تأثیر می‌گذارند. Grid Search یک روش ساده اما مؤثر برای پیدا کردن بهترین مقدار این پارامترهاست.

📌 نحوه کار Grid Search

  1. یک سری مقدار برای هر پارامتر انتخاب می‌کنیم.
  2. مدل را با تمام ترکیب‌های ممکن اجرا می‌کنیم.
  3. بهترین مقدار را بر اساس امتیاز مدل انتخاب می‌کنیم.

به زبان ساده، Grid Search تمام گزینه‌های ممکن را بررسی می‌کند تا بهترین تنظیمات را پیدا کند.

چرا تنظیم پارامترها مهم است؟ 🎯

بعضی پارامترها می‌توانند تأثیر زیادی روی عملکرد مدل داشته باشند. مثلا در مدل Logistic Regression، پارامتری به نام C وجود دارد که میزان Regularization (تنظیم پیچیدگی مدل) را کنترل می‌کند.

🔹 C بالا → مدل داده‌های آموزشی را دقیق‌تر دنبال می‌کند.
🔹 C پایین → مدل انعطاف‌پذیرتر است و پیچیدگی کمتری دارد.

اما بهترین مقدار C کدام است؟ این مقدار به داده‌هایی که داریم بستگی دارد و نمی‌توان یک مقدار ثابت برای همه مدل‌ها تعیین کرد.

اجرای مدل بدون Grid Search 🛠️

قبل از اینکه Grid Search را اجرا کنیم، ببینیم اگر مقدار C را تغییر ندهیم، مدل چقدر خوب عمل می‌کند.

📌 مراحل اجرا

🔹 ابتدا دیتاست Iris را از scikit-learn بارگذاری می‌کنیم:

from sklearn import datasets
iris = datasets.load_iris()
X = iris['data']
y = iris['target']

🔹 سپس مدل Logistic Regression را تعریف می‌کنیم:

from sklearn.linear_model import LogisticRegression
logit = LogisticRegression(max_iter=10000)

🔹 مدل را با داده‌ها آموزش می‌دهیم:

logit.fit(X, y)

🔹 ارزیابی مدل با متد ()score:

print(logit.score(X, y))

🔹 نتیجه: دقت مدل با مقدار پیش‌فرض C=1 برابر 0.973 است.

اما آیا می‌توانیم مقدار C را بهینه‌تر انتخاب کنیم؟ 🤔

پیاده‌سازی Grid Search در Logistic Regression 🔄

حالا بیایید مقدار C را در یک بازه مشخص تغییر دهیم و ببینیم که آیا می‌توانیم مدل را بهبود دهیم یا نه.

📌 مراحل اجرا

🔹 ابتدا لیستی از مقادیر مختلف C را تعیین می‌کنیم:

C = [0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2]

🔹 یک لیست خالی برای ذخیره امتیازات مدل ایجاد می‌کنیم:

scores = [ ]

🔹 حالا یک حلقه for می‌نویسیم که مقدار C را تغییر دهد و امتیاز مدل را ذخیره کند:

for choice in C:
logit.set_params(C=choice)
logit.fit(X, y)
scores.append(logit.score(X, y))

🔹 در نهایت امتیازهای مدل را چاپ می‌کنیم:

print(scores)

🔹 نتیجه: لیست امتیازات به ما نشان می‌دهد که چه مقدار C عملکرد بهتری دارد.

تحلیل نتایج و انتخاب بهترین مقدار C 📊

بررسی نتایج نشان می‌دهد که:

مقدار C = 1.75 بهترین دقت را دارد.
مقادیر پایین‌تر از 1 عملکرد ضعیف‌تری نشان داده‌اند.
افزایش بیش از حد مقدار C تأثیر مثبتی نداشته است.

پس، مقدار بهینه C برای این مجموعه داده 1.75 است.

نکته مهم درباره Overfitting ⚠️

یک اشتباه رایج: ما امتیاز مدل را با همان داده‌ای که مدل روی آن آموزش دیده، ارزیابی کردیم. این کار ممکن است منجر به Overfitting (بیش‌برازش) شود، یعنی مدل فقط روی داده‌های آموزشی خوب عمل می‌کند و روی داده‌های جدید ضعیف خواهد بود.

🔹 راه‌حل: همیشه بخشی از داده‌ها را برای تست کنار بگذارید و از Train/Test Split استفاده کنید.

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

logit.fit(X_train, y_train)
print(logit.score(X_test, y_test))

نتیجه: این روش باعث می‌شود که مدل شما داده‌های جدید را بهتر پیش‌بینی کند و از خطای Overfitting جلوگیری شود.


📌 جمع‌بندی و نکات کلیدی

Grid Search روشی برای پیدا کردن بهترین مقدار پارامترهای مدل است.
پارامتر C در Logistic Regression روی پیچیدگی مدل تأثیر می‌گذارد.
مقدار C = 1.75 بهترین عملکرد را در این مثال داشت.
برای جلوگیری از Overfitting، همیشه از Train/Test Split استفاده کنید.