(轉)RF、GBDT、XGBoost、lightGBM原理與區別

RF、GBDT和XGBoost都屬於集成學習(Ensemble Learning),集成學習的目的是通過結合多個基學習器的預測結果來改善單個學習器的泛化能力和魯棒性。 
  根據個體學習器的生成方式,目前的集成學習方法大致分爲兩大類:即個體學習器之間存在強依賴關係、必須串行生成的序列化方法,以及個體學習器間不存在強依賴關係、可同時生成的並行化方法;前者的代表就是Boosting,後者的代表是Bagging和“隨機森林”(Random Forest)。

1、RF 
1.1 原理 
  提到隨機森林,就不得不提Bagging,Bagging可以簡單的理解爲:放回抽樣,多數表決(分類)或簡單平均(迴歸),同時Bagging的基學習器之間屬於並列生成,不存在強依賴關係。 
  Random Forest(隨機森林)是Bagging的擴展變體,它在以決策樹 爲基學習器構建Bagging集成的基礎上,進一步在決策樹的訓練過程中引入了隨機特徵選擇,因此可以概括RF包括四個部分:1、隨機選擇樣本(放回抽樣);2、隨機選擇特徵;3、構建決策樹;4、隨機森林投票(平均)。 
  隨機選擇樣本和Bagging相同,隨機選擇特徵是指在樹的構建中,會從樣本集的特徵集合中隨機選擇部分特徵,然後再從這個子集中選擇最優的屬 性用於劃分,這種隨機性導致隨機森林的偏差會有稍微的增加(相比於單棵不隨機樹),但是由於隨機森林的‘平均’特性,會使得它的方差減小,而且方差的減小補償了偏差的增大,因此總體而言是更好的模型。 
  在構建決策樹的時候,RF的每棵決策樹都最大可能的進行生長而不進行剪枝;在對預測輸出進行結合時,RF通常對分類問題使用簡單投票法,迴歸任務使用簡單平均法。 
  RF的重要特性是不用對其進行交叉驗證或者使用一個獨立的測試集獲得無偏估計,它可以在內部進行評估,也就是說在生成的過程中可以對誤差進行無偏估計,由於每個基學習器只使用了訓練集中約63.2%的樣本,剩下約36.8%的樣本可用做驗證集來對其泛化性能進行“包外估計”。 
  RF和Bagging對比:RF的起始性能較差,特別當只有一個基學習器時,隨着學習器數目增多,隨機森林通常會收斂到更低的泛化誤差。隨機森林的訓練效率也會高於Bagging,因爲在單個決策樹的構建中,Bagging使用的是‘確定性’決策樹,在選擇特徵劃分結點時,要對所有的特徵進行考慮,而隨機森林使用的是‘隨機性’特徵數,只需考慮特徵的子集。 
1.2 優缺點 
  隨機森林的優點較多,簡單總結:1、在數據集上表現良好,相對於其他算法有較大的優勢(訓練速度、預測準確度);2、能夠處理很高維的數據,並且不用特徵選擇,而且在訓練完後,給出特徵的重要性;3、容易做成並行化方法。
  RF的缺點:在噪聲較大的分類或者回歸問題上回過擬合。 
2、GBDT 
  提GBDT之前,談一下Boosting,Boosting是一種與Bagging很類似的技術。不論是Boosting還是Bagging,所使用的多個分類器類型都是一致的。但是在前者當中,不同的分類器是通過串行訓練而獲得的,每個新分類器都根據已訓練的分類器的性能來進行訓練。Boosting是通過關注被已有分類器錯分的那些數據來獲得新的分類器。 
  由於Boosting分類的結果是基於所有分類器的加權求和結果的,因此Boosting與Bagging不太一樣,Bagging中的分類器權值是一樣的,而Boosting中的分類器權重並不相等,每個權重代表對應的分類器在上一輪迭代中的成功度。 
2.1 原理 
  GBDT與傳統的Boosting區別較大,它的每一次計算都是爲了減少上一次的殘差,而爲了消除殘差,我們可以在殘差減小的梯度方向上建立模型,所以說,在GradientBoost中,每個新的模型的建立是爲了使得之前的模型的殘差往梯度下降的方法,與傳統的Boosting中關注正確錯誤的樣本加權有着很大的區別。 
  在GradientBoosting算法中,關鍵就是利用損失函數的負梯度方向在當前模型的值作爲殘差的近似值,進而擬合一棵CART迴歸樹。 
  GBDT的會累加所有樹的結果,而這種累加是無法通過分類完成的,因此GBDT的樹都是CART迴歸樹,而不是分類樹(儘管GBDT調整後也可以用於分類但不代表GBDT的樹爲分類樹)。 
2.2 優缺點 
  GBDT的性能在RF的基礎上又有一步提升,因此其優點也很明顯,1、它能靈活的處理各種類型的數據;2、在相對較少的調參時間下,預測的準確度較高。 
  當然由於它是Boosting,因此基學習器之前存在串行關係,難以並行訓練數據。

