חם-יחיד

מתוך ויקיפדיה, האנציקלופדיה החופשית

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

קידוד חם-יחיד[עריכת קוד מקור | עריכה]

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

  1. מין המבוטח
  2. האם הוא מעשן
  3. מיקום מגורים
  4. גיל
  5. מדד BMI

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

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

קלט
מין גיל מעשן? מקום מגורים
זכר 52 כן כפר
זכר 29 לא עיר
נקבה 37 לא עיר
קידוד חם-יחיד של המשתנה "מקום מגורים"
מושב כפר עיר
0 1 0
0 0 1
0 0 1

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

בלמידת מכונה, בה מתייחסים לכל עמודה בתור תכונה (Attribute), נהוג לכנות את התכונות (העמודות) החדשות שנוצרו עקב קידוד חם-יחיד בתור "תכונות דמה" (dummy attributes)[1].

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

זכר נקבה גיל מעשן לא מעשן מושב כפר עיר BMI עלות ביטוח
1 0 52 1 0 0 1 0 36 1300
1 0 29 0 1 0 0 1 28 800
0 1 37 0 1 0 0 1 32 900

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

מימוש בספריות שונות[עריכת קוד מקור | עריכה]
  • בספריית pandas של שפת פייתון - עבור אובייקט מסוג DataFrame הפקודה get_dummies() מממשת את קידוד חם-יחיד[2].
  • בספריית tensorflow של שפת פייתון - עבור אובייקט מסוג tensor הפקודה tf.one_hot() מחזירה טנזור חם-יחיד[3].
  • בספריית caret של שפת R - הפקודה שתממש קידוד זה היא הפונקצייה dummyVars()[4].

הערות שוליים[עריכת קוד מקור | עריכה]

  1. ^ Aurélien Géron, Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow: Concepts, Tools, and Techniques to Build Intelligent Systems, O'Reilly, 15/10/2019, עמ' 70
  2. ^ אתר תיעוד של ספריית pandas
  3. ^ עמוד התיעוד של ספריית tensorflow
  4. ^ אתר התיעוד של שפת R