مجموعات التحقّق
جزء من قسم التعلّم الخاضع للإشراف في رحلة Machine Learning على Coddy. الدرس 35 من 58.
في درس اختيار k وعمق الشجرة، احتفظتَ بقيمة k أو العمق الذي حقق أفضل نتيجة على بيانات الاختبار. لكن هذه النتيجة قد تكون مضلِّلة: فقد احتفظتَ بها لأنها جاءت مرتفعة.
لذا احتفظ بمجموعة ثالثة للاختيار، وهي مجموعة التحقق:
تقسيمان يفيان بالغرض. 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اختر بناءً على مجموعة التحقق. استخدم مجموعة الاختبار مرة واحدة، في النهاية تمامًا.
التحدي
متوسطيتنبأ أحد مزارع العنب بمحصول العنب لكل صف باستخدام Ridge. يختار البرنامج الأولي alpha بناءً على نتيجة الاختبار ويعرض النتيجة نفسها. أصلح ذلك.
- قسّم
X_restوy_restإلى صفوف تدريب وتحقق (test_size=0.25،random_state=0). - اختر alpha بناءً على معامل التحديد R² للتحقق، واطبعه مع تلك النتيجة.
- درّب النموذج باستخدام قيمة 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}")
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس التعلّم الخاضع للإشراف
تدرّب بنفسك: مترجم Python عبر الإنترنت