集成學習正廣泛地被應用於機器學習/數據挖掘的實際項目之中。掌握集成學習方法,瞭解其特性與適用場景,對機器學習理論與實踐的結合幫助甚大。這裏,我們考察集成學習最重要的兩種類型:裝袋(Bagging)與提升(Boosting),從其兩大算法入手:Random Forest、GBDT,基於自己生成的數據集場景和UCI數據集開展實驗,對比分析算法的表現。
基礎簡要回顧
關於集成學習,引用博文筆記︱集成學習Ensemble Learning的描述如下圖:
從圖中可以看出,集成學習包括元算法和模型融合兩方面,元算法提供了從個體弱學習器到集成強學習器的實現,模型融合則在強學習器的基礎上,設計結合策略進一步提升性能,元算法按照個體弱學習器之間的依賴關聯關係,又分爲Boosting類算法和Bagging類算法。下面對其中最基礎的幾大算法進行概述。
Bagging
Bagging(裝袋法)基於自助採樣法(bootstrap sampling)來生成訓練數據,通過多輪有放回的對初始訓練集進行隨機採樣,多個訓練集被並行化生成,對應可訓練出多個基學習器,再將這些基學習器結合,構建出強學習器。
因爲是隨機有放回的採樣(自助法),初始訓練集中的樣本既有可能多次出現在某個採樣集中,又有可能不出現,通過統計計算,初始集約有63.2%的樣本出現在訓練集當中,剩下的36.8%樣本可用於模型泛化能力的驗證,這種方法稱爲“包外估計”(out-of-bag-estimation),同時包外樣本還可以用於決策樹的剪枝、神經網絡早停控制等等。
裝袋法的本質是引入了樣本擾動,通過增加樣本隨機性,達到降低方差的效果,這種方法在決策樹、神經網絡等易受樣本擾動影響的模型上效果尤爲明顯。
RF
RF-Random Forest(隨機森林)是Bagging的擴展,主要面向決策樹模型,在Bagging法構造決策樹基學習器的基礎上,對每步劃分時的當前特徵集進行隨機選擇以生成隨機特徵子集,然後再在子集中選擇最優特徵進行劃分,進而訓練出當前的基學習器。
在進行當前節點特徵(假設 d 個)隨機選擇時,子集特徵數目 k 推薦取值 k≈log2(d) 。較小的特徵子集加速了訓練,減小了計算開銷。
隨機森林通過特徵子集的隨機選擇的方式,引入了特徵擾動,在裝袋法的基礎上,這種方法可進一步降低了方差,增強了模型的泛化精度。
AdaBoost
不同與Bagging,Boosting算法是一種串行序列化方法,它的前後兩個基學習器間強關聯,後面學習器的訓練往往建立在前面學習器的訓練結果基礎上。
AdaBoost算法是Boosting算法族的典型代表,它基於“殘差逼近”的思路,採用“重賦權法”,即是根據每個基學習器的結果調整樣本權重,生成新的更加關注於錯誤樣本的數據分佈,然後在新數據分佈上繼續以損失函數最小爲目標訓練新的基學習器。同時根據這些基學習器的訓練誤差,對基學習器賦權,最後採用加權求和得出集成模型。
AdaBoost旨在減小學習的偏差,能夠基於泛化精度很差的學習器個體構建出強集成。
GBDT
GB(Gradient Boosting)可以被看作是AdaBoost的變體,最大不同之處在於GB在迭代優化過程中採用了梯度計算而非加權計算。GB通過在每一步殘差減少的梯度方向上訓練新的基學習器,最後通過集成得到強學習器。
GBDT算法(Gradient Boosting Decision Tree)是一種基於GB框架下的決策樹集成學習算法。基學習器採用的是以最小化平方誤差爲目標的迴歸樹,迭代的過程建立在對“之前殘差的負梯度表示”的迴歸擬合上,最後累加得到整個提升樹。
同其他Boosting算法一樣,GBDT也關注於降低擬合的偏差。
分類實驗
這裏我們採用2個sklearn.datasets
自帶的UCI數據集進行實驗。兩種算法(RF和GBDT)的實現基於sklearn.ensemble
。這裏查看完整實驗代碼-GitHub。
數據集
2個數據集的簡要信息如下:
# | 總類別數 | 特徵數 | 樣本數 | 其他 |
---|---|---|---|---|
IRIS-鳶尾花數據集 | 3 | 4 | 150(每類50條樣本) | 特徵均爲數值連續型、無缺失值 |
Breast_Cancer-乳腺癌數據集 | 2 | 30 | 569(正樣本212條,負樣本357條) | 特徵均爲數值連續型、無缺失值 |
加載數據,通過matplotlib
繪製出散點圖示意如下:
模型訓練測試
基於兩種參數(決策樹深 max_depth、基樹個數 n_estimators)的不同取值下集成學習的性能來進行分析,給出不同參數下測試集準確率組圖如下:
RF模型下 max_depth 參數對準確率的影響:
RF模型下 n_estimators 參數對準確率的影響:
GBDT模型下 max_depth 參數對準確率的影響:
GBDT模型下 n_estimators 參數對準確率的影響:
從上面的系列圖可以看出:
- 由於數據樣本本身可分性良好,所以兩種集成學習方法均表現出了極好的預測精度;
- 進一步地,在實驗中我們發現,要達到相同的精度,RF要求的 max_depth 參數要比 GBDT 大,這是由於兩種集成方法的偏差-方差側重不同。
- 參數 n_estimator 越大,模型精度越高,但是模型訓練耗時也越長,這是顯而易見的;
小結與參考
本文回顧了集成學習的思路,並以RF、GBDT爲典型進行了實驗。由於此處選擇的數據集並沒有太大的規模,且總體來說可分性好,所以實驗結果並沒有明顯地將RF、GBDT等方法的威力反映出來,但是,本文爲兩種算法的調參提供了思路,爲進一步將這些方法用於複雜性問題積累了經驗。
本文涉及到的一些重要參考鏈接如下: