אחרי שבודקים את הנתונים באמצעות שיטות סטטיסטיות ותצוגות חזותיות, צריך לבצע טרנספורמציה של הנתונים באופן שיעזור לאמן את המודל בצורה יעילה יותר. המטרה של הנורמליזציה היא להפוך את המאפיינים כך שיוצגו בסולם דומה. לדוגמה, נבחן את שתי האפשרויות הבאות תכונות:
- המאפיין
X
כולל טווח של 154 עד 24,917,482. - המאפיין
Y
חורג מהטווח 5 עד 22.
שתי התכונות האלה מתפרשות על פני טווחים שונים מאוד. נירמול עלול להשפיע
X
ו-Y
כך שהן פרוסות בטווח דומה, אולי 0 עד 1.
אלה היתרונות של יצירת תבניות:
- עוזר למודלים להצטבר מהר יותר במהלך האימון. כשלמאפיינים שונים יש טווחים שונים, ירידה בגרדינט יכולה לגרום ל'קפיצה' ולהאטת ההתכנסות. עם זאת, אופטימיזטורים מתקדמים יותר כמו Adagrad ו-Adam מגינים מפני הבעיה הזו על ידי שינוי קצב הלמידה בפועל לאורך זמן.
- עוזר למודלים להסיק חיזויים טובים יותר. אם לתכונות שונות יש טווחים שונים, התוצאה יכול להיות חיזויים קצת פחות שימושיים.
- עוזרת להימנע מ'מלכודת ה-NaN' כשערכי המאפיינים גבוהים מאוד.
NaN הוא קיצור של not a number. אם ערך במודל חורג ממגבלת הדיוק של נקודת הצפה, המערכת מגדירה את הערך כ-
NaN
במקום כמספר. כשמספר אחד במודל הופך ל-NaN, גם מספרים אחרים במודל הופכים ל-NaN בסופו של דבר. - עוזרת למודל ללמוד משקלים מתאימים לכל מאפיין. ללא התאמה לעומס (scaling) של המאפיינים, המודל מקדיש יותר מדי תשומת לב לתכונות עם טווחים רחבים וללא תשומת לב מספקת לתכונות טווחים צרים.
מומלץ לבצע נורמליזציה של מאפיינים מספריים שמכסים טווחים שונים מאוד (לדוגמה, גיל והכנסה).
אנחנו ממליצים גם לנרמל תכונה מספרית אחת שמכסה טווח רחב,
כמו city population.
מומלץ להביא בחשבון את שתי התכונות הבאות:
- הערך הנמוך ביותר של התכונה
A
הוא -0.5 והערך הגבוה ביותר הוא +0.5. - הערך הנמוך ביותר של התכונה
B
הוא -5.0 והערך הגבוה ביותר הוא +5.0.
למאפיין A
ולמאפיין B
יש טווחים יחסית צרים. עם זאת, היקף התכונה B
רחב פי 10 מהיקף התכונה A
. לכן:
- בתחילת האימון, המודל מניח שתכונה
A
"חשובה" פי עשרה מתכונהB
. - תהליך ההדרכה יימשך יותר זמן מהצפוי.
- יכול להיות שהמודל שייווצר לא יהיה אופטימלי.
הנזק הכולל עקב אי-נירמול יהיה קטן יחסית; עם זאת, אנחנו עדיין ממליצים לנרמל את תכונה א' ואת תכונה ב' באותו קנה מידה, אולי -1.0 עד +1.0.
עכשיו נבחן שתי תכונות עם הבדל גדול יותר בין הטווחים:
- הערך הנמוך ביותר של המאפיין
C
הוא -1 והערך הגבוה ביותר הוא +1. - הערך הנמוך ביותר של המאפיין
D
הוא +5,000 והערך הגבוה ביותר הוא +1,000,000,000.
אם לא תבצעו נורמליזציה של מאפיין C
ומאפיין D
, סביר להניח שהמודל לא יהיה אופטימלי. בנוסף, תהליך האימון יימשך הרבה יותר זמן עד שיגיע לערעור, או שהוא עלול לא להגיע לערעור בכלל.
בקטע הזה נסביר על שלוש שיטות נפוצות לנירמול:
- מדרגיות לינארית
- שינוי ציון ה-Z
- מדרגיות יומנים
בקטע הזה מוסבר גם על חיתוך. אמנם זו לא טכניקה רגילה של נורמליזציה, אבל היא מאפשרת לצמצם תכונות מספריות לא רצויות לטווח נתונים שמניב מודלים טובים יותר.
קנה מידה לינארי
התאמה לינארית (שינוי נפוץ יותר מומר להתאמה לעומס בלבד) פירושו המרה של ערכי נקודה צפה (floating-point) את הטווח הטבעי שלהם לטווח סטנדרטי - בדרך כלל 0 עד 1, או 1- עד +1.
מדרגות לינארית היא בחירה טובה כאשר כל התנאים הבאים מתקיימים:
- הערכים התחתון והעליון של הנתונים לא משתנים הרבה לאורך זמן.
- התכונה מכילה מעט ערכים חריגים או לא מכילה ערכים כאלה, והערכים החריגים האלה לא קיצוניים.
- התכונה מופצת באופן שווה פחות או יותר בטווח שלה. כלומר, בתרשים היסטוגרמה יוצגו עמודות בערך שווה בערך לרוב הערכים.
נניח שage
אנושי הוא תכונה. שינוי קנה מידה ליניארי הוא שיטה טובה לנירמול של age
כי:
- הערכים המשוערים של הגבול התחתון והגבול העליון הם 0 עד 100.
age
מכיל אחוז קטן יחסית של ערכים חריגים. רק כ-0.3% מהאוכלוסייה הם בני יותר מ-100.- למרות שקבוצות גיל מסוימות מיוצגות טוב יותר מאחרות, מערך נתונים גדול אמור להכיל דוגמאות מספיקות מכל הגילאים.
תרגיל: בדקו את ההבנה שלכם
נניח שלמודל יש תכונה בשםnet_worth
שמחזיקה ברשת
ששווה לאנשים שונים. האם קנה מידה לינארי הוא נירמול טוב
של net_worth
? למה או למה לא?
שינוי קנה המידה של ציון התקן
Z-score הוא מספר סטיות התקן שמקבל ערך מהממוצע. לדוגמה, ערך ש-2 סטיות סטנדרטיות גבוהות מהממוצע, מקבל ציון Z של +2.0. ערך שהוא 1.5 סטיות תקן פחות מ- לממוצע יש ציון Z של 1.5-.
המשמעות של ייצוג תכונה באמצעות דירוג Z היא ציון Z בווקטור המאפיין. לדוגמה, האיור הבא מראה היסטוגרמות:
- בצד ימין, מוצגת התפלגות נורמלית קלאסית.
- בצד ימין, אותה התפלגות מנורמלת על ידי קנה מידה של ציון Z.
שינוי ציון ה-Z הוא גם אפשרות טובה לנתונים כמו אלה שמוצגים את הנתון הבא, שיש לו התפלגות נורמלית חלקית בלבד.
ציון ה-Z הוא בחירה טובה כשהנתונים מוצגים לפי התפלגות נורמלית או התפלגות דומה במידה מסוימת להתפלגות נורמלית.
לתשומת ליבך, חלק מההתפלגויות עשויות להיות נורמליות בחלק גדול מההתפלגות
אבל עדיין לכלול חריגים קיצוניים. לדוגמה, כמעט כל
נקודות בתכונה net_worth
עשויות להתאים בדיוק ל-3 סטיות תקן,
אבל כמה דוגמאות לתכונה הזו יכולות להיות מאות סטיות תקן
רחוק מהממוצע. במקרים כאלה, אפשר לשלב בין שינוי קנה המידה של ציון Z לבין סוג אחר של נירמול (בדרך כלל חיתוך) כדי לטפל במצב הזה.
תרגול: בדיקת ההבנה
נניח שהמודל שלכם מתאמן על מאפיין בשםheight
שמכיל את הגובה של עשרה מיליון נשים בוגרות. האם שינוי קנה המידה של ציון התקן יהיה שיטה טובה לנרמל את height
? למה או למה לא?
שינוי גורף ביומן
שינוי קנה מידה של יומנים מחשב את הלוגריתם של הערך הגולמי. בתיאוריה, לוגריתם יכול להיות כל בסיס, בפועל, התאמה לעומס (scaling) של יומנים את הלוגריתם הטבעי (ln).
התאמה לעומס (scaling) של יומנים יכולה להיות שימושית כשהנתונים תואמים להתפלגות של חוקי כוח. באופן אקראי, התפלגות של חוקי כוח נראית כך:
- לערכים נמוכים של
X
יש ערכים גבוהים מאוד שלY
. - ככל שהערכים של
X
גדלים, הערכים שלY
יורדים במהירות. כתוצאה מכך, לערכים גבוהים שלX
יש ערכים נמוכים מאוד שלY
.
דירוגי סרטים הם דוגמה טובה להתפלגות של חוק כוח. בתוך איור, שימו לב:
- לחלק מהסרטים יש הרבה דירוגים של משתמשים. (ערכים נמוכים של
X
הם גבוהים שלY
.) - לרוב הסרטים יש מעט מאוד דירוגי משתמשים. (לערכים גבוהים של
X
יש ערכים נמוכים שלY
).
שינוי הגודל של הנתונים ביומן משנה את ההתפלגות, וכך עוזר לאמן מודל שיוכל לחזות טוב יותר.
כדוגמה שנייה, מכירות ספרים תואמות התפלגות של חוקי כוח מהסיבות הבאות:
- רוב הספרים שפורסמו נמכרים במספר קטן מאוד של עותקים, אולי מאה או מאתיים.
- ספרים מסוימים נמכרים במספר בינוני של עותקים, באלפים.
- רק כמה רבי-מכר יימכרו ביותר ממיליון עותקים.
נניח שאתם מאומנים מודל לינארי כדי למצוא את הקשר בין, למשל, עטיפות של ספרים למכירות של ספרים. אימון של מודל ליניארי על ערכים גולמיים למצוא משהו על עטיפות של ספרים שנמכרים במיליון עותקים שהיא חזקה יותר ב-10,000 מאשר כריכות של ספרים שנמכרים בהן רק 100 עותקים. עם זאת, הגדלה של כל נתוני המכירות ביומן הופכת את המשימה לביצועית הרבה יותר. לדוגמה, הלוג של 100 הוא:
~4.6 = ln(100)
בעוד שהלוג של 1,000,000 הוא:
~13.8 = ln(1,000,000)
כלומר, היומן של 1,000,000 גדול רק פי שלושה מאשר היומן של 100. סביר להניח שתוכלו לדמיין שכריכה של ספר רבי-מכר חזקה פי שלושה (באופן כלשהו) מכריכה של ספר שמספר המכירות שלו נמוך מאוד.
חיתוך
חיתוך היא שיטה שמאפשרת למזער את ההשפעה של חריגות קיצוניות. בקצרה, בדרך כלל מדובר באותיות רישיות. (מפחיתה) את הערך של חריגים לערך מקסימלי ספציפי. 'חיתוך' הוא רעיון מוזר, אבל הוא יכול להיות יעיל מאוד.
לדוגמה, נניח שיש מערך נתונים שמכיל מאפיין בשם roomsPerPerson
שמייצג את מספר החדרים (מספר החדרים הכולל חלקי מספר הדיירים) בבתים שונים. התרשים הבא מראה
99% מערכי התכונות תואמים להתפלגות נורמלית (בערך, ממוצע של
1.8 וסטיית תקן של 0.7). אבל התכונה מכילה
כמה חריגים, וחלקם קיצוניים:
איך אפשר לצמצם את ההשפעה של ערכים חריגים קיצוניים כאלה? תרשים ההיסטוגרמה הוא לא התפלגות שווה, התפלגות נורמלית או התפלגות לפי חוק העוצמה. מה קורה אם פשוט מגבילים או מצמידים את הערך המקסימלי של
roomsPerPerson
בערך שרירותי, למשל 4.0?
חיתוך ערך המאפיין ל-4.0 לא אומר שהמודל מתעלם מכל הערכים שגדולים מ-4.0. כלומר, כל הערכים שהיו גדולים יותר מ-4.0 להפוך עכשיו ל-4.0. כאן מוסברת הגבעה הייחודית בתחנה 4.0. למרות העלייה הזו, קבוצת המאפיינים המותאמת עכשיו שימושית יותר מהנתונים המקוריים.
חכו רגע! האם אפשר באמת לצמצם כל ערך חריג לסף עליון שרירותי כלשהו? כן, כשמאמנים מודל.
אפשר גם לחתוך ערכים לאחר החלת צורות אחרות של נירמול. לדוגמה, נניח שאתם משתמשים בהגדלה של ציון ה-Z, אבל יש חריגים חריגים ערכים מוחלטים שגדולים מ-3. במקרה כזה, תוכלו:
- חיתוך של ציונים Z שגדולים מ-3 כך שהם יהיו בדיוק 3.
- חיתוך של ציונים סטנדרטיים (Z-scores) שקטנים מ--3 כך שהם יהיו בדיוק -3.
חיתוך מונע מהמודל להוסיף לאינדקס יותר מדי נתונים לא חשובים. אבל, לפעמים יש חריגים חשודי טעות, לכן חשוב לחלק את הערכים בזהירות.
סיכום של טכניקות נירמול
טכניקת נירמול | נוסחה | מתי להשתמש? |
---|---|---|
קנה מידה לינארי | $$ x' = \frac{x - x_{min}}{x_{max} - x_{min}} $$ | כאשר התכונה מפוזרת באופן אחיד טווח קבוע. |
שינוי קנה המידה של ציון התקן | $$ x' = \frac{x - μ}{σ}$$ | כשההפצה של המאפיין לא מכילה ערכים חריגים קיצוניים. |
שינוי גורף ביומן | $$ x' = log(x)$$ | כשהתכונה עומדת בדרישות של חוק האנרגיה. |
חיתוך | If $x > max$, set $x' = max$ If $x < min$, set $x' = min$ |
כאשר התכונה מכילה חריגים קיצוניים. |
תרגול: בדיקת הידע
נניח שאתם מפתחים מודל לחיזוי הפרודוקטיביות של מרכז נתונים על סמך הטמפרטורה שנמדדת בתוך מרכז הנתונים.
כמעט כל הערכים של temperature
במערך הנתונים נעים בין 15 ל-30 (צלזיוס), עם החרגות הבאות:
- פעם או פעמיים בשנה, בימים חמים במיוחד, מתועדים ב-
temperature
כמה ערכים בין 31 ל-45. - כל נקודה 1,000 ב-
temperature
מוגדרת כ-1,000 ולא הטמפרטורה בפועל.
זו תהיה שיטת נירמול סבירה
temperature
?
הערכים של 1,000 הם טעויות, ויש למחוק אותם במקום שנחתכה.
הערכים בין 31 ל-45 הם נקודות לגיטימיות על הגרף. מומלץ לבצע חיתוך עבור הערכים האלה, בהנחה מערך הנתונים לא מכיל מספיק דוגמאות בטווח הטמפרטורות הזה כדי לאמן את המודל ליצור תחזיות טובות. עם זאת, במהלך ההסקה, חשוב לזכור שהמודל המקוצר ייתן את אותו חיזוי לטמפרטורה של 45 מעלות לטמפרטורה של 35 מעלות.