Menu
CoddyTech

רגולריזציה

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

מודל ליניארי בהתאמת יתר נשען על משקולות גדולות כדי להתכופף לעבר כל שורה רועשת. רגרסיית Ridge מטילה קנס על משקולות גדולות, ו-alpha קובע את המחיר.

הנה 20 גיטרות משומשות, שישה מאפיינים שעברו שינוי קנה מידה ומנבאים את המחיר:

שישה קווים, משקל אחד לכל מאפיין של גיטרה, כנגד אלפא מ-0.01 עד 1000. מצב מתחיל ב-116, מותג ב-104, גיל במינוס 83; כולם מצטמצמים לכיוון 0 ככל שאלפא גדלה

הוא נמצא במרחק החלפה אחת מ־LinearRegression, שהמשקלים שלו היו [-83. 116. 104. 27. 17. 15.]:

from sklearn.linear_model import Ridge

ridge = Ridge(alpha=100)
ridge.fit(X_train, y_train)
print(np.round(ridge.coef_))

זה מדפיס:

[-14.  18.  16.  10.   5.   8.]

אלפא גדולה יותר, משקולות קטנות יותר, פחות התאמת יתר. אם היא גדולה מדי, המודל לא מתאים מספיק.

challenge icon

אתגר

בינוני

אתר נופש חוזה מחירים של בקתות ללילה על סמך 8 מאפיינים, תוך שימוש ב-16 בקתות בלבד. התוכנית קוראת את alpha; קוד הפתיחה מפצל את הנתונים ומבצע להם קנה מידה.

  1. התאימו מודל LinearRegression ומודל Ridge עם אותו alpha.
  2. הדפיסו את גודל המשקל הכולל של כל מודל: סכום המשקלים שלו ללא סימנים, מעוגל למספר השלם הקרוב ביותר.
  3. הדפיסו את R בריבוע של כל מודל במבחן (3 ספרות אחרי הנקודה העשרונית) ואת המודל הטוב יותר, כמו בדוגמה.

עבור אזור אחר ו-5:

Total weight size: plain 90, ridge 53
Test R squared: plain -0.471, ridge 0.642
Better on new cottages: ridge

נסו בעצמכם

import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LinearRegression, Ridge
from sklearn.metrics import r2_score

alpha = float(input())

# אין לשנות את השורות שלהלן: 28 בקתות נופש, 8 מאפיינים והמחיר ללילה באירו
cottages = pd.read_csv("cottages.csv")
features = ["size_m2", "bedrooms", "lake_m", "age_years", "town_km", "sauna", "road_noise_db", "forest_m"]
X = cottages[features]
y = cottages["price"]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.4, random_state=0)
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

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

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

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

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