נתונים מספריים: נירמול

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

  • התכונה X משתרעת על הטווח 154 עד 24,917,482.
  • המאפיין Y חורג מהטווח 5 עד 22.

שתי התכונות האלה מתפרשות על פני טווחים שונים מאוד. נירמול עלול לשנות את X ואת Y כך שהם יפרסו על טווח דומה, למשל 0 עד 1.

הנירמול מספק את היתרונות הבאים:

  • עוזרת למודלים להגיע להסכמה מהר יותר במהלך האימון. כשלתכונות שונות יש טווחים שונים, ירידה הדרגתית יכולה "להקפיץ" ולהתכנס באיטיות. עם זאת, אופטימיזציות מתקדמות יותר כמו Adagrad ו-Adam מגינות מפני הבעיה הזו על ידי שינוי קצב הלמידה בפועל לאורך זמן.
  • עוזר למודלים להסיק חיזויים טובים יותר. כשלמאפיינים שונים יש טווחים שונים, התחזיות של המודל שייווצר עשויות להיות פחות מועילות.
  • עוזרת להימנע מ'מלכודת ה-NaN' כשערכי המאפיינים גבוהים מאוד. NaN הוא קיצור של not a number. אם ערך במודל חורג ממגבלת הדיוק של נקודת הצפה, המערכת מגדירה את הערך כ-NaN במקום כמספר. כשמספר אחד במודל הופך ל-NaN, מספרים אחרים במודל הופכים ל-NaN בסופו של דבר.
  • עוזרת למודל ללמוד משקלים מתאימים לכל מאפיין. בלי התאמה של מאפיינים, המודל נותן יותר מדי תשומת לב למאפיינים עם טווחים רחבים, ולא מספיק תשומת לב למאפיינים עם טווחים צרים.

מומלץ לבצע נורמליזציה של מאפיינים מספריים שמכסים טווחים שונים מאוד (לדוגמה, גיל והכנסה). מומלץ גם לבצע נורמליזציה למאפיין מספרי יחיד שכולל טווח רחב, כמו city population.

כדאי להביא בחשבון את שתי התכונות הבאות:

  • הערך הנמוך ביותר של המאפיין A הוא -0.5 והערך הגבוה ביותר הוא +0.5.
  • הערך הנמוך ביותר של המאפיין B הוא -5.0 והערך הגבוה ביותר הוא +5.0.

למאפיין A ולמאפיין B יש טווחים יחסית צרים. עם זאת, הטווח של התכונה B רחב פי 10 מהטווח של התכונה A. לכן:

  • בתחילת האימון, המודל מניח שהתכונה B 'חשובה' פי 10 יותר מהתכונה A.
  • תהליך ההדרכה יימשך יותר זמן מהצפוי.
  • המודל שייווצר עשוי להיות לא אופטימלי.

הנזק הכולל כתוצאה מהיעדר נורמליזציה יהיה קטן יחסית, אבל עדיין מומלץ לבצע נורמליזציה של מאפיין א' ומאפיין ב' לאותה סולם, אולי בטווח של -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 הוא מספר סטיות התקן של ערך מהממוצע. לדוגמה, ערך ש-2 סטיות סטנדרטיות גבוהות מהממוצע, מקבל ציון Z של +2.0. לערך 1.5 סטיות תקן פחות מהממוצע, ציון ה-Z הוא 1.5-.

המשמעות של ייצוג פיצ'ר באמצעות דירוג Z היא שציון ה-Z של המאפיין יישמר בווקטור המאפיין. לדוגמה, באיור הבא מוצגים שני היסטוגרמות:

  • בצד ימין, מוצגת התפלגות נורמלית קלאסית.
  • בצד שמאל, אותה התפלגות לאחר נורמליזציה באמצעות שינוי קנה המידה של ציון Z.
איור 4.  שתי היסטוגרמות: שתיהן מציגות התפלגויות נורמליות עם
           ההתפלגות הזהה. לתרשים ההיסטוגרמה הראשון, שמכיל נתונים גולמיים, יש ממוצע של 200 וסטיית תקן של 30. לתרשים ההיסטוגרמה השני, שמכיל גרסה של ציון Z של ההתפלגות הראשונה, יש חציון של 0 וסטיית תקן של 1.
איור 4. נתונים גולמיים (שמאל) לעומת ציון Z (ימין) בהתפלגות נורמלית.

שינוי הסולם לפי ציון Z הוא גם בחירה טובה לנתונים כמו אלה שמוצגים באיור הבא, שיש להם רק חלוקה רגילה באופן כללי.

