חם-יחיד

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

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

 מין המבוטח
 האם הוא מעשן
 מיקום מגורים
 גיל
 מדד BMI

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

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

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

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

 מימוש בספריות שונות 

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

הערות שוליים

קטגוריה:1 (מספר)
קטגוריה:למידת מכונה