3、XGBoost 
3.1 原理 
  XGBoost的性能在GBDT上又有一步提升,而其性能也能通過各種比賽管窺一二。坊間對XGBoost最大的認知在於其能夠自動地運用CPU的多線程進行並行計算,同時在算法精度上也進行了精度的提高。 
  由於GBDT在合理的參數設置下,往往要生成一定數量的樹才能達到令人滿意的準確率,在數據集較複雜時,模型可能需要幾千次迭代運算。但是XGBoost利用並行的CPU更好的解決了這個問題。 
3.2優點 
  1、傳統的GBDT以CART樹作爲基學習器,XGBoost還支持線性分類器,這個時候XGBoost相當於L1和L2正則化的邏輯斯蒂迴歸(分類)或者線性迴歸(迴歸); 
傳統的GBDT在優化的時候只用到一階導數信息,XGBoost則對代價函數進行了二階泰勒展開,得到一階和二階導數; 
  2、XGBoost在代價函數中加入了正則項,用於控制模型的複雜度。從權衡方差偏差來看,它降低了模型的方差,使學習出來的模型更加簡單,放置過擬合,這也是XGBoost優於傳統GBDT的一個特性; 
  3、shrinkage(縮減),相當於學習速率(XGBoost中的eta)。XGBoost在進行完一次迭代時,會將葉子節點的權值乘上該係數,主要是爲了削弱每棵樹的影響,讓後面有更大的學習空間。(GBDT也有學習速率); 
  4、列抽樣。XGBoost借鑑了隨機森林的做法,支持列抽樣,不僅防止過 擬合,還能減少計算; 
  5、對缺失值的處理。對於特徵的值有缺失的樣本,XGBoost還可以自動 學習出它的分裂方向; 
  6、XGBoost工具支持並行。Boosting不是一種串行的結構嗎?怎麼並行 的?注意XGBoost的並行不是tree粒度的並行,XGBoost也是一次迭代完才能進行下一次迭代的(第t次迭代的代價函數裏包含了前面t-1次迭代的預測值)。XGBoost的並行是在特徵粒度上的。我們知道,決策樹的學習最耗時的一個步驟就是對特徵的值進行排序(因爲要確定最佳分割點),XGBoost在訓練之前,預先對數據進行了排序,然後保存爲block結構,後面的迭代 中重複地使用這個結構,大大減小計算量。這個block結構也使得並行成爲了可能,在進行節點的分裂時,需要計算每個特徵的增益,最終選增益最大的那個特徵去做分裂,那麼各個特徵的增益計算就可以開多線程進行。 
3.3缺點 
  1、level-wise 建樹方式對當前層的所有葉子節點一視同仁,有些葉子節點分裂收益非常小,對結果沒影響,但還是要分裂,加重了計算代價。 
  2、預排序方法空間消耗比較大,不僅要保存特徵值,也要保存特徵的排序索引,同時時間消耗也大,在遍歷每個分裂點時都要計算分裂增益(不過這個缺點可以被近似算法所克服) 
4、lightGBM 
4.1 與XGboost對比 
  1、xgboost採用的是level-wise的分裂策略,而lightGBM採用了leaf-wise的策略,區別是xgboost對每一層所有節點做無差別分裂,可能有些節點的增益非常小,對結果影響不大,但是xgboost也進行了分裂,帶來了務必要的開銷。 leaft-wise的做法是在當前所有葉子節點中選擇分裂收益最大的節點進行分裂,如此遞歸進行,很明顯leaf-wise這種做法容易過擬合,因爲容易陷入比較高的深度中,因此需要對最大深度做限制,從而避免過擬合。 
  2、lightgbm使用了基於histogram的決策樹算法,這一點不同與xgboost中的 exact 算法,histogram算法在內存和計算代價上都有不小優勢。 
  (1)內存上優勢:很明顯,直方圖算法的內存消耗爲(#data* #features * 1Bytes)(因爲對特徵分桶後只需保存特徵離散化之後的值),而xgboost的exact算法內存消耗爲:(2 * #data * #features* 4Bytes),因爲xgboost既要保存原始feature的值,也要保存這個值的順序索引,這些值需要32位的浮點數來保存。 
  (2)計算上的優勢,預排序算法在選擇好分裂特徵計算分裂收益時需要遍歷所有樣本的特徵值,時間爲(#data),而直方圖算法只需要遍歷桶就行了,時間爲(#bin) 
  3、直方圖做差加速 
一個子節點的直方圖可以通過父節點的直方圖減去兄弟節點的直方圖得到,從而加速計算。 
  4、lightgbm支持直接輸入categorical 的feature 
在對離散特徵分裂時,每個取值都當作一個桶,分裂時的增益算的是”是否屬於某個category“的gain。類似於one-hot編碼。 
  5、多線程優化

參考: 
1、http://blog.csdn.net/qq_28031525/article/details/70207918 
2、https://www.cnblogs.com/mata123/p/7440774.html 
3、https://www.cnblogs.com/infaraway/p/7890558.html

4、https://blog.csdn.net/bbbeoy/article/details/79590981

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