איור 5.  שתי היסטוגרמות זהות, שבכל אחת מהן מוצגת עלייה תלולה למישור ולאחר מכן ירידה מהירה יחסית ואחריה
 דעיכה הדרגתית. היסטוגרמה אחת ממחישה את
            ההתפלגות של הנתונים הגולמיים, וההיסטוגרמה השנייה ממחישה את
            ההתפלגות של הנתונים הגולמיים, לאחר נירמול לפי דירוג Z.
            הערכים בציר X של שתי ההיסטוגרמות שונים מאוד.
            היסטוגרמה של הנתונים הגולמיים משתרעת על הדומיין 0 עד 29,000, ואילו היסטוגרמה של ציון Z בקנה מידה משתנה מ--1 עד כ-4.8
איור 5. נתונים גולמיים (שמאל) לעומת התאמה לפי ציון Z (ימין) להתפלגות נורמלית לא קלאסית.

ציון Z הוא בחירה טובה כשהנתונים עוקבים אחרי התפלגות נורמלית או אחרי התפלגות שדומה להפלגה נורמלית.

חשוב לזכור שחלק מההפצות עשויות להיות רגילות בחלק הארי של הטווח שלהן, אבל עדיין להכיל ערכים חריגים קיצוניים. לדוגמה, יכול להיות שרוב הנקודות בתכונה net_worth ייכללו ב-3 סטיות התקן, אבל כמה דוגמאות לתכונה הזו יכולות להיות במרחק מאות סטיות התקן מהממוצע. במצבים כאלה אפשר לשלב את סולם ה-Z עם נירמול אחר (בדרך כלל "חיתוך)" כדי להתמודד עם המצב הזה.

תרגול: בדיקת ההבנה

נניח שהמודל שלכם מתאמן על מאפיין בשם height שמכיל את הגובה של עשרה מיליון נשים בוגרות. האם שינוי קנה המידה של ציון התקן יהיה שיטה טובה לנרמל את height? למה או למה לא?

שינוי גורף ביומן

כשמשתמשים בהתאמה לערך לוגריתמי, המערכת מחשבת את הלוגריתם של הערך הגולמי. בתיאוריה, הלוגריתם יכול להיות בכל בסיס. בפועל, בדרך כלל מחשבים את הלוגריתם הטבעי (ln) כשמשתמשים בהתאמה לעקומת לוגריתם.

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

  • לערכים נמוכים של X יש ערכים גבוהים מאוד של Y.
  • ככל שהערכים של X גדלים, הערכים של Y יורדים במהירות. כתוצאה מכך, לערכים גבוהים של X יש ערכים נמוכים מאוד של Y.

דירוגי סרטים הם דוגמה טובה להתפלגות של חוק כוח. שימו לב לדברים הבאים באיור הבא:

  • לחלק מהסרטים יש הרבה דירוגים של משתמשים. (לערכים נמוכים של X יש ערכים גבוהים של Y).
  • לרוב הסרטים יש מעט מאוד דירוגים של משתמשים. (לערכים גבוהים של X יש ערכים נמוכים של Y).

התאמה לעומס (scaling) משנה את ההתפלגות, וכך עוזרת לאמן מודל שיספק תחזיות טובות יותר.

איור 6. שני תרשימים שמשווים בין נתונים גולמיים לבין יומן של נתונים גולמיים.
            בתרשים של הנתונים הגולמיים מוצגות הרבה דירוגי משתמשים בחלק העליון, ואחריהם 'זנב ארוך'. בגרף היומן יש התפלגות אחידה יותר.
איור 6. השוואה בין התפלגות גולמית לבין היומן שלה.

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

  • רוב הספרים שפורסמו נמכרים במספר קטן מאוד של עותקים, אולי מאה או מאתיים.
  • חלק מהספרים נמכרים בכמה אלפי עותקים.
  • רק מספר קטן של הנמכרים ביותר ימכרו יותר ממיליון עותקים.

נניח שאתם מאמנים מודל לינארי כדי למצוא את הקשר בין, למשל, בין כריכות של ספרים למכירות של ספרים. אימון של מודל לינארי על ערכים גולמיים יצטרך למצוא משהו שקשור לכריכות של ספרים שנמכרו מהם מיליון עותקים, שחזק פי 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). עם זאת, התכונה מכילה כמה ערכים חריגים, חלקם קיצוניים:

איור 7. חלקת מהחדרים ליחידים, שבה כמעט כל הערכים מקובצים בין 0 ל-4, אבל יש 'זנב ארוך'
            
            עד 17 חדרים לאדם
