數據挖掘算法06 - Adaboost

Adaboost

今天我們學習 AdaBoost 算法。在數據挖掘中,分類算法可以說是核心算法,其中 AdaBoost 算法與隨機森林算法一樣都屬於分類算法中的集成算法

集成算法的兩種模式

集成的含義就是集思廣益,博取衆長,當我們做決定的時候,我們先聽取多個專家的意見,再做決定。集成算法通常有兩種方式,分別是投票選舉(bagging)再學習(boosting)。投票選舉的場景類似把專家召集到一個會議桌前,當做一個決定的時候,讓 K 個專家(K 個模型)分別進行分類,然後選擇出現次數最多的那個類作爲最終的分類結果。再學習相當於把 K 個專家(K 個分類器)進行加權融合,形成一個新的超級專家(強分類器),讓這個超級專家做判斷。

所以你能看出來,投票選舉和再學習還是有區別的。Boosting 的含義是提升,它的作用是每一次訓練的時候都對上一次的訓練進行改進提升,在訓練的過程中這 K 個“專家”之間是有依賴性的,當引入第 K 個“專家”(第 K 個分類器)的時候,實際上是對前 K-1 個專家的優化。而 bagging 在做投票選舉的時候可以並行計算,也就是 K 個“專家”在做判斷的時候是相互獨立的,不存在依賴性。

AdaBoost 的工作原理

AdaBoost 的英文全稱是 Adaptive Boosting,中文含義是自適應提升算法

什麼是 Boosting 算法呢?Boosting 算法是集成算法中的一種,同時也是一類算法的總稱。這類算法通過訓練多個弱分類器,將它們組合成一個強分類器,也就是我們俗話說的“三個臭皮匠,頂個諸葛亮”。

我可以用上面的圖來表示最終得到的強分類器,你能看出它是通過一系列的弱分類器根據不同的權重組合而成的。

假設弱分類器爲 Gi(x),它在強分類器中的權重 αi,那麼就可以得出強分類器 f(x):

有了這個公式,爲了求解強分類器,你會關注兩個問題:

  • 如何得到弱分類器,也就是在每次迭代訓練的過程中,如何得到最優弱分類器?

實際上,AdaBoost 算法是通過改變樣本的數據分佈來實現的。AdaBoost 會判斷每次訓練的樣本是否正確分類,對於正確分類的樣本,降低它的權重,對於被錯誤分類的樣本,增加它的權重。再基於上一次得到的分類準確率,來確定這次訓練樣本中每個樣本的權重。然後將修改過權重的新數據集傳遞給下一層的分類器進行訓練。這樣做的好處就是,通過每一輪訓練樣本的動態權重,可以讓訓練的焦點集中到難分類的樣本上,最終得到的弱分類器的組合更容易得到更高的分類準確率。

  • 每個弱分類器在強分類器中的權重是如何計算的?

實際上在一個由 K 個弱分類器中組成的強分類器中,如果弱分類器的分類效果好,那麼權重應該比較大,如果弱分類器的分類效果一般,權重應該降低。所以我們需要基於這個弱分類器對樣本的分類錯誤率來決定它的權重,用公式表示就是:

其中 ei 代表第 i 個分類器的分類錯誤率。

總結

今天我給你講了 AdaBoost 算法的原理,你可以把它理解爲一種集成算法,通過訓練不同的弱分類器,將這些弱分類器集成起來形成一個強分類器。在每一輪的訓練中都會加入一個新的弱分類器,直到達到足夠低的錯誤率或者達到指定的最大迭代次數爲止。實際上每一次迭代都會引入一個新的弱分類器(這個分類器是每一次迭代中計算出來的,是新的分類器,不是事先準備好的)。

在弱分類器的集合中,你不必擔心弱分類器太弱了。實際上它只需要比隨機猜測的效果略好一些即可。如果隨機猜測的準確率是 50% 的話,那麼每個弱分類器的準確率只要大於 50% 就可用。AdaBoost 的強大在於迭代訓練的機制,這樣通過 K 個“臭皮匠”的組合也可以得到一個“諸葛亮”(強分類器)。

當然在每一輪的訓練中,我們都需要從衆多“臭皮匠”中選擇一個拔尖的,也就是這一輪訓練評比中的最優“臭皮匠”,對應的就是錯誤率最低的分類器。當然每一輪的樣本的權重都會發生變化,這樣做的目的是爲了讓之前錯誤分類的樣本得到更多概率的重複訓練機會。

同樣的原理在我們的學習生活中也經常出現,比如善於利用錯題本來提升學習效率和學習成績

用 AdaBoost 迴歸分析對波士頓房價進行了預測。因爲這是個迴歸分析的問題,我們直接使用 sklearn 中的 AdaBoostRegressor 即可。如果是分類,我們使用 AdaBoostClassifier。

另外我們將 AdaBoost 分類器、弱分類器和決策樹分類器做了對比,可以看出經過多個弱分類器組合形成的 AdaBoost 強分類器,準確率要明顯高於決策樹算法。所以 AdaBoost 的優勢在於框架本身,它通過一種迭代機制讓原本性能不強的分類器組合起來,形成一個強分類器。

其實在現實工作中,我們也能找到類似的案例。IBM 服務器追求的是單個服務器性能的強大,比如打造超級服務器。而 Google 在創建集羣的時候,利用了很多 PC 級的服務器,將它們組成集羣,整體性能遠比一個超級服務器的性能強大。

再比如我們講的“三個臭皮匠,頂個諸葛亮”,也就是 AdaBoost 的價值所在。

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