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

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

  • התכונה 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 "חשובה" פי עשרה מתכונה A.
  • תהליך האימון יימשך יותר זמן מהצפוי.
  • יכול להיות שהמודל שייווצר לא יהיה אופטימלי.

הנזק הכולל כתוצאה מהיעדר נורמליזציה יהיה קטן יחסית, אבל עדיין מומלץ לבצע נורמליזציה של מאפיין א' ומאפיין ב' לאותה סולם, אולי בטווח של -1.0 עד +1.0.

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

  • הערך הנמוך ביותר של המאפיין C הוא -1 והערך הגבוה ביותר הוא +1.
  • הערך הנמוך ביותר של המאפיין D הוא +5,000 והערך הגבוה ביותר הוא +1,000,000,000.

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

בקטע הזה נסקור שלוש שיטות נפוצות לנירמול:

  • התאמה לינארית לעומס
  • שינוי קנה המידה של ציון התקן
  • שינוי גורף ביומן

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

קנה מידה לינארי

שינוי גודל ליניארי (שנקרא בדרך כלל פשוט שינוי גודל) הוא המרה של ערכים של נקודה צפה מהטווח הטבעי שלהם לטווח רגיל – בדרך כלל מ-0 עד 1 או מ--1 עד +1.

כדי לשנות את הגודל לטווח הרגיל של 0 עד 1, כולל, משתמשים בנוסחה הבאה:

x=(xxmin)/(xmaxxmin)

כאשר:

  • הערך המשוער הוא x.
  • x הוא הערך המקורי.
  • הערך xmin הוא הערך הנמוך ביותר במערך הנתונים של המאפיין הזה.
  • הערך xmax הוא הערך הגבוה ביותר במערך הנתונים של המאפיין הזה.

לדוגמה, נניח שיש מאפיין בשם quantity שהטווח הטבעי שלו הוא מ-100 עד 900. נניח שהערך הטבעי של quantity בדוגמה מסוימת הוא 300. לכן, אפשר לחשב את הערך המנורמלי של 300 באופן הבא:

  • x = 300
  • xmin = 100
  • xmax = 900
x' = (300 - 100) / (900 - 100)
x' = 200 / 800
x' = 0.25

מומלץ להשתמש בהתאמה לינארית כשכל התנאים הבאים מתקיימים:

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

נניח שהאדם age הוא תכונה. שינוי קנה מידה ליניארי הוא שיטה טובה לנירמול של age כי:

  • הערכים המשוערים של הגבול התחתון והגבול העליון הם 0 עד 100.
  • age מכיל אחוז קטן יחסית של ערכים חריגים. רק כ-0.3% מהאוכלוסייה הם בני יותר מ-100.
  • למרות שקבוצות גיל מסוימות מיוצגות טוב יותר מאחרות, מערך נתונים גדול אמור להכיל דוגמאות מספיקות מכל הגילאים.

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

נניח שבמודל יש מאפיין בשם net_worth שמכיל את השווי נטו של אנשים שונים. האם שינוי קנה מידה לינארי הוא שיטה טובה לנירמול של 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 (ימין) להתפלגות נורמלית לא קלאסית.

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

x=(xμ)/σ

כאשר:

  • הערך x הוא ציון התקן.
  • x הוא הערך הגולמי, כלומר x הוא הערך שאותו מנרמלים.
  • הערך μ הוא הממוצע.
  • σ היא סטיית התקן.

לדוגמה, נניח:

  • mean = 100
  • סטיית תקן = 20
  • original value = 130

לכן:

  Z-score = (130 - 100) / 20
  Z-score = 30 / 20
  Z-score = +1.5

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

  • לפחות ל-68.27% מהנתונים יש ציון Z שנמצא בין -1.0 ל-1.0.
  • לפחות ל-95.45% מהנתונים יש ציון Z שנע בין -2.0 ל-2.0.
  • לפחות ל-99.73% מהנתונים יש ציון Z שנע בין -3.0 ל-3.0.
  • לפחות ל-99.994% מהנתונים יש ציון Z שנמצא בין -4.0 ל-4.0.
לכן, נקודות נתונים עם ציון Z נמוך מ-4.0- או גבוה מ-4.0+ הן נדירות, אבל האם הן באמת חריגות? מכיוון שחריגים הם מושג ללא הגדרה קפדנית, אף אחד לא יכול לומר בוודאות. חשוב לזכור שקבוצת נתונים עם מספר גדול מספיק של דוגמאות תכיל כמעט בוודאות לפחות כמה מהדוגמאות ה "נדירות" האלה. לדוגמה, למאפיין עם מיליארד דוגמאות שתואמות לחלוקה נורמלית קלאסית יכולות להיות עד 60,000 דוגמאות עם ציון מחוץ לטווח -4.0 עד +4.0.

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

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

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

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

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


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

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

כדי לנרמל ערך, x, ליומן שלו, משתמשים בנוסחה הבאה:

x=ln(x)

כאשר:

  • הערך של x הוא הלוגריתם הטבעי של x.
  • original value = 54.598

לכן, הלוג של הערך המקורי הוא בערך 4.0:

  4.0 = ln(54.598)

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

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

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

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

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

איור 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. תרשים של roomsPerPerson שבו כמעט כל הערכים מרוכזים בין 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-scores) שגדולים מ-3 כך שהם יהיו בדיוק 3.
  • חיתוך של ציונים סטנדרטיים (Z-scores) שקטנים מ--3 כך שהם יהיו בדיוק -3.

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

סיכום של שיטות נירמול

טכניקת נירמולנוסחהמתי להשתמש?
קנה מידה לינארי
x=xxminxmaxxmin
כשהתכונה מופיעה באופן אחיד בטווח קבוע.
שינוי קנה המידה של ציון התקן
x=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.

קנה מידה לינארי
שינוי קנה המידה של ציון התקן
חיתוך
שינוי גורף ביומן

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

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

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

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