اعتبارسنجی متقابل و تنظیم هایپرپارامتر

آموزش K-Fold Cross Validation و GridSearchCV: ارزیابی قابل اعتماد و بهینه‌سازی هایپرپارامترها

مشکل تقسیم ساده Train/Test

نتیجه ارزیابی به «شانس» تقسیم بستگی دارد! شاید داده تست آسان (یا سخت) باشد. راه‌حل: اعتبارسنجی متقابل.

K-Fold Cross Validation

داده را به K قسمت می‌شکنیم؛ هر بار یک قسمت تست و بقیه آموزش می‌شوند. K بار تکرار و میانگین می‌گیریم:

  1. داده به ۵ قسمت مساوی تقسیم می‌شود
  2. دور ۱: قسمت ۱ تست، بقیه آموزش
  3. دور ۲: قسمت ۲ تست، بقیه آموزش
  4. ... تا دور ۵
  5. میانگین و انحراف معیار ۵ نتیجه = برآورد قابل اعتماد

پیاده‌سازی

from sklearn.model_selection import cross_val_score

scores = cross_val_score(model, X, y, cv=5)
print(f"میانگین: {scores.mean():.3f}")
print(f"انحراف: {scores.std():.3f}")

انحراف معیار کم = مدل پایدار. انحراف بالا = مدل به داده حساس (مشکل!)

تنظیم هایپرپارامتر با GridSearchCV

هایپرپارامترها را قبل از آموزش تنظیم می‌کنیم (K در KNN، عمق درخت و...). GridSearch همه ترکیب‌ها را با اعتبارسنجی متقابل می‌آزماید:

from sklearn.model_selection import GridSearchCV

param_grid = {
    "n_neighbors": [3, 5, 7, 9],
    "weights": ["uniform", "distance"],
}

grid = GridSearchCV(KNeighborsClassifier(), param_grid, cv=5)
grid.fit(X_train, y_train)

print(grid.best_params_)     # بهترین ترکیب
print(grid.best_score_)      # بهترین دقت
best_model = grid.best_estimator_

هایپرپارامتر در مقابل پارامتر

پارامترهایپرپارامتر
چه کسی تعیین می‌کند؟مدل (در fit)شما (قبل از fit)
مثالضرایب رگرسیونK در KNN، عمق درخت
GridSearch را روی داده آموزش اجرا کنید نه کل داده! و بعد از انتخاب، مدل نهایی را روی تست ارزیابی کنید.

جمع‌بندی

این مبحث بخشی از دوره آموزش کامل ماشین لرنینگ است.

ابزارهای مرتبط