چیت‌شیت

ارزیابی مدل، بایاس-واریانس و تنظیم هایپرپارامتر

Model Evaluation, Bias-Variance and Tuning

تفکیک داده‌ها و اعتبارسنجی متقاطع، فرمول‌های متریک، تشخیص بایاس-واریانس، استراتژی‌های جستجو و کلاس‌های نامتوازن.

  • ۱۱ بخش
  • ۴ درس مرتبط
  • کد و دستورها عیناً از دوره‌ی اصلی
فهرست مطالب
  1. تشخیص خطای آموزش و آزمون
  2. تفکیک، تنظیم و گزارش
  3. فرمول‌های متریک
  4. اصلاح مدل گام‌به‌گام
  5. اعتبارسنجی متقاطع و تنظیم هایپرپارامتر
  6. استراتژی‌های جستجو
  7. انتخاب روش رفع عدم‌توازن
  8. اعداد کلیدی که باید بدانید
  9. پرسش‌ها
  10. نکات
  11. پیاده‌سازی توابع از صفر

تشخیص خطای آموزش و آزمون

عیب‌یابی
  • خطای آموزش بالا، خطای آزمون بالا

    علت
    بایاس بالا
    راه‌حل
    ویژگی‌های بیشتر، مدل پیچیده‌تر، منظم‌سازی کمتر
  • خطای آموزش پایین، خطای آزمون بالا

    علت
    واریانس بالا
    راه‌حل
    داده‌های بیشتر، منظم‌سازی، مدل ساده‌تر
  • خطای آموزش کاهش می‌یابد، خطای آزمون افزایش می‌یابد

    علت
    بیش‌برازش در حال وقوع
    راه‌حل
    توقف زودهنگام
  • هر دو منحنی تخت و بالا هستند

    علت
    بایاس؛ داده‌ی بیشتر کمکی نخواهد کرد
    راه‌حل
    تغییر مدل
  • فاصله‌ی زیاد، خطای اعتبارسنجی همچنان نزولی

    علت
    واریانسی که داده می‌تواند حل کند
    راه‌حل
    جمع‌آوری داده‌های بیشتر
  • دقت کلی 99%، صفر مورد مثبت شناسایی‌شده

    علت
    عدم‌توازن کلاس‌ها
    راه‌حل
    استفاده از F1، AUPRC یا MCC
  • امتیاز اعتبارسنجی بیش‌ازحد خوش‌بینانه

    علت
    برازش اسکیلر پیش از تفکیک داده‌ها
    راه‌حل
    پیش‌پردازش داخل یک Pipeline
  • بهترین مقدار در مرز دامنه‌ی جستجو

    علت
    محدوده بیش‌ازحد باریک
    راه‌حل
    گسترش فضای جستجو

تفکیک، تنظیم و گزارش

معماری
اعتبارسنجیمجموعه داده کاملمجموعه آموزش60-70%مجموعه اعتبارسنجی15-20%مجموعه آزمون15-20%، فقط یک‌بار استفاده شودبرازش مدلتنظیم هایپرپارامترهاانتخاب مدل‌هامدل نهاییگزارش عملکرد

فرمول‌های متریک

مفهوم‌ها
Accuracy
$(TP + TN) / (TP + TN + FP + FN)$. در کلاس‌های نامتوازن گمراه‌کننده است.
Precision
$TP / (TP + FP)$. مناسب برای زمان‌هایی که مثبت‌های کاذب پرهزینه‌اند.
Recall
$TP / (TP + FN)$. مناسب برای زمان‌هایی که منفی‌های کاذب پرهزینه‌اند.
F1
$2PR / (P + R)$، میانگین همساز دقت و بازخوانی.
F-beta
$(1+\beta^2) P R / (\beta^2 P + R)$. مقدار $\beta > 1$ به بازخوانی وزن بیشتری می‌دهد. F2 برای تشخیص تقلب رایج است.
MCC
$(TP \cdot TN - FP \cdot FN) / \sqrt{\ldots}$. بازه‌ی مقادیر از -1 تا +1 است.
AUC-ROC
مقدار 0.5 حدس تصادفی، و 1.0 تفکیک بی‌نقص است.
AUPRC
امتیاز یک مدل تصادفی برابر با نسبت کلاس مثبت است.
RMSE و MAE
متریک RMSE معادل $\sqrt{\text{MSE}}$ در مقیاس واحد هدف است. MAE نسبت به داده‌های پرت مقاوم است.
تجزیه خطا
خطای موردانتظار $= \text{Bias}^2 + \text{Variance} + \sigma^2$.

اصلاح مدل گام‌به‌گام

گام‌به‌گام
  1. آموزشخطای آموزش و خطای آزمون را محاسبه کنید.
  2. هر دو بالامشکل بایاس است. به گام 4 بروید.
  3. آموزش پایین، آزمون بالامشکل واریانس است. منحنی یادگیری را رسم کنید. اگر داده کمکی نکرد، منظم‌سازی کنید.
  4. منحنی اعتبارسنجیپیچیدگی اصلی مدل را پویش کنید. نقطه‌ی بهینه را بیابید.
  5. منحنی یادگیریآن را در نقطه‌ی بهینه رسم کنید. شکاف بزرگ نیازمند داده یا منظم‌سازی است.
  6. پویش آلفامقادیر آلفای Ridge یا Lasso را با cross_val_score بیازمایید. کمترین خطای CV را انتخاب کنید.

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

کد
python
scores = cross_val_score(model, X, y, cv=StratifiedKFold(5), scoring="f1")
param_dist = {
    "learning_rate": loguniform(1e-4, 0.5),  # مقیاس لگاریتمی
    "max_depth": randint(2, 10),
    "n_estimators": randint(50, 500),
}
search = RandomizedSearchCV(GradientBoostingRegressor(), param_dist,
    n_iter=100, cv=5, scoring="neg_mean_squared_error", n_jobs=-1)
