בדומה להצטיידות נתונים ולחיזוק השיפור, שיטה מתוחכמת היא בנוסף לאלגוריתם נוסף של למידה חישובית. בעבר, שדרוג הדרגתי מורכב משני סוגי מודלים:
- "weak" מודל למידה חישובית, שהוא בדרך כלל עץ להחלטות.
- מודל "strong" של למידה חישובית, שמורכב מכמה מודלים נמוכים.
בכל שלב בתהליך ההגברה של מודל חלש, המערכת מסתמכת על מודל חזוי כדי לחזות את ה&"שגיאה&ציטוט; של המודל העצמי הנוכחי (שנקרא תגובת פסאודו). בהמשך נפרט "שגיאה". בשלב זה, נניח ""שגיאה" הוא ההבדל בין החיזוי לבין תווית רגרסית. לאחר מכן, המודל החלש (כלומר, "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
'החל את הקוד הזה על מערך הנתונים הבא:
איור 25. מערך נתונים רגרסי סינתטי עם תכונה מספרית אחת.
הנה שלוש עליות אחרי החזרה הראשונה של האלגוריתם המתגבר
איור 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