נתונים קטגוריים: אוצר מילים וקידוד חד-פעמי

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

שם התכונה מספר הקטגוריות קטגוריות לדוגמה
snowed_today 2 True, False
skill_level 3 מתחילים, מטפלים, מומחים
season 4 חורף, אביב, קיץ, סתיו
day_of_week 7 שני, שלישי, רביעי
כוכב לכת 8 כוכב חמה, נוגה, כדור הארץ

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

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

Figure 1. כל צבע בפלטה מיוצג כמאפיין נפרד. כלומר, כל צבע הוא תכונה נפרדת בווקטור התכונות.
      לדוגמה, 'אדום' הוא תכונה, 'כתום' הוא תכונה נפרדת וכן הלאה.
איור 1. תכונה ייחודית לכל קטגוריה.

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

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

מספרי אינדקס

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

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

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

קידוד one-hot

השלב הבא ביצירת אוצר מילים הוא המרת כל מספר אינדקס לקידוד מסוג "חם-יחיד". בקידוד one-hot:

  • כל קטגוריה מיוצגת על ידי וקטור (מערך) של N אלמנטים, כאשר N הוא מספר הקטגוריות. לדוגמה, אם car_color כולל שמונה קטגוריות אפשריות, הווקטור של הקידוד one-hot שמייצג אותו יכלול שמונה רכיבים.
  • בדיוק אחד מהרכיבים בווקטור one-hot מקבל את הערך 1.0, וכל שאר הרכיבים מקבלים את הערך 0.0.

לדוגמה, בטבלה הבאה מוצג קידוד one-hot לכל צבע ב-car_color:

תכונה אדום Orange כחול צהוב ירוק שחור סגול חום
"Red" 1 0 0 0 0 0 0 0
"Orange" 0 1 0 0 0 0 0 0
"כחול" 0 0 1 0 0 0 0 0
"Yellow" 0 0 0 1 0 0 0 0
"Green" 0 0 0 0 1 0 0 0
"Black" 0 0 0 0 0 1 0 0
"סגול" 0 0 0 0 0 0 1 0
‫'Brown' 0 0 0 0 0 0 0 1

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

האיור הבא מציג את השינויים השונים בייצוג של אוצר המילים:

איור 3. תרשים של התהליך מקצה לקצה למיפוי קטגוריות לווקטורים של מאפיינים. בתרשים, תכונות הקלט הן 'צהוב', 'כתום', 'כחול' ו 'כחול' בפעם השנייה.  המערכת משתמשת באוצר מילים מאוחסן ('אדום' הוא 0, 'כתום' הוא 1, 'כחול' הוא 2, 'צהוב' הוא 3 וכן הלאה) כדי למפות את ערך הקלט למזהה. לכן, המערכת ממפה את הצבעים 'צהוב', 'כתום', 'כחול' ו 'כחול' לערכים 3, 1, 2, 2. לאחר מכן המערכת ממירה את הערכים האלה לווקטור תכונות בקידוד one-hot. לדוגמה, אם במערכת יש שמונה צבעים אפשריים, הערך 3 הופך ל-0, 0, 0, 1, 0, 0, 0, 0.
איור 3. התהליך מקצה לקצה למיפוי קטגוריות לווקטורים של מאפיינים.

ייצוג דליל

תכונה שהערכים שלה הם בעיקר אפס (או ריקים) נקראת תכונה דלילה. הרבה תכונות קטגוריות, כמו car_color, נוטות להיות תכונות דלילות. ייצוג דליל פירושו אחסון המיקום של הערך 1.0 בווקטור דליל. לדוגמה, וקטור הקידוד 'חם-יחיד' (one-hot) של "Blue" הוא:

[0, 0, 1, 0, 0, 0, 0, 0]

מכיוון שהערך 1 נמצא במיקום 2 (כשמתחילים את הספירה ב-0), הייצוג הדליל של וקטור ה-one-hot הקודם הוא:

2

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

חריגים בנתונים קטגוריים

בדומה לנתונים מספריים, גם נתונים קטגוריים מכילים ערכים חריגים. נניח ש-car_color מכיל לא רק את הצבעים הפופולריים, אלא גם כמה צבעים חריגים שמשתמשים בהם לעיתים רחוקות, כמו "Mauve" או "Avocado". במקום להקצות לכל אחד מהצבעים החריגים האלה קטגוריה נפרדת, אפשר לצרף אותם לקטגוריה אחת שנקראת מחוץ לאוצר המילים. במילים אחרות, כל הצבעים של החריגים נכללים בקטגוריית חריגים אחת. המערכת לומדת משקל יחיד לקטגוריית החריגים הזו.

קידוד של מאפיינים קטגוריים רב-ממדיים

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

שם התכונה מספר הקטגוריות קטגוריות לדוגמה
words_in_english ‫~500,000 ‫"happy",‏ "walking"
US_postal_codes ‫~42,000 ‪"02114", "90301"
last_names_in_Germany ‫~850,000 ‪"Schmidt", "Schneider"

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

  • בדרך כלל האימון של המודל מהיר יותר.
  • בדרך כלל, המודל המובנה מסיק תחזיות מהר יותר. כלומר, למודל יש זמן אחזור נמוך יותר.

גיבוב (נקרא גם טריק הגיבוב) היא דרך פחות נפוצה לצמצם את מספר המאפיינים.