search.fit(X_train, y_train)
search.best_params_                          # بهترین تنظیمات
outer_scores = cross_val_score(inner_cv, X, y, cv=5, scoring="neg_mean_squared_error")

استراتژی‌های جستجو

دستورها
دستورعملکرد
Grid searchتمام ترکیب‌ها. هزینه به صورت نمایی رشد می‌کند
Random searchنمونه‌گیری از توزیع‌ها. مقادیر یکتای بیشتر به ازای بودجه پردازشی
Bayesian optimizationمدل جایگزین به همراه تابع دستیابی. 2 تا 5 برابر ارزیابی کمتر
Hyperbandپیکربندی‌های زیاد با بودجه‌ی کوچک. 10 تا 50 برابر سریع‌تر
MedianPrunerمتوقف کردن آزمایشی که در آن گام از میانه‌ی بقیه بدتر عمل کرده است
GridSearchCVجستجوی جامع گرید همراه با اعتبارسنجی متقاطع
RandomizedSearchCVجستجوی تصادفی همراه با CV؛ مقدار n_jobs=-1 از تمام هسته‌ها استفاده می‌کند
trial.suggest_floatنمونه‌گیری Optuna؛ برای نرخ یادگیری log=True را اضافه کنید

انتخاب روش رفع عدم‌توازن

پیش‌فرض‌ها
تنظیمپیش‌فرضنکته
Mild, under 70/30class weightsابتدا این‌ها را امتحان کنید
Moderate, 70/30 to 95/5SMOTE + class weightsیا SMOTE همراه با تنظیم آستانه
Severe, over 95/5combine multiple strategiesترکیب SMOTE، وزن‌دهی به کلاس‌ها و تنظیم آستانه
Under 1000 samplesOversample or SMOTE, avoid undersamplingداده‌های کم
1000-10000 samplesSMOTE + threshold tuningداده‌های متوسط
Over 10000 samplesUndersampling OK, or class weightsداده‌های زیاد

اعداد کلیدی که باید بدانید

پیش‌فرض‌ها
تنظیمپیش‌فرضنکته
K folds5یا 10
Decision threshold0.5برای کلاس مثبتِ نادر، آن را کاهش دهید
Random search trials60احتمال 95% برای قرارگیری در فاصله‌ی 5% از نقطه‌ی بهینه
Hyperband start81پیکربندی‌ها در 1 اپوک؛ نگه‌داشتن یک‌سوم برتر
Nested CV fits6755 لایه بیرونی × 5 لایه درونی × 27 نقطه‌ی گرید
Bootstrap fits200n_bootstrap=200 در تجزیه‌ی خطا
SMOTE `k`5n_synthetic=100
Positive class weight10.01000 نمونه، 50 مورد مثبت

پرسش‌ها

پرسش و پاسخ
چرا فولد‌های طبقه‌بندی‌شده (Stratified)؟
هر فولد نسبت کلاس‌های کل مجموعه‌داده را حفظ می‌کند.
چرا مجموعه آزمون فقط یک‌بار استفاده شود؟
هر بار مشاهده و تنظیم، آن را به یک مجموعه‌ی اعتبارسنجی دوم تبدیل می‌کند.
چرا جستجوی تصادفی به جای گرید؟
معمولاً فقط 1 الی 2 هایپرپارامتر از بین 6 مورد اهمیت دارند.
بگینگ یا بوستینگ؟
بگینگ برای واریانس بالا؛ بوستینگ برای بایاس بالا.
وزن‌دهی به کلاس‌ها یا بیش‌نمونه‌برداری؟
از نظر مقدار موردانتظار وزن‌ها با بیش‌نمونه‌برداری یکسان‌اند، بدون ایجاد داده‌ی تکراری.
بدترین ظرفیت مدل کجاست؟
در آستانه‌ی درون‌یابی، جایی که تعداد پارامترها نزدیک به تعداد نمونه‌ها است.
چگونه امتیاز نهایی را گزارش کنم؟
از CV تو در تو یا یک مجموعه آزمون که در طول تنظیم هرگز به آن دست نزده‌اید استفاده کنید.

نکات

نکته‌ها
  • ابتدا تفکیک داده‌ها را انجام دهید، سپس پیش‌پردازش.
  • نرخ یادگیری را اول تنظیم کنید. آن را در مقیاس لگاریتمی جستجو کنید.
  • به جای تنظیم n_estimators، از توقف زودهنگام استفاده کنید.
  • 60٪ از بودجه‌ی بهینه‌سازی را صرف 2 هایپرپارامتر اصلی کنید.
  • با پیش‌فرض‌های کتابخانه شروع کنید. جستجوی درشت با 20-50 آزمایش، سپس جستجوی دقیق با 50-100 آزمایش.
  • آستانه‌ها را از 0.0 تا 1.0 روی داده‌های اعتبارسنجی بررسی کنید؛ بالاترین F1 را نگه دارید.

پیاده‌سازی توابع از صفر

کار و کد
وظیفهکد
فولدهای طبقه‌بندی‌شده (Stratified)stratified_kfold_split(y, k=5, seed=42)
سطح زیر منحنی ROCauc_roc(y_true, y_scores)
سطرهای مصنوعی از کلاس اقلیتsmote(X_minority, k=5, n_synthetic=100)
وزن‌دهی متعادل به کلاس‌هاcompute_class_weights(y)
بهترین نقطه برش بر اساس F1find_optimal_threshold(y_true, y_probs)