עצים לקבלת החלטות

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

  • "weak" מודל למידה חישובית, שהוא בדרך כלל עץ להחלטות.
  • מודל "strong" של למידה חישובית, שמורכב מכמה מודלים נמוכים.

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

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

\[ F_{i+1} = F_i - f_i \]

כאשר:

  • $F_i$ הוא הדגם החזק בשלב $i$.
  • $f_i$ הוא הדגם הגרוע בשלב $i$.

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

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

  • המטרה היא לחזות $y$ מ-$x$.
  • המודל חזק מופעל כאפס קבוע: $F_0(x) = 0$.
# Simplified example of regressive gradient boosting.

y = ... # the labels
x = ... # the features

strong_model = []
strong_predictions = np.zeros_like(y) # Initially, the strong model is empty.

for i in range(num_iters):

    # Error of the strong model
    error = strong_predictions - y

    # The weak model is a decision tree (see CART chapter)
    # without pruning and a maximum depth of 3.
    weak_model = tfdf.keras.CartModel(
        task=tfdf.keras.Task.REGRESSION,
        validation_ratio=0.0,
        max_depth=3)
    weak_model.fit(x=x, y=error)

    strong_model.append(weak_model)

    weak_predictions = weak_model.predict(x)[:,0]

    strong_predictions -= weak_predictions

'החל את הקוד הזה על מערך הנתונים הבא:

תרשים של אמת אדמה עבור תכונה אחת, x, והתווית שלה y. עלילה היא סדרת
גלים של סינוס פגום.

איור 25. מערך נתונים רגרסי סינתטי עם תכונה מספרית אחת.

 

הנה שלוש עליות אחרי החזרה הראשונה של האלגוריתם המתגבר

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

איור 26. שלוש עליות אחרי החזרה הראשונה.

 

חשוב לשים לב לנקודות הבאות בתרשימים 26:

  • בתרשים הראשון מוצגת החיזוי של המודל חזק, וכרגע הוא עומד על 0.
  • בתרשים השני מוצגת השגיאה, התווית של המודל החלש.
  • בתרשים השלישי מוצג המודל החלש.

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

אני רוצה לראות את שתי הרמות הנוספות:

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

איור 27. שלוש עליות אחרי החזרה השנייה.

 

חשוב לשים לב לנקודות הבאות באיור 27:

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

אנחנו מפעילים את האלגוריתם עבור 8 גרסאות נוספות:

עלים אלה מראים שהמודל חזק הולך וגדל בהדרגה אל האמת, ואילו החיזוי של המודל החלש הולך ומתפתח בהדרגה.

איור 28. שלוש עליות אחרי האיטר השלישי והאיטר העשירי.

 

באיור 28, חשוב לשים לב שהחיזוי של מודל מבוסס דומה לתרשים של מערך הנתונים.

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

הרמות הקודמות מרמזות על המהות של הדרגה. בדוגמה הזו, חסרות שתי הפעולות הבאות בעולם האמיתי:

  • כיווץ
  • אופטימיזציה של ערכי עלים בשלב אחד של השיטה של ניוטון

כיווץ

המודל החלש $f_i$ מוכפל בערך קטן $\nu$ (לדוגמה, $\nu = 0.1$) לפני שמתווסף למודל חזק $F_i$. הערך הקטן הזה נקרא כיווץ. במילים אחרות, במקום כל איטרציה באמצעות הנוסחה הבאה:

\[ F_{i+1} = F_i - f_i \]

כל חזרה משתמשת בנוסחה הבאה:

\[ F_{i+1} = F_i - \nu f_i \]

כיווץ בהגברה הדרגתית הוא דומה לשיעור הלמידה ברשתות נוירונים. כיווץ קובע את מהירות הלמידה של המודל החזק, וכך מגביל את ההתאמה שלו. כלומר, ערך הכיווץ קרוב ל-0.0 מקטין את ההתאמה הרחבה יותר מערך הכיווץ קרוב ל-1.0.

בקוד שלמעלה, כיווץ הדף יוטמע באופן הבא:

shrinkage = 0.1   # 0.1 is a common shrinkage value.
strong_predictions -= shrinkage * weak_predictions