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