Menu
CoddyTech

סקיילינג לפי מינימום-מקסימום

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

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

הוסיפו אדם בן 40 שמשתכר 80,000 דולר, ואז בצעו התאמה של כל ארבעת הערכים:

הגילים וההכנסות של ארבעה לקוחות כטבלה, חץ, ואז אותה טבלה לאחר התאמה: בכל עמודה הערך הקטן ביותר הפך ל־0.00 והגדול ביותר ל־1.00, עם הצללה כהה יותר, והערכים האחרים ביניהם

שידור מבצע זאת בשורה אחת, עם הערך הקטן ביותר והטווח של כל עמודה:

X = np.array([[25, 52000],
              [61, 53000],
              [26, 55000],
              [40, 80000]])
lows = X.min(axis=0)
highs = X.max(axis=0)
scaled = (X - lows) / (highs - lows)

עכשיו גם הגיל נחשב. השכן הקרוב ביותר של לקוח 0 כבר אינו בן ה־61:

הלקוחות לאחר נרמול כנקודות בריבוע שבין 0 ל־1, עם קווים מלקוח 0: בן ה־26 הוא הקרוב ביותר במרחק 0.11, בן ה־61 במרחק 1.00, והמשתכר 80,000$ במרחק 1.08

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

challenge icon

אתגר

בינוני

קלייה מתאימה בין סוגי קפה שנחלטים באופן דומה. כל שורה של beans היא סוג קפה: טמפרטורת המים (C), זמן החליטה (s) וכמות הקפאין (mg). התוכנית קוראת את המיקומים i ו-j; הפונקציה ההתחלתית distance(a, b) מודדת את המרחק בין שתי דגימות.

  1. בצעו קנה מידה מינימום-מקסימום ל-beans.
  2. הדפיסו את Every column from 0 to 1:, ואז את הטבלה המותאמת ל-2 ספרות אחרי הנקודה העשרונית.
  3. הדפיסו את המרחק ביניהם לפני ואחרי ההתאמה, כמו בדוגמה שלהלן.

עבור שלושת סוגי הקפה האחרים, במיקומים 0 ו-1:

Every column from 0 to 1:
[[1.   1.   0.67]
 [0.5  0.5  0.  ]
 [0.   0.   1.  ]]
Coffees 0 and 1: 63.28 apart before scaling, 0.97 after

נסו בעצמכם

import numpy as np


# מחזירה את המרחק בין שתי דגימות (מתוך Why Scale Features)
def distance(a, b):
    return np.sqrt(((a - b) ** 2).sum())


# שורה אחת לכל קפה: טמפרטורת המים ב-C, זמן החליטה בשניות, כמות הקפאין ב-mg
beans = np.array([[88, 120, 60],
                  [96, 300, 30],
                  [86, 90, 70],
                  [94, 240, 120],
                  [90, 180, 90],
                  [84, 60, 50]])
i = int(input())
j = int(input())

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

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

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

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