גידול צומח של החלטות

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

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

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

לדוגמה, במשפט Palmer פינגווינים את מערך הנתונים (ישמש לדוגמאות קוד בהמשך הקורס), מרבית אדלי ו-Chinstrap לפינגווינים אורך שטר של יותר מ-16 מ"מ, ורוב הפינגווינים לפינגווינים יש שטרות קטנים יותר. לכן התנאי bill_length_mm ≥ 16 מספק תחזיות כמעט מושלמים עבור פינגווינים לבני ערש, אבל לא יכולים להבחין בין אדלייס לצ'ינסטרפס. האלגוריתם ככל הנראה יבחר את התנאי הזה.

תנאי אחד שמוביל לשני עלים. התנאי הוא 'bill_length_mm >= 16'.
אם כן, העלה הוא 'Adelie או Chinstrap'.  אם לא, העלה
הוא 'Gentoo'.

איור 7. השלב הראשון בגידול עץ.

 

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

זהו האלגוריתם:

def train_decision_tree(training_examples):
  root = create_root() # Create a decision tree with a single empty root.
  grow_tree(root, training_examples) # Grow the root node.
  return root

def grow_tree(node, examples):
  condition = find_best_condition(examples) # Find the best condition.

  if condition is None:
    # No satisfying conditions were found, therefore the grow of the branch stops.
    set_leaf_prediction(node, examples)
    return

  # Create two childrens for the node.
  positive_child, negative_child = split_node(node, condition)

  # List the training examples used by each children.
  negative_examples = [example for example in examples if not condition(example)]
  positive_examples = [example for example in examples if condition(example)]

  # Continue the growth of the children.
  grow_tree(negative_child, negative_examples)
  grow_tree(positive_child, positive_examples)

בואו נעבור על שלבי האימון של עץ החלטות ספציפי על שלושת הפיצ'רים האלה.

שלב 1: יצירת בסיס:

צומת עם סימן שאלה.

שלב 2: הגדלת צומת מס' 1. התנאי 'x1 ≥ 1' נמצא. נוצרים שני צומתי צאצא:

צומת הרמה הבסיסית (root)
   שמובילה לשני צמתים לא מוגדרים.

שלב 3: הגדלת צומת מס' 2. לא נמצאו תנאים עונים על התנאים. אז יוצרים את הצומת לעלה:

שורש
   שמוביל לשני צמתים לא מוגדרים.

שלב 4: הגדלת צומת מס' 3. התנאי 'x2 ≥ 0.5' נמצא. שני ילדים והצמתים נוצרים.

צומת הרמה הבסיסית (root),
ושלושה עלים.

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

קוד YDF
ב-YDF, עצי ההחלטה מגדלים עם "החלוקה לעקרונות החמדן והכבוש" האלגוריתם שמתואר למעלה כברירת מחדל. לחלופין, אפשר להפעיל את צמיחה עם הפרמטר growing_strategy="BEST_FIRST_GLOBAL". ראו מסמכי התיעוד.

בהתאם למספר ולסוג של תכונות הקלט, תנאים אפשריים עבור צומת נתון יכולים להיות עצומים, בדרך כלל אינסופיים. לדוגמה, בהינתן תנאי הסף $\mathrm{feature}_i \geq t$, השילוב של כל אפשרי ערכי סף עבור $t \in \mathbb{R}$ הוא אינסופי.

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

הציון המקסימלי שהמפצל מגדיל תלוי במשימה. לדוגמה:

  • איסוף מידע וגם Gini (שניהם שמתוארים בהמשך) בדרך כלל משמשים לסיווג.
  • שגיאה ממוצעת בריבוע משמשת בדרך כלל לרגרסיה.

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

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

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

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