Menu
CoddyTech

מדידת שגיאות

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

בכמה דולרים המודל מפספס? הנה מודל מחירי בתים, שנבחן על חמישה בתים שלא ראה מעולם:

חמישה עמודות, אחת לכל בית בדיקה, שמציגות את גודל הטעות של מודל המחירים: 20, 40, 10, 90 ו־30 אלף דולר. קו מקווקו מסמן את ה־MAE בגובה 38, וקו מנוקד מסמן את ה־RMSE בגובה 47.1, גבוה יותר בגלל הטעות הגדולה היחידה של 90

sklearn.metrics מודד עבורך את השגיאות:

from sklearn.metrics import mean_absolute_error, mean_squared_error, r2_score

y_test = np.array([290, 410, 235, 520, 330])  # אלפי דולרים
pred = np.array([270, 450, 245, 430, 360])
print(mean_absolute_error(y_test, pred))
print(np.round(np.sqrt(mean_squared_error(y_test, pred)), 1))
print(np.round(r2_score(y_test, pred), 3))

זה מדפיס:

38.0
47.1
0.776

MAE, השגיאה המוחלטת הממוצעת, היא גודל הפספוס האופייני: 38 אלף. RMSE מעלה בריבוע את הפספוסים, מחשב את הממוצע ואז מוציא שורש: פספוס גדול אחד מעלה אותה ל־47.

שניהם מבוטאים ביחידות של ערך היעד. r2_score הוא R בריבוע שלך: 78% מהפיזור במחירים מוסבר.

challenge icon

אתגר

בינוני

חנות מתמחרת מצלמות יד שנייה באמצעות מודל. האם תכונה נוספת עוזרת? התוכנית קוראת את shutter_k (אלפי תמונות שצולמו) או את megapixels. קוד הפתיחה מתאים שני מודלים: אחד עם age_years בלבד, ואחד עם התכונה הנוספת, ושומר את התחזיות שלהם עבור נתוני הבדיקה ב-preds.

  1. עבור כל מודל, הדפיסו את ה-MAE שלו, את ה-RMSE (ספרה אחת אחרי הנקודה העשרונית) ואת R squared (3 ספרות אחרי הנקודה העשרונית).
  2. הדפיסו את המודל עם ה-MAE הנמוך יותר.

עבור חנות אחרת ו-shutter_k:

age_years: MAE 212.4, RMSE 268.1, R squared 0.853
age_years + shutter_k: MAE 98.7, RMSE 121.0, R squared 0.97
Better: age_years + shutter_k, off by 98.7 dollars on a typical camera

נסו בעצמכם

import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression

# שורה אחת לכל מצלמה שנמכרה: גיל, מספר הפעלות התריס באלפים, מגה־פיקסלים, מחיר בדולרים
cameras = pd.read_csv("cameras.csv")
extra = input()
names = ["age_years", "age_years + " + extra]
columns = [["age_years"], ["age_years", extra]]
# פצלו שורות שלמות; כל מודל בהמשך בוחר את העמודות שלו
X_train, X_test, y_train, y_test = train_test_split(cameras, cameras["price"], test_size=0.25, random_state=0)
# מודל אחד לכל רשימת עמודות, והתחזיות שלו עבור מצלמות הבדיקה
preds = []
for cols in columns:
    model = LinearRegression()
    model.fit(X_train[cols], y_train)
    preds.append(model.predict(X_test[cols]))

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

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

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

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