Menu
CoddyTech

ערכות אימות

חלק מהיחידה למידה מונחית במסלול ה-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 אונליין