AdaBoost算法

本篇筆記是針對二分類的AdaBoost算法總結。主要參考林軒田老師的《機器學習技法》課程,以及李航博士的《統計學習方法》第二版。沒錯,第二版已經出版了,快去買啊!

符號聲明

  • \(D = \{(x_1, y_1), (x_2, y_2), (x_3, y_3), \cdots, (x_N, y_N)\}\) - 用於訓練的數據集,\(x_n\)爲實例,\(y_n\)爲對應的標籤{-1, +1}
  • \(T\) - 需要訓練的基分類器總個數
  • \({g_t}\) - 第t輪訓練出的基分類器,\(t = 1, 2, 3, ..., T\)
  • \(u^{(t)} = \{u_{1}^{(t)}, u_{2}^{(t)}, u_{3}^{(t)}, \cdots, u_{N}^{(t)}\}\) - 第\(t\)輪的樣本權重
  • \(G\) - 最終的強分類器
  • \(\left[\left[ \cdot \right]\right]\) - 雙中括號內的·若爲真,則\(\left[\left[ \cdot \right]\right]=1\),否則\(\left[\left[ \cdot \right]\right]=0\)

算法

AdaBoost-w600

爲什麼這樣更新權重

集成學習的思想主要體現在“多個弱分類器通過某種方式組合得到最終的強分類器”。要想最後的強分類器有好的性能,則需要保證每個弱分類器儘可能的不同。

那麼如何能讓每個分類器儘量的不同?

\(t\)輪訓練的基分類器是\({g_t}\),然後根據\({g_t}\)在帶有權重\(\{{u_n}^{(t)}\}\)的訓練集\(D\)上的表現更新權重至\(\{{u_n}^{(t+1)}\}\)。倘若上一輪的\({g_t}\)在下一輪權重爲\(\{{u_n}^{(t+1)}\}\)的訓練集\(D\)上表現得不好,則可以認爲\({g_t}\)\({g_{t+1}}\)比較的不同。

也就是說,如果滿足:\[ \begin{equation} \frac{\sum_{n=1}^{N} u_{n}^{(t+1)}\left[\left[y_{n} \neq g_{t}\left(\mathbf{x}_{n}\right)\right]\right]}{\sum_{n=1}^{N} u_{n}^{(t+1)}}=\frac{1}{2} \end{equation} \]

\((1)\)說明\({g_t}\)在第\(t+1\)輪的訓練集上表現得就像隨機亂猜一樣,是\(\frac{1}{2}\)的概率。而在該輪訓練集上經過訓練後確定下來的\({g_{t+1}}\)應該是性能比較好的,所以可以說\({g_t}\)\({g_{t+1}}\)是比較不同的。

那要如何更新第\(t\)輪的權重能滿足\((1)\)

顯然,有\[ \begin{equation} \sum_{n=1}^{N} u_{n}^{(t+1)}\left[\left[y_{n} \neq g_{t}\left(\mathbf{x}_{n}\right)\right]\right] + \sum_{n=1}^{N} u_{n}^{(t+1)}\left[\left[y_{n} = g_{t}\left(\mathbf{x}_{n}\right)\right]\right] = \sum_{n=1}^{N} {u_{n}^{(t+1)}} \end{equation} \]

所以,\((1)\)可以寫爲\[ \begin{equation} \frac{\sum_{n=1}^{N} u_{n}^{(t+1)}\left[\left[y_{n} \neq g_{t}\left(\mathbf{x}_{n}\right)\right]\right]}{\sum_{n=1}^{N} u_{n}^{(t+1)}\left[\left[y_{n} \neq g_{t}\left(\mathbf{x}_{n}\right)\right]\right] + \sum_{n=1}^{N} u_{n}^{(t+1)}\left[\left[y_{n} = g_{t}\left(\mathbf{x}_{n}\right)\right]\right]}=\frac{1}{2} \end{equation} \]

爲了最後得到的概率爲\(\frac{1}{2}\),那麼需要\[ \begin{equation} \sum_{n=1}^{N} u_{n}^{(t+1)}\left[\left[y_{n} \neq g_{t}\left(\mathbf{x}_{n}\right)\right]\right] = \sum_{n=1}^{N} u_{n}^{(t+1)}\left[\left[y_{n} = g_{t}\left(\mathbf{x}_{n}\right)\right]\right] \end{equation} \]

那麼更新的做法可以如下所示:

更新權重-w500

最終將兩者一整合,就能得到每次更新的方式,如同上述算法所述。

爲什麼選擇\(\alpha_t\)作爲基分類器前的權重

  • 待編輯
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章