Train/Test Split
تقسيم البيانات إلى تدريب واختبار Train/Test Split
تقسيم البيانات لقسمين: قسم لتدريب النموذج، وقسم مستقل تمامًا لتقييمه. القاعدة الذهبية: لا ترَ بيانات الاختبار أبدًا أثناء التدريب أو اختيار النموذج.
الهدف من تقسيم البيانات قياس قدرة النموذج على التعميم (generalization) على بيانات جديدة لم يرَها. النموذج الذي يحفظ بيانات التدريب فقط ولا يتعمّم (overfitting) سيكون أداؤه ممتازًا على التدريب وضعيفًا على الاختبار — لذا نحتاج قسمًا مستقلًا لا نلمسه إلا في النهاية.
النسبة الشائعة: 70/30 أو 80/20 للتقسيم البسيط. للبيانات الكبيرة جدًا قد يكفي 90/10 أو حتى 99/1 لأن حجم الاختبار يبقى كافيًا لإعطاء إشارة موثوقة. لمجموعات البيانات غير المتوازنة يُستخدم stratified 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, # 20% للاختبار
random_state=42, # بذرة للتكرار
stratify=y # يحافظ على نسبة الفئات
)📄 مثال
from sklearn.datasets import load_wine
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
X, y = load_wine(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.25, random_state=42, stratify=y
)
model = LogisticRegression(max_iter=1000)
model.fit(X_train, y_train)
print(f"دقة التدريب: {model.score(X_train, y_train):.2f}")
print(f"دقة الاختبار: {model.score(X_test, y_test):.2f}")أهم النقاط
| النقطة | الوظيفة |
|---|---|
| test_size | نسبة بيانات الاختبار (0.2 = 20%) |
| random_state | بذرة العشوائية — تثبيت النتائج لإعادة الإنتاج |
| stratify | يحافظ على نفس نسبة الفئات بين التدريب والاختبار |
| shuffle | خلط البيانات قبل التقسيم (True افتراضيًا) |
💡 نصائح عملية
- ثبّت random_state في كل التجارب لتكون النتائج قابلة للتكرار — وإلا ستحصل على نتائج مختلفة كل مرة
- حين تكون الفئات غير متوازنة بشدة (مثل 99% فئة واحدة)، استخدم stratify=y حتمًا
⚠️ أخطاء شائعة
- استخدام بيانات الاختبار في اختيار النموذج — يجعل التقييم النهائي متفائلًا بشكل مضلل
- تطبيق preprocessing (مثل StandardScaler) على كامل البيانات قبل التقسيم — يسبب تسريب بيانات (data leakage)
خصائص ذات صلة
🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار AI-ML الكامل بالعربي.