Menu
CoddyTech

StandardScaler

חלק מהיחידה סטטיסטיקה ללמידת מכונה במסלול ה-Machine Learning של Coddy. שיעור 50 מתוך 64.

מודל חייב להתאים כל דגימה חדשה בדיוק כפי שהתאים את נתוני האימון שלו. StandardScaler של scikit-learn מתקנן וזוכר כיצד:

תרשים: 4 העבודות הקודמות של מנקה חלונות, X_train, עוברות דרך fit אל מתאם קנה מידה שזוכר את mean_ 8 ו-22 ואת scale_ 4.47 ו-9.72. עבודה חדשה, 8 ו-30, עוברת דרך transform תוך שימוש במספרים האלה, ומתקבלים 0.00 ו-0.82

בקוד, עבור כל עבודה מצוינים מספר החלונות שנוקו והדקות שנדרשו:

from sklearn.preprocessing import StandardScaler

X_train = np.array([[2, 8], [10, 25], [6, 20], [14, 35]])
scaler = StandardScaler()
scaler.fit(X_train)
X_new = np.array([[8, 30]])  # דגימה אחת: טבלה עם שורה אחת
print(np.round(scaler.transform(X_new), 2))

זה מדפיס:

[[0.   0.82]]

fit לומדת את הממוצע ואת סטיית התקן של כל עמודה (מחלקת ב־n, כמו np.std), ושומרת אותם ב־scaler.mean_ וב־scaler.scale_. transform מחילה אותם.

לעולם אל תבצע התאמה לנתונים חדשים: הממוצע שלהם יהיה הממוצע של עצמם והתוצאה תהיה [[0. 0.]]. על נתוני האימון, fit_transform מבצע את שתי הפעולות בקריאה אחת.

challenge icon

אתגר

בינוני

מסווג למד מהאבוקדו שב־X_train: משקל, מוצקות וימים מאז הקטיף. התוכנית קוראת אבוקדו חדש לטבלה בת שורה אחת new_avocado, אבל פעולת ההתאמה של קוד הפתיחה להיקף מדפיסה [[0. 0. 0.]] עבור כל אבוקדו.

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

עבור אצווה אחרת:

New avocado: [[2.98 0.   0.09]]
1 of 3 measurements are more than 2 std from the training avocados

נסו בעצמכם

import numpy as np
from sklearn.preprocessing import StandardScaler

# אבוקדו לאימון, שורה אחת לכל אבוקדו: משקל בגרמים, מידת קשיות מ־1 עד 10, ימים מאז הקטיף
X_train = np.array([[210, 8, 2],
                    [185, 5, 6],
                    [240, 7, 3],
                    [170, 3, 9],
                    [225, 6, 5],
                    [195, 4, 7]])
# אבוקדו חדש על המסוע
weight = float(input())
firmness = float(input())
days = float(input())
new_avocado = np.array([[weight, firmness, days]])

# הקוד הזה מדפיס [[0. 0. 0.]] עבור כל אבוקדו: תקנו אותו
scaler = StandardScaler()
scaled = scaler.fit_transform(new_avocado)
print("New avocado:", np.round(scaled, 2))

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

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

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

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