Boosting و AdaBoost

الگوریتم AdaBoost را قدم‌به‌قدم اجرا کنی و بدانی چرا به نویز برچسب حساس است.

14 دقیقه مطالعه · 5 سؤال تمرینی · یادگیری ماشین میانی و پیشرفته

ایده‌ی Boosting و الگوریتم AdaBoost

برخلاف Bagging که مدل‌ها را موازی و مستقل می‌سازد، Boosting آن‌ها را پشت سر هم می‌سازد و هر مدل روی اشتباه‌های قبلی تمرکز می‌کند. هدف اصلی‌اش کاهش بایاس است.

AdaBoost با برچسب‌های yi∈{−1,+1}y_i \in \{-1, +1\}:

  1. وزن‌ها را یکسان شروع کن: wi=1/nw_i = 1/n
  2. برای t=1,…,Tt = 1, \dots, T:
    • یادگیرنده‌ی ضعیف hth_t را با وزن‌های wiw_i آموزش بده
    • خطای وزن‌دار εt=∑iwi 1[ht(xi)≠yi]\varepsilon_t = \sum_i w_i\,\mathbb{1}[h_t(x_i) \ne y_i] را حساب کن
    • ضریب مدل: αt=12ln⁡1−εtεt\alpha_t = \tfrac12 \ln\dfrac{1-\varepsilon_t}{\varepsilon_t}
    • وزن‌ها را به‌روز کن: wi←wi e−αtyiht(xi)w_i \leftarrow w_i\,e^{-\alpha_t y_i h_t(x_i)} و نرمال کن
  3. خروجی نهایی: H(x)=sign⁡(∑tαtht(x))H(x) = \operatorname{sign}\big(\sum_t \alpha_t h_t(x)\big)

نمونه‌های اشتباه (yiht(xi)=−1y_i h_t(x_i) = -1) وزنشان در eαte^{\alpha_t} ضرب می‌شود و بزرگ‌تر می‌شود.

AdaBoost از نگاه تابع زیان

Friedman، Hastie و Tibshirani (۲۰۰۰) نشان دادند AdaBoost همان مدل‌سازی جمعی گام‌به‌گام با زیان نمایی است:

L(y,F)=e−yF(x)L(y, F) = e^{-y F(x)}

این دید دو نتیجه دارد:

  • زیان نمایی برای نمونه‌هایی که با حاشیه‌ی زیاد اشتباه دسته‌بندی شده‌اند، بسیار سریع رشد می‌کند. پس AdaBoost به نویز برچسب و داده‌ی پرت حساس است.
  • با عوض کردن تابع زیان می‌شود الگوریتم‌های Boosting دیگری ساخت. این همان ایده‌ی Gradient Boosting در درس بعد است.

تمرین‌های این درس را حل کن (رایگان)