איור 7. בעיקר נורמלי, אבל לא לגמרי נורמלי.

איך אפשר לצמצם את ההשפעה של ערכים חריגים קיצוניים כאלה? ובכן, ההיסטוגרמה היא לא התפלגות שווה, התפלגות נורמלית או התפלגות של חוק כוח. מה קורה אם פשוט מגדירים תקרה או חותכים את הערך המקסימלי של roomsPerPerson לערך שרירותי, למשל 4.0?

תרשים של roomsPerPerson שבו כל הערכים נעים בין 0 ל-4.0. התרשים בצורת פעמון, אבל יש בו חריגה בצורת גבעה ב-4.0
איור 8. חיתוך ערכי התכונה ל-4.0.

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

רגע! האם אפשר באמת לצמצם כל ערך חריג לסף עליון שרירותי כלשהו? כן, כשמאמנים מודל.

אפשר גם לחתוך ערכים לאחר החלת צורות אחרות של נירמול. לדוגמה, נניח שאתם משתמשים במדידה לפי Z-score, אבל לחלק מהערכים החריגים יש ערכים מוחלטים הרבה יותר גדולים מ-3. במקרה כזה, תוכלו:

  • חיתוך של ציונים Z שגדולים מ-3 כך שהם יהיו בדיוק 3.
  • מהדק ה-Z מקבל פחות מ-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$
כאשר התכונה מכילה חריגים קיצוניים.

תרגול: בדיקת הידע

איזו טכניקה הכי מתאימה לנירמול מאפיין עם ההתפלגות הבאה?

היסטוגרמה שמציגה אשכול של נתונים עם ערכים בטווח 0 עד 200,000. מספר נקודות הנתונים עולה בהדרגה בטווח מ-0 עד 100,000, ואז יורד בהדרגה מ-100,000 עד 200,000.

שינוי קנה המידה של ציון התקן
נקודות הנתונים בדרך כלל תואמות להתפלגות נורמלית, כך ששינוי הגודל לפי ציון Z יכפה עליהן להיכנס לטווח של -3 עד +3.
קנה מידה לינארי
כדאי לקרוא את הדיונים על שיטות הנורמליזציה שבדף הזה ולנסות שוב.
שינוי גורף ביומן
כדאי לקרוא את הדיונים על שיטות הנורמליזציה שבדף הזה ולנסות שוב.
חיתוך
כדאי לקרוא את הדיונים על שיטות הנורמליזציה שבדף הזה ולנסות שוב.

נניח שאתם מפתחים מודל לחיזוי הפרודוקטיביות של מרכז נתונים על סמך הטמפרטורה שנמדדת בתוך מרכז הנתונים. כמעט כל הערכים של temperature במערך הנתונים נעים בין 15 ל-30 (צלזיוס), עם החרגות הבאות:

  • פעם או פעמיים בשנה, בימים חמים במיוחד, מתועדים ב-temperature כמה ערכים בין 31 ל-45.
  • כל נקודה אלפית ב-temperature מוגדרת לערך 1,000 במקום לטמפרטורה בפועל.

מהי שיטת נורמליזציה סבירה ל-temperature?

חיתוך ערכי חריגים בין 31 ל-45, אבל מחיקה של ערכים חריגים עם ערך של 1,000

הערכים של 1,000 הם שגיאות, וצריך למחוק אותם במקום לקצץ אותם.

הערכים בין 31 ל-45 הם נקודות נתונים חוקיות. כנראה כדאי לבצע חיתוך לערכים האלה, בהנחה שמערך הנתונים לא מכיל מספיק דוגמאות בטווח הטמפרטורות הזה כדי לאמן את המודל ולאפשר לו לבצע תחזיות טובות. עם זאת, במהלך ההסקה, חשוב לזכור שהמודל המקוצר ייתן את אותו חיזוי לטמפרטורה של 45 מעלות לטמפרטורה של 35 מעלות.

חיתוך כל הערכים החריגים
כדאי לקרוא את הדיונים על שיטות הנורמליזציה שבדף הזה ולנסות שוב.
מחיקה של כל הערכים החריגים
כדאי לקרוא את הדיונים על שיטות הנורמליזציה שבדף הזה ולנסות שוב.
צריך למחוק את הערכים החריגים בין 31 ל-45, אבל לחתוך את הערכים החריגים עם ערך של 1,000.
כדאי לקרוא את הדיונים על שיטות הנורמליזציה שבדף הזה ולנסות שוב.