לאחר בחינת הנתונים באמצעות טכניקות סטטיסטיות וויזואליות, עליכם לשנות את הנתונים באופן שיעזור למודל לאמן יותר בצורה יעילה. המטרה של הנירמול הוא לבצע טרנספורמציה להיות בקנה מידה דומה. לדוגמה, נבחן את שתי האפשרויות הבאות תכונות:
- המאפיין
X
כולל טווח של 154 עד 24,917,482. - המאפיין
Y
חורג מהטווח 5 עד 22.
שתי התכונות האלה מתפרשות על פני טווחים שונים מאוד. נירמול עלול להשפיע
X
ו-Y
כך שהן פרוסות בטווח דומה, אולי 0 עד 1.
הנירמול מספק את היתרונות הבאים:
- עוזר למודלים להצטבר מהר יותר במהלך האימון. כאשר לתכונות שונות יש טווחים שונים, ירידה הדרגתית יכולה "עזיבה" והתכנסות איטית. עם זאת, מומחי אופטימיזציה מתקדמים יותר כמו שדרוג ואדם מגן מפני הבעיה הזו באמצעות שינוי של קצב הלמידה האפקטיבי לאורך זמן.
- עוזר למודלים להסיק חיזויים טובים יותר. אם לתכונות שונות יש טווחים שונים, התוצאה תהיה יכול להיות חיזויים קצת פחות שימושיים.
- התכונה הזו עוזרת להימנע מ-NaN (מלכודת) כשערכי התכונות גבוהים מאוד.
NaN הוא קיצור של
לא מספר. כאשר ערך במודל חורג
מגבלת הדיוק בנקודה הצפה, המערכת מגדירה את הערך כ-
NaN
הוא מספר. כשמספר אחד במודל הופך ל-NaN, מספרים אחרים במודל שהמודל הופך בסופו של דבר גם ל-NaN. - עוזר למודל ללמוד את המשקולות המתאימות לכל תכונה. ללא התאמה לעומס (scaling) של המאפיינים, המודל מקדיש יותר מדי תשומת לב לתכונות עם טווחים רחבים ואין מספיק תשומת לב לתכונות טווחים צרים.
מומלץ לנרמל תכונות מספריות המכסות בבירור
טווחים שונים (למשל גיל והכנסה).
אנחנו ממליצים גם לנרמל תכונה מספרית אחת שמכסה טווח רחב,
כמו city population.
מומלץ להביא בחשבון את שתי התכונות הבאות:
- הערך הנמוך ביותר של התכונה
A
הוא -0.5 והערך הגבוה ביותר הוא +0.5. - הערך הנמוך ביותר של התכונה
B
הוא -5.0 והערך הגבוה ביותר הוא +5.0.
הפריסה A
והתכונה B
הן צרות יחסית. עם זאת, התכונות של B
span רחב פי 10 מהטווח של התכונה A
. לכן:
- בתחילת האימון, המודל מניח שהתכונה
A
היא עשר פעמים יותר 'חשוב' מאשר התכונהB
. - האימון יימשך יותר זמן מהרגיל.
- המודל שייווצר עשוי להיות לא אופטימלי.
הנזק הכולל עקב אי נירמול יהיה קטן יחסית; עם זאת, אנחנו עדיין ממליצים לנרמל את תכונה א' ואת תכונה ב' באותו קנה מידה, אולי -1.0 עד +1.0.
עכשיו נבחן שתי תכונות עם הבדל גדול יותר בין הטווחים:
- הערך הנמוך ביותר של תכונה ג' הוא -1 והערך הגבוה ביותר הוא +1.
- הערך הנמוך ביותר של התכונה
D
הוא +5,000 והערך הגבוה ביותר הוא +1,000,000,000.
אם לא יתבצע נירמול של התכונה C
ושל התכונה D
, סביר להניח שהמודל
לא אופטימליות. בנוסף, תהליך האימון יימשך זמן רב יותר
להתכנס או אפילו לא להתמזג לגמרי!
בקטע הזה מתוארות שלוש שיטות נירמול פופולריות:
- מדרגיות לינארית
- שינוי ציון ה-Z
- מדרגיות יומנים
בנוסף, הקטע הזה עוסק cliping. למרות שהתשובה לא נכונה נירמול, חיתוך מאכלת תכונות מספריות לא מציאותיות ויוצרים מודלים טובים יותר.
קנה מידה לינארי
התאמה לינארית (נפוצה יותר מקוצר להתאמה לעומס בלבד) פירושו המרה של ערכי נקודה צפה (floating-point) את הטווח הטבעי שלהם לטווח סטנדרטי - בדרך כלל 0 עד 1, או 1- עד +1.
מדרגות לינארית היא בחירה טובה כאשר כל התנאים הבאים מתקיימים:
- הגבול התחתון והעליון של הנתונים לא משתנה הרבה עם הזמן.
- יש בתכונה כמה ערכים של חריג חשוד טעות או לא, קיצונית.
- התכונה מפוזרת באופן כמעט אחיד בכל הטווח שלה. כלומר, בהיסטוגרמה יוצגו עמודות שווים פחות או יותר לרוב הגילאים.
נניח שage
אנושי הוא תכונה. קנה מידה לינארי הוא נירמול טוב
עבור age
כי:
- הגבול התחתון והעליון המשוער הוא בין 0 ל-100.
age
מכיל אחוז קטן יחסית של חריגים. רק כ-0.3% מהנתונים האוכלוסייה מעל 100.- למרות שגילאים מסוימים מיוצגים בצורה קצת יותר טובה מאחרים, מערך הנתונים צריך לכלול מספיק דוגמאות של כל הגילאים.
בדיקת ההבנה
נניח שלמודל יש תכונה בשםnet_worth
שמחזיקה ברשת
ששווה לאנשים שונים. האם קנה מידה לינארי הוא נירמול טוב
של net_worth
? למה או למה לא?
שינוי ציון ה-Z
Z-score הוא מספר סטיות התקן שמקבל ערך מהממוצע. לדוגמה, ערך שהוא גדול ב-2 סטיות תקן מהממוצע עם ציון Z של +2.0. ערך שהוא 1.5 סטיות תקן פחות מ- לממוצע יש ציון Z של 1.5-.
המשמעות של ייצוג תכונה באמצעות דירוג Z היא ציון Z בווקטור המאפיין. לדוגמה, האיור הבא מראה היסטוגרמות:
- בצד שמאל, התפלגות נורמלית קלאסית.
- בצד ימין, אותה התפלגות מנורמלת על ידי קנה מידה של ציון Z.
![איור 4. שתי היסטוגרמות: שתיהן מראות התפלגויות נורמליות עם
את ההתפלגות הזהה. ההיסטוגרמה הראשונה, שמכילה נתונים גולמיים
עם ממוצע של 200 וסטיית תקן של 30. השנייה
היסטוגרמה, שמכילה את גרסת ה-Z
עם ממוצע 0 וסטיית תקן של 1.](https://developers.google.cn/static/machine-learning/crash-course/images/z-scaling_classic.png?authuser=7&hl=he)
שינוי ציון ה-Z הוא גם אפשרות טובה לנתונים כמו אלה שמוצגים את הנתון הבא, שיש לו התפלגות נורמלית חלקית בלבד.
![איור 5. שתי היסטוגרמות זהות, שכל אחת מהן תלולה
לעלות למישור ואז ירידה מהירה יחסית
דעיכה הדרגתית. היסטוגרמה אחת ממחישה את
של הנתונים הגולמיים, ההיסטוגרמה השנייה ממחישה
של הנתונים הגולמיים, כאשר מנורמלים לפי סולם ה-Z.
הערכים בציר ה-X בשתי ההיסטוגרמות שונים מאוד.
היסטוגרמה של הנתונים הגולמיים מתפרסת על פני דומיין מ-0 עד 29,000, בעוד
ההיסטוגרמה עם דירוג ה-Z נעה בין 1- ל-4.8 בערך](https://developers.google.cn/static/machine-learning/crash-course/images/z-scaling-non-classic-normal-distribution.png?authuser=7&hl=he)
ציון ה-Z הוא בחירה טובה כשהנתונים מוצגים לפי התפלגות נורמלית או התפלגות דומה במידה מסוימת להתפלגות נורמלית.
לתשומת ליבך, חלק מההתפלגויות עשויות להיות נורמליות בחלק גדול
אבל עדיין לכלול חריגים קיצוניים. לדוגמה, כמעט כל
נקודות בתכונה net_worth
עשויות להתאים בדיוק ל-3 סטיות תקן,
אבל כמה דוגמאות לתכונה הזו יכולות להיות מאות סטיות תקן
רחוק מהממוצע. במצבים כאלה, ניתן לשלב הגדלה של מדד ה-Z עם
צורה אחרת של נירמול (בדרך כלל חיתוך) כדי להתמודד עם המצב הזה.
תרגיל: בדקו את ההבנה שלכם
נניח שהמודל עבר אימון על תכונה בשםheight
שמחזיקה את המבוגר
של עשרה מיליון נשים. האם קנה מידה של ציון Z יכול להיות נירמול טוב
של height
? למה או למה לא?
שינוי קנה מידה של יומנים
שינוי קנה מידה של יומנים מחשב את הלוגריתם של הערך הגולמי. בתיאוריה, לוגריתם יכול להיות כל בסיס, בפועל, התאמה לעומס (scaling) של יומנים את הלוגריתם הטבעי (ln).
התאמה לעומס (scaling) של יומנים יכולה להיות שימושית כשהנתונים תואמים להתפלגות של חוקי כוח. באופן אקראי, התפלגות של חוקי כוח נראית כך:
- לערכים נמוכים של
X
יש ערכים גבוהים מאוד שלY
. - ככל שהערכים של
X
עולים, הערכים שלY
יורדים במהירות. כתוצאה מכך, לערכים גבוהים שלX
יש ערכים נמוכים מאוד שלY
.
דירוגי סרטים הם דוגמה טובה להתפלגות של חוק כוח. בתוך איור, שימו לב:
- לסרטים מסוימים יש הרבה דירוגי משתמשים. (ערכים נמוכים של
X
הם גבוהים שלY
.) - לרוב הסרטים יש מעט מאוד דירוגי משתמשים. (הערכים הגבוהים של
X
הם נמוכים שלY
.)
התאמה לעומס (scaling) משנה את ההתפלגות, וכך עוזרת לאמן מודל להפיק חיזויים טובים יותר.
כדוגמה שנייה, מכירות ספרים תואמות התפלגות של חוקי כוח מהסיבות הבאות:
- ברוב הספרים המפורסמים נמכרים מספר מזערי של עותקים, אולי מאה או יותר.
- ספרים מסוימים נמכרים במספר בינוני של עותקים, באלפים.
- רק מספר קטן של הנמכרים ביותר ימכרו יותר ממיליון עותקים.
נניח שאתם מאמנים מודל ליניארי כדי למצוא את הקשרים מתוך, למשל, כריכות של ספרים למכירה. אימון של מודל ליניארי על ערכים גולמיים למצוא משהו על עטיפות של ספרים שנמכרים במיליון עותקים שהיא חזקה יותר ב-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. תרשים של RoomPerאדם שבו כמעט כל הערכים
מגובבות בין 0 ל-4, אבל יש 'זנב ארוך'
להגיע ל-17 חדרים לאדם](https://developers.google.cn/static/machine-learning/crash-course/images/PreClipping.png?authuser=7&hl=he)
איך אפשר למזער את ההשפעה של נקודות חריגות כאלה? ובכן,
ההיסטוגרמה היא לא התפלגות שווה, התפלגות נורמלית או חוק כוח
של הסבירות. מה קורה אם פשוט מגבילים או מצמידים את הערך המקסימלי של
roomsPerPerson
בערך שרירותי, למשל 4.0?
![חלקייה של RoomPerאדם שבה כל הערכים נמצאים בין 0 ל-
4.0. העלילה בנויה בצורת פעמון, אבל בשעה 4.0 יש גבעה חריגה](https://developers.google.cn/static/machine-learning/crash-course/images/Clipping.png?authuser=7&hl=he)
חיתוך ערך התכונה ב-4.0 לא אומר שהמודל מתעלם מכל האלמנטים שגדולים מ-4.0. כלומר, כל הערכים שהיו גדולים יותר מ-4.0 להפוך עכשיו ל-4.0. כאן מוסברת הגבעה הייחודית בתחנה 4.0. למרות שבשלב הזה נמצאת בירידה, קבוצת התכונות המותאמת לקנה מידה שימושי יותר עכשיו מהנתונים המקוריים.
חכו רגע! האם אפשר באמת להפחית כל ערך חריג חשוד טעות שרירותית סף תחתון? כשמאמנים מודל, כן.
אפשר גם לחתוך ערכים לאחר החלת צורות אחרות של נירמול. לדוגמה, נניח שאתם משתמשים בהגדלה של ציון ה-Z, אבל יש חריגים חריגים ערכים מוחלטים שגדולים מ-3. במקרה כזה, אתם יכולים:
- אם מזינים ניקוד Z שגדול מ-3, מקבלים 3 בדיוק.
- מהדק ה-Z מקבל פחות מ-3- כדי לקבל דירוג מדויק של 3-.
חיתוך מונע מהמודל להוסיף לאינדקס יותר מדי נתונים לא חשובים. אבל, לפעמים יש חריגים חשודי טעות, לכן חשוב לחלק את הערכים בזהירות.
סיכום של טכניקות נירמול
שיטת נירמול | נוסחה | מתי להשתמש? |
---|---|---|
קנה מידה לינארי | $$ x' = \frac{x - x_{min}}{x_{max} - x_{min}} $$ | כאשר התכונה מפוזרת באופן אחיד טווח קבוע. |
שינוי ציון ה-Z | $$ x' = \frac{x - μ}{σ}$$ | כאשר התפלגות התכונות לא מכילה חריגים קיצוניים. |
שינוי קנה מידה של יומנים | $$ x' = log(x)$$ | כשהתכונה עומדת בדרישות של חוק האנרגיה. |
חיתוך | אם $x > max$, set $x' = ש"ח מקסימלי אם $x < min$, הגדרת $x' = min$ |
כאשר התכונה מכילה חריגים קיצוניים. |
תרגיל: בחינת הידע
נניח שאתם מפתחים מודל שחיזוי
על סמך הטמפרטורה שנמדדת במרכז הנתונים.
כמעט כל הערכים של temperature
במערך הנתונים נופלים
בין 15 ל-30 (צלזיוס), למעט במקרים הבאים:
- פעם או פעמיים בשנה, בימים חמים מאוד,
31 ו-45 מתועדים ב-
temperature
. - כל נקודה 1,000 ב-
temperature
מוגדרת כ-1,000 ולא הטמפרטורה בפועל.
זו תהיה שיטת נירמול סבירה
temperature
?
הערכים של 1,000 הם טעויות, ויש למחוק אותם במקום נחתך.
הערכים בין 31 ל-45 הם נקודות לגיטימיות על הגרף. מומלץ להשתמש בקטע 'חיתוך' בערכים האלה, בהנחה מערך הנתונים לא מכיל מספיק דוגמאות בטווח הטמפרטורות הזה כדי לאמן את המודל ליצור תחזיות טובות. אבל בשלב ההסקה, שימו לב שהמודל שנחתך יקבל את אותה חיזוי טמפרטורה של 45 שניות.