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

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

באמצעות Scikit-Learn, תמצאו אלגוריתם Random Forest, כלומר מודל האנסמבל מסוג התיק. מצד שני, תמצאו גם מודלים של Boosting, המאמנים את האומדנים ברצף, כאשר התוצאה של מודל אחד מועברת לאחר, שינסו לשפר את התחזיות, עד שיגיעו לתוצאה אופטימלית.

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

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

ניתן לטעון שיפור דרגות מ-Skit-Learn באמצעות מחלקה זו from sklearn.ensemble import GradientBoostingRegressor. ניתן להשתמש באלגוריתם ה- Gradient Boosting עבור סיווג או עבור מודלים של רגרסיה. זהו אומדן מבוסס עצים - כלומר הוא מורכב מעצי החלטה רבים.

התוצאה של עץ 1 ייצור שגיאות. השגיאות הללו ישמשו והקלט עבור ה עץ 2. שוב, השגיאות של הדגם האחרון ישמשו והקלט של הדגם הבא, עד שהוא יגיע ל- n_estimators ערך.

כל דגם יתאים לשגיאות של הקודם. תמונה מאת המחבר.

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

בוא נראה איך עושים את זה עכשיו.

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

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

# מערך נתונים
df = sns.load_dataset('car_crashes')

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

מערך נתונים של Car Crashes, מ- seaborn. תמונה מאת המחבר.

מסתכל במהירות על המתאמים.

# מתאמים
df.corr().style.background_gradient(cmap='coolwarm')
מתאמים במערך הנתונים. תמונה מאת המחבר.

אוקיי, אין מולטי-קולינאריות גדולה. אנחנו יכולים לראות את זה ins_premium ו ins_losses לא מתאם טוב מאוד עם total , אז לא נשקול אותם במודל.

אם נבדוק את הנתונים החסרים, אין כאלה

# חסר
df.isnull().sum()
0

נחמד, אז בואו נחלק את הנתונים עכשיו.

# X ו-y
X = df.drop(['ins_premium', 'ins_losses', 'abbrev', 'total'], axis=1)
y = df['סה"כ']
# מבחן רכבת
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=22)

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

אני משתמש ב-500 אומדנים עם א learning_rate של 0.3.

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

steps = [('scale', StandardScaler()),
('GBR', GradientBoostingRegressor(n_estimators=500, learning_rate=0.03)) ]
# Instance Pipeline והתאמה
pipe = Pipeline(steps).fit(X_train, y_train)
# לנבא
preds = pipe.predict(X_test)

עכשיו, מעריכים.

# RMSE של התחזיות
print(f'RMSE: { round(np.sqrt(mean_squared_error(y_test, preds)),1 )}')
[OUT]: RMSE: 1.1# ממוצע ערכי Y האמיתיים
print(f'Data y mean: {round( y.mean(),1 )}')
[OUT]: ממוצע הנתונים: 15.8

טוֹב. ה-RMSE שלנו הוא בערך 6.9% מהממוצע. אז אנחנו בממוצע כל כך.

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

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

#Model
gbr = GradientBoostingRegressor(n_estimators=500, learning_rate=0.3).fit(X_train, y_train)

עכשיו זה הדברים הטובים. יש שיטה ב- Gradient Boosting שמאפשרת לנו לחזור על התחזיות של כל מעריך מאומן, מ-1 עד 500. לכן, ניצור לולאה שעוברת דרך 500 האומדים ב- gbr מודל, מנבא תוצאות באמצעות השיטה staged_predict(), מחשב את השגיאה הממוצעת בריבוע ומאחסן את התוצאה ברשימה errors.

# לולאה לקבלת המספר הטוב ביותר
errors = [ mean_squared_error(y_test, preds) עבור preds ב-gbr.staged_predict(X_test)]
# מספר אופטימלי של אומדנים
optimal_num_estimators = np.argmin(errors) + 1

לאחר מכן, נוכל לשרטט את התוצאה.

#עלילה
g=sns.lineplot(x=range(500), y=errors)
g.set_title(f'המספר הטוב ביותר של מעריכים ב-{best_n_estimators}', size=15);
המספר הטוב ביותר של אומדנים. תמונה מאת המחבר.

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

# הסבה מחדש
gbr = GradientBoostingRegressor(n_estimators=34, learning_rate=0.3).fit(X_train, y_train)
# תחזיות
preds2 = gbr.predict(X_test)

מעריך...

# RMSE של התחזיות
print(f'RMSE: { round(np.sqrt(mean_squared_error(y_test, preds2)),1 )}')
[OUT]: RMSE: 1.0
# ממוצע נתונים Y
print(f'Data y mean: {round( y.mean(),1 )}')
[OUT]: ממוצע הנתונים: 15.8

ירדנו מ-6.9% ל-6.3% הנחה עכשיו. משוער. 9% יותר טוב. בואו נסתכל על כמה תחזיות.

תחזיות משני הדגמים. תמונה מאת המחבר.

תוצאות מעניינות. חלק מהתחזיות של המודל השני טובות יותר מהראשון.

למדנו כיצד לקבוע את המספר הטוב ביותר של אומדנים לשינוי א GradientBoostingRegressor מ-Skikit-Learn. זהו היפרפרמטר שיכול לעשות את ההבדל במודל אנסמבל מסוג זה, שמאמן אומדנים ברצף.

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

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

הנה ה קוד מלא ב- GitHub.

אם אהבתם את התוכן הזה, עקבו אחר הבלוג שלי.

תמצא אותי ב לינקדין.

תרגיל זה התבסס על ספר הלימוד המצוין מאת Aurélien Géron, בהפניה.

כיצד לבחור את מספר האומדנים לשיפור הדרגתי פורסם מחדש ממקור https://towardsdatascience.com/how-to-choose-the-number-of-estimators-for-gradient-boosting-8d06920ab891?source=rss—-7f60cf5620c9— 4 דרך https://towardsdatascience.com/feed

<!–

->

בול זמן:

עוד מ יועצי בלוקצ'יין