Menu
CoddyTech

התאמת קנה המידה לשכנים

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

‏k-NN מודד מרחק, ולכן תכונה עם מספרים גדולים גוברת על השאר, כפי שהזהרנו ביחידה 2. כאן המרחק מהנהר, במטרים, מטביע את הגובה:

שתי מפות של 160 בתים, מרחק מהנהר לרוחב וגובה למעלה, מוצפים או יבשים. ללא שינוי קנה מידה: המפה מחולקת לפסים אנכיים לפי המרחק בלבד, דיוק 0.6. לאחר שינוי קנה מידה: הבתים המוצפים נמצאים בפינה הנמוכה ליד הנהר, דיוק 0.925

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

scaler = StandardScaler()
X_train_s = scaler.fit_transform(X_train)
X_test_s = scaler.transform(X_test)
model = KNeighborsClassifier()
model.fit(X_train_s, y_train)
print(model.score(X_test_s, y_test))

זה מדפיס 0.925, עלייה מ־0.6. שורות הבדיקה נשארות לא נצפות: הסקלר לא לומד מהן דבר.

challenge icon

אתגר

קל

מונה חכם מנחש איזה מכשיר פועל לפי צריכת החשמל שלו (בוואט) ומשך זמן הפעולה (בדקות), בקובץ meter.csv. קוד הפתיחה קורא את k ומדפיס את הדיוק של k-NN על המאפיינים הגולמיים.

  1. התאימו StandardScaler לשורות האימון והמירו את שתי הקבוצות.
  2. אמנו מודל k-NN עם אותו k על השורות המותאמות; הדפיסו את הדיוק שלו עם 3 ספרות אחרי הנקודה העשרונית.
  3. הדפיסו את השיפור.

עבור בית אחר ו-k = 5:

Unscaled accuracy: 0.65
Scaled accuracy: 0.875
Scaling gains 0.225

נסו בעצמכם

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.preprocessing import StandardScaler

# שורה אחת לכל הפעלה של מכשיר: הספק בוואט, משך פעולה בדקות ואיזה מכשיר
meter = pd.read_csv("meter.csv")
X = meter[["watts", "minutes"]]
y = meter["appliance"]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0)
k = int(input())

# k-NN על המאפיינים הגולמיים
raw_model = KNeighborsClassifier(n_neighbors=k)
raw_model.fit(X_train, y_train)
raw = raw_model.score(X_test, y_test)
print(f"Unscaled accuracy: {round(raw, 3)}")

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

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

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

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