Menu
CoddyTech

התאמת חסר והתאמת יתר

חלק מהיחידה למידה מונחית במסלול ה-Machine Learning של Coddy. שיעור 32 מתוך 58.

נתקלת במלכודת הגדולה ביותר בלמידת מכונה: k = 1 ועצים עמוקים ששיננו את הנתונים. הפרק הזה נותן לה שם ומסתיים בתרשימים כמו זה:

דיוק האימון והאימות של עץ לפי עומק: דיוק האימון מטפס לכיוון 1.0, דיוק האימות מגיע לשיא בעומק 3 ואז צונח. קו מקווקו מסמן את העומק שנבחר, וכוכב אדום מסמן את ציון הבדיקה היחיד שלו, 0.82

המלכודת: 15 צמחי בזיליקום, שהושקו בכמויות שונות, ושלוש עקומות שהותאמו ליבול שלהם:

יבולי עלים של 15 צמחי אימון כנקודות אפורות ושל 5 צמחי בדיקה כריבועים שחורים, מול כמות המים היומית. קו כחול ישר מפספס את הגבעה, עקומה ירוקה מדרגה 3 עוקבת אחריה, עקומה אדומה מדרגה 12 מתנדנדת בפראות בין הנקודות

דרגה 1 פשוטה מדי: התאמת חסר. דרגה 12 עוברת דרך כל נקודת אימון, ומתנדנדת ביניהן: התאמת יתר, משננת במקום ללמוד.

np.polyval(coefs, x) מחזירה את הגבהים של עקומה. שגיאת RMSE באימון ובבדיקה, בגרמים:

for degree in [1, 3, 12]:
    coefs = np.polyfit(water_train, grams_train, degree)
    train_err = np.sqrt(mean_squared_error(grams_train, np.polyval(coefs, water_train)))
    test_err = np.sqrt(mean_squared_error(grams_test, np.polyval(coefs, water_test)))
    print(degree, round(train_err), round(test_err))

הוא מדפיס:

1 156 138
3 15 19
12 9 173

הסימן להתאמת יתר: שגיאת אימון קטנה, שגיאת בדיקה גדולה.

challenge icon

אתגר

בינוני

חוות רוח מדמה את ההספק של טורבינה אחת לפי מהירות הרוח. קוד הפתיחה מחלק את 24 המדידות וקורא את max_degree.

  1. עבור כל דרגה מ-1 עד max_degree, התאם עקומה לשורות האימון; הדפס את ה-RMSE של האימון והבדיקה בקילוואט שלם.
  2. הדפס את הדרגה הראשונה שבה שגיאת הבדיקה גדולה מפי שניים משגיאת האימון, או No overfitting up to degree ו-max_degree.

עבור טורבינה אחרת ו-7:

Degree 1: train 117 kW, test 172 kW
Degree 2: train 115 kW, test 182 kW
Degree 3: train 64 kW, test 85 kW
Degree 4: train 63 kW, test 79 kW
Degree 5: train 47 kW, test 67 kW
Degree 6: train 47 kW, test 65 kW
Degree 7: train 23 kW, test 85 kW
Overfitting starts at degree 7

נסו בעצמכם

import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error

max_degree = int(input())

# אין לשנות את השורות שלהלן: מהירות הרוח (m/s) וההספק (kW) של טורבינת רוח אחת
speed = np.array([3.8, 4.3, 5.1, 5.6, 5.6, 6.7, 6.8, 7.2, 7.8, 8.5, 8.9, 9.1,
                  10.2, 10.9, 11.4, 11.9, 12.2, 12.4, 12.6, 13.2, 13.9, 14.4, 15.5, 16.5])
power = np.array([0, 85, 179, 22, 17, 126, 255, 273, 419, 545, 612, 665,
                  913, 1120, 1114, 1227, 1299, 1400, 1293, 1329, 1396, 1493, 1461, 1552])
speed_train, speed_test, power_train, power_test = train_test_split(
    speed, power, test_size=0.25, random_state=0)

# כתבו את הקוד שלכם למטה
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה למידה מונחית

תרגלו בעצמכם: קומפיילר Python אונליין