[Mechine Learning & Algorithm] 集成學習方法——Bagging和 Boosting


  使用機器學習方法解決問題時,有較多模型可供選擇。 一般的思路是先根據數據的特點,快速嘗試某種模型,選定某種模型后, 再進行模型參數的選擇(當然時間允許的話,可以對模型和參數進行雙向選擇)

  因為不同的模型具有不同的特點, 所以有時也會將多個模型進行組合,以發揮"三個臭皮匠頂一個諸葛亮的作用", 這樣的思路, 反應在模型中,主要有兩種思路:Bagging和Boosting

1. Bagging

  Bagging 可以看成是一種圓桌會議, 或是投票選舉的形式,其中的思想是:"群眾的眼光是雪亮的",可以訓練多個模型,之后將這些模型進行加權組合,一般這類方法的效果,都會好於單個模型的效果。 在實踐中, 在特征一定的情況下,大家總是使用Bagging的思想去提升效果。 例如kaggle上的問題解決,因為大家獲得的數據都是一樣的,特別是有些數據已經過預處理。

bagging_ppt

  以下為Data Mining Concepts and Techniques 2nd 中的偽代碼

bagging

  基本的思路比較簡單,就是:訓練時,使用replacement的sampling方法, sampling一部分訓練數據k次並訓練k個模型;預測時,使用k個模型,如果為分類,則讓k個模型均進行分類並選擇出現次數最多的類(每個類出現的次數占比可以視為置信度);如為回歸,則為各類器返回的結果的平均值。

  在該處,Bagging算法可以認為每個分類器的權重都一樣。

2. Boosting

  在Bagging方法中,我們假設每個訓練樣本的權重都是一致的; 而Boosting算法則更加關注錯分的樣本,越是容易錯分的樣本,約要花更多精力去關注。對應到數據中,就是該數據對模型的權重越大,后續的模型就越要拼命將這些經常分錯的樣本分正確。 最后訓練出來的模型也有不同權重,所以boosting更像是會整,級別高,權威的醫師的話語權就重些。

  以下為Data Mining Concepts and Techniques 2nd 中adaboost偽代碼:

adaboost

 

  訓練:先初始化每個訓練樣本的權重相等為1/d,d為樣本數量; 之后每次使用一部分訓練樣本去訓練弱分類器,且只保留錯誤率小於0.5的弱分類器,對於分對的訓練樣本,將其權重 調整為 error(Mi)/(1-error(Mi)) ,其中error(Mi)為第i個弱分類器的錯誤率(降低正確分類的樣本的權重,相當於增加分錯樣本的權重);

  測試:每個弱分類器均給出自己的預測結果,且弱分類器的權重為log(1-error(Mi))/error(Mi) ) 權重最高的類別,即為最終預測結果。

  在adaboost中,弱分類器的個數的設計可以有多種方式,例如最簡單的就是使用一維特征的樹作為弱分類器。

  adaboost在一定弱分類器數量控制下,速度較快,且效果還不錯。

  我們在實際應用中使用adaboost對輸入關鍵詞和推薦候選關鍵詞進行相關性判斷。隨着新的模型方法的出現, adaboost效果已經稍顯遜色,我們在同一數據集下,實驗了GBDT和adaboost,在保證召回基本不變的情況下,簡單調參后的Random Forest准確率居然比adaboost高5個點以上,效果令人吃驚。。。。

  Bagging和Boosting都可以視為比較傳統的集成學習思路。 現在常用的Random Forest,GBDT,GBRank其實都是更加精細化,效果更好的方法。 后續會有更加詳細的內容專門介紹。

  具體adaboost在百度關鍵詞搜索推薦中的應用參見:《分類模型在關鍵詞推薦系統中的應用

3. 參考內容

  [1] Dustinsea

  [2] Data Mining Concepts and Techniques 2nd

  [3] Soft Margin for Adaboost

  [4] 一個版本的adaboost實現


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM