Binning (נקרא גם יצירת קטגוריות) הוא
הנדסת תכונות
שמקבצת תתי-טווח מספריים שונים לתאונים
קטגוריות.
במקרים רבים, bining הופך נתונים מספריים לנתונים קטגוריים.
לדוגמה, נבחן תכונה
בשם X
שהערך הנמוך ביותר שלו הוא 15 ו
הערך הגבוה ביותר הוא 425. באמצעות binning, אפשר לייצג את X
עם
חמשת התאים הבאים:
- סל 1: 15 עד 34
- סל 2: 35 עד 117
- סל 3: 118 עד 279
- סל 4: 280 עד 392
- סל 5: 393 עד 425
סל 1 מתפרס על הטווח של 15 עד 34, כך שכל ערך של X
בין 15 ל-34
מגיע לסל 1. מודל שאומן לפי מאגרי האשפה האלה לא יגיב בצורה שונה
ל-X
ערכים של 17 ו-29 כי שני הערכים נמצאים ב-Bin 1.
וקטור התכונות מייצג את חמשת התאים הבאים:
מספר סל | טווח | וקטור התכונה |
---|---|---|
1 | 15-34 | [1.0, 0.0, 0.0, 0.0, 0.0] |
2 | 35-117 | [0.0, 1.0, 0.0, 0.0, 0.0] |
3 | 118-279 | [0.0, 0.0, 1.0, 0.0, 0.0] |
4 | 280-392 | [0.0, 0.0, 0.0, 1.0, 0.0] |
5 | 393-425 | [0.0, 0.0, 0.0, 0.0, 1.0] |
למרות ש-X
היא עמודה יחידה במערך הנתונים, קישור גורמת למודל
כדי להתייחס ל-X
כאל חמש תכונות נפרדות. לכן המודל לומד
משקולות נפרדות לכל פח.
Binning הוא חלופה טובה להתאמה לעומס (scaling) או חיתוך כאשר אחד התנאים הבאים מתקיימים:
- הקשר הלינארי הכולל בין התכונה לבין התווית חלשה או לא קיימת.
- כשהערכים של התכונות מקובצים באשכולות.
Binning עלול להרגיש שהוא לא הגיוני, בהינתן שהמודל בדוגמה הקודמת מתייחסים לערכים 37 ו-115 באופן זהה. אבל כאשר תכונה נראית גושית יותר מאשר לינארית, היא דרך הרבה יותר טובה שמייצגים את הנתונים.
דוגמה לצמצום: מספר הקונים לעומת מספר הקונים לעומת הטמפרטורה
נניח שאתם יוצרים מודל שחוזה את מספר קונים לפי הטמפרטורה בחוץ באותו יום. הנה עלילה הטמפרטורה לעומת מספר הקונים:
![איור 9. גרף פיזור של 45 נקודות. 45 הנקודות באופן טבעי
לאשכולות לשלוש קבוצות.](https://developers.google.cn/static/machine-learning/crash-course/images/binning_temperature_vs_shoppers.png?authuser=9&hl=he)
העלילה מראה, באופן לא מפתיע, שמספר הקונים היה הגבוה ביותר כאשר הטמפרטורה הייתה הכי נוחה.
אפשר לייצג את התכונה כערכים גולמיים: טמפרטורה של 35.0 מערך הנתונים יהיה 35.0 בווקטור המאפיין. האם זה הרעיון הכי טוב?
במהלך האימון, מודל רגרסיה ליניארית לומד משקל אחד לכל אחד מהם . לכן, אם הטמפרטורה מיוצגת כמאפיין יחיד, של 35.0, תהיה השפעה פי חמישה (או חמישית השפעה) בחיזוי כטמפרטורה של 7.0. עם זאת, בעלילה להראות קשר ליניארי כלשהו בין התווית .
התרשים מציע שלושה אשכולות בתת-טווחי המשנה הבאים:
- סל 1 הוא טווח הטמפרטורות 4-11.
- סל 2 הוא טווח הטמפרטורות 12-26.
- סל 3 הוא טווח הטמפרטורות 27-36.
![איור 10. אותו תרשים פיזור של 45 נקודות כמו הקודם
אבל עם קווים אנכיים כדי להבליט יותר את התאים.](https://developers.google.cn/static/machine-learning/crash-course/images/binning_temperature_vs_shoppers_divided_into_3_bins.png?authuser=9&hl=he)
המודל לומד משקלים נפרדים לכל פח.
למרות שניתן ליצור יותר משלושה תאי תאים, גם סל נפרד כל ערך של טמפרטורה, לרוב זה רעיון לא טוב מהסיבות הבאות:
- המודל יכול ללמוד על הקשר בין סל לבין תווית רק אם יש מספיק דוגמאות בפח הזה. בדוגמה שלמעלה, כל אחד מ-3 תאי הפח מכיל לפחות 10 דוגמאות, ועשויות להספיק לאימון. עם 33 סלים נפרדים, אף אחד מהמאגרים לא יכיל מספיק דוגמאות כדי שהמודל יוכל להתאמן עליו.
- תא נפרד לכל טמפרטורה יוביל 33 תכונות נפרדות של הטמפרטורה. עם זאת, בדרך כלל כדאי למזער מספר התכונות במודל.
תרגיל: בדקו את ההבנה שלכם
בתרשים הבא מוצג מחיר הבית החציוני לכל 0.2 מעלות של קו הרוחב של המדינה המיתית פרידוניה:
![איור 11. תרשים של ערכי הבית בכל קו רוחב. הבית הכי נמוך
הוא בערך 327 והגבוה ביותר הוא 712. קווי הרוחב כוללים את 41.0
עד 44.8, עם נקודה שמייצגת את ערך הבית החציוני
0.2 מעלות של קו רוחב. הדפוס הוא מאוד לא סדיר, אבל עם
שני אשכולות נפרדים (אשכול אחד בין קו הרוחב 41.0 ו-41.8,
ואשכול נוסף בין קו הרוחב 42.6 ל-43.4).](https://developers.google.cn/static/machine-learning/crash-course/images/MedianHouseValueByLatitude.png?authuser=9&hl=he)
הגרפיקה מציגה דפוס לא ליניארי בין ערך הבית וקו הרוחב, לכן סביר להניח שייצוג של קו רוחב כערך הנקודה הצפה שלו לא יעזור של מודל מסוים הוא יכול להפיק חיזויים טובים. אולי עדיף לקבץ קווי רוחב רעיון?
- 41.0 עד 41.8
- 42.0 עד 42.6
- 42.8 עד 43.4
- 43.6 עד 44.8
סיווג לפי כמות
חלוקה לקטגוריות יוצרת גבולות לסיווג, כך שהמספר בכל קטגוריה היא שווה בדיוק או כמעט שווה. סיווג של כמותמים מסתיר בעיקר את נקודות החריגה.
כדי להמחיש את הבעיה שפותרת חלוקה לקטגוריות, נבחן את של הקטגוריות המרווחים באופן שווה, מוצגות באיור הבא, כאשר כל מתוך עשר הקטגוריות, מייצג טווח של 10,000 דולרים בדיוק. שימו לב שהקטגוריה מ-0 עד 10,000 מכילה עשרות דוגמאות אבל הקטגוריה מ-50,000 עד 60,000 מכילה רק 5 דוגמאות. לכן יש למודל מספיק דוגמאות כדי לאמן את הטווח שבין 0 ל-10,000 אבל אין מספיק דוגמאות לאימון עבור קטגוריה של 50,000 עד 60,000.
![איור 13. גרף של מחיר הרכב לעומת מספר המכוניות שנמכרו
במחיר הזה. מספר המכוניות שנמכרו מגיע לשיא במחיר של 6,000.
מעל מחיר של 6,000, מספר המכוניות שנמכרו באופן כללי
יורד, כשמעט מאוד מכוניות נמכרו בין מחיר של 40,000 עד
60,000. התרשים מחולק ל-6 קטגוריות בגודל זהה, כל אחת עם
בטווח של 10,000. לכן, הקטגוריה הראשונה מכילה את כל המכוניות שנמכרו
בין מחיר של 0 למחיר של 10,000, כאשר
הקטגוריה מכילה את כל המכוניות שנמכרו במחיר של בין 10,001 ל-
20,000 וכן הלאה. הקטגוריה הראשונה מכילה דוגמאות רבות; שכל
הקטגוריה הבאה מכילה פחות דוגמאות.](https://developers.google.cn/static/machine-learning/crash-course/images/NeedsQuantileBucketing.png?authuser=9&hl=he)
לעומת זאת, האיור הבא משתמש בסיווג כמותיים כדי לחלק את מחירי המכוניות לתאים עם אותו מספר של דוגמאות בכל קטגוריה. שימו לב שחלק מפחי האשפה כוללים טווח מחירים צר, ואילו אחרים מקיפים טווח מחירים רחב מאוד.
![איור 14. זהה למספר הקודם, חוץ מקטגוריות של כמות.
כלומר, לקטגוריות יש עכשיו גדלים שונים. הקטגוריה הראשונה
מכיל את המכוניות שנמכרו מ-0 עד 4,000, הקטגוריה השנייה מכילה
מספר המכוניות שנמכרו בין 4,001 ל-6,000. הקטגוריה השישית מכילה את
מכוניות שנמכרו בין 25,001 ל-60,000. מספר המכוניות בכל קטגוריה
הוא בערך אותו דבר.](https://developers.google.cn/static/machine-learning/crash-course/images/QuantileBucketing.png?authuser=9&hl=he)