تقسیم داده: Train و Test

چرا داده را تقسیم می‌کنیم؟ آموزش train_test_split، نسبت‌های مناسب و جلوگیری از نشت داده

چرا داده را تقسیم می‌کنیم؟

اگر مدل را روی همان داده‌ای که با آن آموزش دیده ارزیابی کنیم، مثل برگزاری امتحان از سؤالاتی است که دانش‌آموز از قبل جوابشان را دیده! نمره بالا می‌گیرد ولی واقعاً یاد نگرفته.

پس داده را دو قسمت می‌کنیم:

train_test_split در scikit-learn

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,    # برای تکرارپذیری
    stratify=y          # حفظ نسبت کلاس‌ها (برای دسته‌بندی)
)

پارامترهای مهم

پارامترکاربرد
test_sizeسهم داده تست (۰.۲ یا ۰.۳)
random_stateثابت نگه‌داشتن تصادفی بودن برای تکرارپذیری
stratifyحفظ نسبت کلاس‌ها در هر دو بخش (مهم برای داده نامتوازن)

چرا stratify مهم است؟

اگر ۹۰٪ داده کلاس «سالم» و ۱۰٪ «بیمار» باشد، شاید داده تست هیچ بیماری نداشته باشد! با stratify=y نسبت ۹۰-۱۰ در هر دو بخش حفظ می‌شود.

داده اعتبارسنجی (Validation)

در پروژه‌های جدی، سه قسمت داریم:

نشت داده (Data Leakage)

هر اطلاعاتی از داده تست که قبل از ارزیابی به مدل برسد، «نشت» است و دقت را غیرواقعی بالا می‌برد. مثال‌ها: fit کردن scaler روی کل داده، حذف گمشده‌ها قبل از تقسیم، استفاده از ویژگی‌ای که در آینده قابل محاسبه نیست.

قاعده طلایی

داده تست را تا آخرین لحظه لمس نکنید! آن را در کشو بگذارید و فقط برای امتحان نهایی بیرون بیاورید.

جمع‌بندی

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

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