Menu
CoddyTech
flag Ar iconالعربيةdown icon

مجموعات التحقّق

جزء من قسم التعلّم الخاضع للإشراف في رحلة Machine Learning على Coddy. الدرس 35 من 58.

في درس اختيار k وعمق الشجرة، احتفظتَ بقيمة k أو العمق الذي حقق أفضل نتيجة على بيانات الاختبار. لكن هذه النتيجة قد تكون مضلِّلة: فقد احتفظتَ بها لأنها جاءت مرتفعة.

لذا احتفظ بمجموعة ثالثة للاختيار، وهي مجموعة التحقق:

شريط مقسّم إلى ثلاثة أجزاء: صفوف التدريب 60%، تُستخدم لتدريب كل نموذج مرشّح؛ التحقق 20%، يُستخدم للاختيار؛ الاختبار 20%، يُستخدم لإعداد التقرير مرة واحدة

تقسيمان يفيان بالغرض. 0.25 من نسبة 80% المتبقية تساوي 20%:

X_rest, X_test, y_rest, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
X_train, X_val, y_train, y_val = train_test_split(X_rest, y_rest, test_size=0.25, random_state=0)
print(len(X_train), len(X_val), len(X_test))

بالنسبة إلى 500 صف، يطبع:

300 100 100

اختر بناءً على مجموعة التحقق. استخدم مجموعة الاختبار مرة واحدة، في النهاية تمامًا.

challenge icon

التحدي

متوسط

يتنبأ أحد مزارع العنب بمحصول العنب لكل صف باستخدام Ridge. يختار البرنامج الأولي alpha بناءً على نتيجة الاختبار ويعرض النتيجة نفسها. أصلح ذلك.

  1. قسّم X_rest وy_rest إلى صفوف تدريب وتحقق (test_size=0.25، random_state=0).
  2. اختر alpha بناءً على معامل التحديد R² للتحقق، واطبعه مع تلك النتيجة.
  3. درّب النموذج باستخدام قيمة alpha المختارة على صفوف التدريب، واطبع معامل التحديد R² للاختبار.

لمزرعة عنب أخرى:

Chosen alpha: 1 (validation R squared 0.787)
Test R squared: 0.726

غالبًا ما تكون النتيجة الصادقة أقل من نتيجة البرنامج الأولي. إنها النتيجة الحقيقية.

جرّب بنفسك

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import Ridge


# يدرّب نموذج Ridge(alpha) بعد تحجيم البيانات على المجموعة الأولى من الصفوف، ويُرجع قيمة R المربعة على المجموعة الثانية
def ridge_r2(alpha, X_fit, y_fit, X_check, y_check):
    scaler = StandardScaler()
    model = Ridge(alpha=alpha)
    model.fit(scaler.fit_transform(X_fit), y_fit)
    return model.score(scaler.transform(X_check), y_check)


# 90 صفًا من بيانات الكرم: 10 قياسات لكل صف، بالإضافة إلى محصول العنب بوحدة kg
rows = pd.read_csv("vineyard.csv")
features = ["sun_hours", "rain_mm", "soil_ph", "slope_deg", "vine_age",
            "row_length_m", "buds_per_vine", "frost_days", "wind_kmh", "clay_pct"]
X = rows[features]
y = rows["yield_kg"]
alphas = [0.1, 1, 10, 100]
X_rest, X_test, y_rest, y_test = train_test_split(X, y, test_size=0.2, random_state=0)

# يختار هذا alpha بناءً على درجة الاختبار، ثم يعرض الدرجة نفسها: أصلح ذلك
best_alpha = 0
best_r2 = -1
for alpha in alphas:
    r2 = ridge_r2(alpha, X_rest, y_rest, X_test, y_test)
    if r2 > best_r2:
        best_alpha = alpha
        best_r2 = r2
print(f"Chosen alpha: {best_alpha}")
print(f"Test R squared: {best_r2:.3f}")
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس التعلّم الخاضع للإشراف

تدرّب بنفسك: مترجم Python عبر الإنترنت