1. 程式人生 > >機器學習回顧篇(12):整合學習之Bagging與隨機森林

機器學習回顧篇(12):整合學習之Bagging與隨機森林

 

1 引言¶

整合學習演算法是當下炙手可熱的一類演算法,在諸多機器學習大賽中都頻繁出現它的身影。準確來說,整合學習演算法並不是一個單獨的機器學習演算法,而是通過構建多個學習器,博採眾家之長,共同求解問題的一種思想。古語有云:“三個臭皮匠頂個諸葛亮”。一個簡單的學習器也許不能很好的擬合數據,但是結合多個不同的學習器去解決問題,往往就可能有更加不俗的表現。 本篇博文中,我們先來詳細說說整合學習思想以及分類,然後對其中的Bagging演算法展開介紹。

2 整合學習¶

引言中說過,所謂整合學習就是先產生一組單個的學習器,我們姑且將這些單個的學習器稱為“個體學習器”,然後通過某種策略將這些個體學習器結合起來共同完成學習任務,如下圖所示。那麼,有兩個問題需要解決:第一,如果獲得個體學習器;第二,如何將各個體學習器的結果結合到一起。

在回答第一個問題前,我們必須明確,對整合學習中單個學習器必須滿足兩個條件:
(1)學習器之間應該有差異性。如果使用的單個學習器將沒有差異,那麼整合起來的結果是沒有變化的。
(2)每個學習器的精度必須大於0.5。在整合學習中,單個分類器不需要很強,因為越強的分類器訓練過程就越複雜,甚至容易發生過擬合,只需要保證每個學習器準確率大於0.5,因為如果單個學習的的準確率小於0.5,隨著整合規模的增加,分類精度不斷下降,反之如果精度大於0.5,就算簡單的學習器,通過足夠數量的組合最終精度也會可以趨向於1。可以通過下圖來理解這兩個條件。

 

在這兩個條件前提下,對於第一個問題,有兩種解決思路。一種是使用不同類別的演算法來構建個體學習器,例如對於同一個任務分別使用決策樹演算法、支援向量機、神經網路等不同演算法來構建學習器。另一種思路是所有個體學習器都使用同一種演算法進行構建,這種思路是目前整合學習演算法的主流。在所有個體學習器都使用同種演算法構建時,如何保證學習器之間的差異性呢?有兩種方案:

  • 每次訓練個體學習器時,對原始資料集進行抽樣獲得不同資料集作為當前訓練集,每一個訓練樣本在抽樣訓練集中可以多次或不出現,經過$T$次訓練後,可得到$T$個不同的沒有相互依賴的個體學習器學習器。Bagging、隨機森林就是這種方案的代表。
  • 通過更新權重的方式不斷地使用一個弱學習器彌補前一個弱學習器的“不足”的過程,來序列地構造一個較強的學習器,這個強學習器能夠使目標函式值足夠小。這一方案的代表是Boosting系列的演算法,包括Adaboost、GBDT、XGBOOST等

在本文中,我們先對第一種方案的兩種演算法——Bagging和隨機森林進行介紹,在後續的博文中,再對Adaboost、GBDT等演算法進行分析。

3 Bagging¶

Bagging是並行式整合學習方法的最典型代表,演算法名稱來源於Bootstrap aggregating的簡寫,又稱裝袋演算法,這種演算法直接採用自助取樣法獲得$T$個各不相同的資料集,分別使用這$T$個數據集進行訓練可獲得$T$個個體學習器,再將這些學習器組合起來共同完成分類或者回歸任務。當完成分類任務時,採用簡單投票法對$T$個體學習器結果進行組合後輸出;當染成迴歸任務時,採用簡單平均法對$T$個個體學習器學習結果進行組合輸出。

3.1 自助取樣法¶

自助取樣法(Bootstrap sampling是一種從給定原始資料集中有放回的均勻抽樣,也就是說,每當選中一個樣本,它等可能地被再次選中並被再次新增到訓練集中。對於給