בפוסט הזה, נעבור על היסודות של Min-Max scaler. כמו כן, נתמקד כיצד להרחיב עמודות ספציפיות פנדות DataFrame.
מהו Min-Max scaler?
קנה מידה Min-Max היא טכניקת נורמליזציה המאפשרת לנו לשנות את קנה המידה של נתונים במערך נתונים לטווח מסוים תוך שימוש בערך המינימלי והמקסימלי של כל תכונה.
שלא כמו קנה מידה סטנדרטי, שבו הנתונים מותאמים על סמך ההתפלגות הנורמלית הסטנדרטית (עם ממוצע = 0 ו סטיית תקן = 1), ה-min-max scaler משתמש בכל עמודה מִינִימוּם ו מַקסִימוּם ערך לקנה מידה של סדרת הנתונים.
אבל למה זה בכלל נדרש?
- קנה המידה של הנתונים עבור תכונות מסוימות עשוי להיות שונה באופן משמעותי מאלה של אחרים, מה שעשוי לפגוע בביצועים של הדגמים שלנו. זה במיוחד המקרה עם אלגוריתמים המסתמכים על מידה של מרחקים, כגון רשתות עצביות ו KNN.
- זה גם מועיל לאופטימיזציה למידת מכונה תהליכים כמו ירידה בשיפוע ומאפשר להתכנסות להתרחש מהר יותר.
- זה יכול לעזור לשפר את הביצועים והמהירות של ביצוע האלגוריתמים. מכיוון שהנתונים כבר מוקטנים, חישובים מורכבים הנדרשים בעיקר כדי לייעל אלגוריתמים מהירים יותר.
- זה יכול להיות מועיל גם כאשר משווים מערכי נתונים או מודלים שונים מבחינת הביצועים שלהם.
קנה המידה Min-Max, מיושם ב sklearn
ספריות, שימשה ביישומי Machine Learning רבים כמו ראייה ממוחשבת, עיבוד שפה טבעית וזיהוי דיבור.
נשתמש בדברים הבאים sklearn
שיטה ליישם טכניקה זו על כל העמודות ב-DataFrame של פנדה.
sklearn.preprocessing.MinMaxScaler().fit_transform()
אנו גם נראה כיצד ליישם זאת על עמודות ספציפיות במסגרת נתונים באמצעות שתי שיטות במדריך זה. אתאר את כל אלה להלן עם דוגמאות ממאגר הנתונים של פימה הודית לסוכרת.
שיטה 1: sklearn.preprocessing MinMaxScaler()
נשתמש במערך הנתונים הפופולרי של סוכרת – מערך הנתונים של Pima Indian Diabetes מ-UCI כדי להראות דרכים שונות שבהן אנו יכולים ליישם קנה מידה מינימלי.
ללא ספק, הדרך הקלה ביותר היא להשתמש ב- sklearn
חבילת ספרייה ושיטת השליטה שלה.
אבל ראשית, בואו נכניס את הנתונים למסגרת הנתונים שלנו באמצעות ה ספריית פנדות ולבצע קצת EDA.
import pandas as pd columns = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class'] data = pd.read_csv('pima-indians-diabetes.data.csv', names=columns) data.head()

יש לנו תשע עמודות, כשהאחרונה היא המחלקה שאנו מנסים לחזות במודל שלנו.
הפריטים עם סוג 1 מראים שלמשתמש מסוים יש סוכרת ואלו עם סוג 0 מצביעים על כך שהמשתמשים נבדקו שלילי לסוכרת. התכונות אינן מאותו יחידה או קנה מידה.
קח, למשל, את שתי העמודות הראשונות (preg
ו plas
); זה ברור ש preg
– המציין כמה פעמים המטופלת הייתה בהיריון הוא ביחידה ספרה בעוד plas
– שהוא הגלוקוז הפלזמה של הלקוח הוא בעשרות או מאות יחידות.
נתאר את הנתונים כדי לראות את ההתפלגות של כל עמודה.
data.describe()

באופן גרפי, אנו יכולים לראות כיצד הנתונים מפוזרים למטה.
data[columns].hist(stacked=False, bins=100, figsize=(12,30), layout=(14,2));

הגרפים שלמעלה מראים בבירור שהתכונות אינן באותו קנה מידה. עם זאת, עם sklearn
min-max scaler, אנו יכולים להבטיח שהעמודות משתמשות באותו קנה מידה.
תחילה נפריד את הנתונים לקלט ופלט.
# Separating the data into input and output components X = data.drop('class', axis=1) Y = data['class'] # class is the output X.head()

תן לנו לשנות את קנה המידה של כל התכונות לאותו קנה מידה ולטווח שבין 0 ל-1 בערכים באמצעות sklearn MinMaxScaler
לְהַלָן:
from sklearn.preprocessing import MinMaxScaler X_copy = X.copy() #We create a copy so we can still refer to the original dataframe later scaler = MinMaxScaler() X_columns = X.columns X_scaled = pd.DataFrame(scaler.fit_transform(X_copy), columns=X_columns) X_scaled.head()

אנחנו יכולים לתאר את הנתונים ב X_scaled
כדי להציג את ערכי המינימום והמקסימום של כל עמודה.
כעת הם 0 ו-1 בהתאמה עבור כל העמודות, וכעת הם גם באותו קנה מידה.
X_scaled.describe()

כעת נניח שרק תת-קבוצה של העמודות השלמות יש לשנות את קנה המידה. לדוגמה, הבה נבחן מצב בו אנו צריכים רק להתאים את העמודות preg
ו plas
בעוד עמודים אחרים שומרים על סולמותיהם; איך אנחנו עושים את זה
שוב נוכל להשתמש ב-min-max scaler של sklearn
חבילה לעשות זאת באופן הבא:
from sklearn.preprocessing import MinMaxScaler X_copy = X.copy() scaler = MinMaxScaler() X_copy[['preg', 'plas']] = scaler.fit_transform(X_copy[['preg', 'plas']]) X_copy.head()

אנחנו יכולים לראות רק preg
ו plas
מותאמים. אנו יכולים גם להראות שהערכים המינימליים והמקסימליים של שתי העמודות הם 0 ו-1, בהתאמה, למטה.
X_copy.describe()

שיטה 2: חישוב מפורש
אנחנו יכולים לכתוב את הפונקציה שלנו כדי לחשב את הערך בקנה מידה של X
כדלהלן. אותו חישוב הוא בעצם מה של שיטת ה-min-max scaler sklearn
עושה מתחת למכסה המנוע.
def scale_column(df,column): column_max = df[column].max() column_min = df[column].min() for i in range(df[column].count()): df.loc[i,column] = (df.loc[i,column] - column_min) / (column_max - column_min)
אנו יוצרים א עותק של מסגרת הנתונים שלנו שוב (אנחנו רוצים לשמור על מסגרת הנתונים המקורית כדי להציג דוגמאות נוספות בהמשך).
לאחר מכן אנו משתמשים בשיטה שלנו כדי לשנות את קנה המידה של עמודות ספציפיות במסד הנתונים באופן הבא:
X_copy2 = X.copy() scale_column(X_copy2,'preg') scale_column(X_copy2,'plas') X_copy2.head()

אנו יכולים לראות שהפלט זהה למה שקיבלנו באמצעות sklearn
חבילה למעלה.
אנו יכולים גם לתאר את מסגרת הנתונים ולהראות את הערכים בשתי העמודות שסקלנו כעת בין 0 ל-1.
X_copy2.describe()

סיכום
בפוסט הזה, סקרנו את קנה המידה של min-max, למה אנחנו צריכים את זה כדי לייעל אלגוריתמים, וכיצד להחיל scaler של min-max על מערך נתונים שלם במסגרת נתונים של פנדה.
כמו כן, חקרנו שינוי קנה מידה של עמודות ספציפיות במסגרת נתונים כזו באמצעות קנה מידה של מינימום-מקס.
דנו בשתי גישות לכך, האחת התמקדה ב sklearn
החבילה והאחרת באמצעות פונקציה מוגדרת מראש.
קישור לכתבת המקור – 2022-01-28 21:57:03