GBDT和Xgboost模型對比總結

一.GBDT有哪些參數,如何確定樹的深度,學習率怎樣確定。
答:本題答案引自http://www.07net01.com/2016/12/1742073.html
在sk-learn中,GradientBoostingClassifier爲GBDT的分類類,GradientBoostingRegressor爲GBDT的迴歸類,兩者的參數類型相同,我們把參數分爲兩類,第一類是Boosting框架的重要參數,第二類是弱學習器(Cart樹)的重要參數。
Boosting框架的參數:
1. n_estimators: 也就是弱學習器的最大迭代次數,或者說最大的弱學習器的個數。一般來說n_estimators太小,容易欠擬合,n_estimators太大,又容易過擬合,一般選擇一個適中的數值。默認是100。在實際調參的過程中,我們常常將n_estimators和下面介紹的參數learning_rate一起考慮
2. learning_rate: 即每個弱學習器的權重縮減係數,也稱作步長。對於同樣的訓練集擬合效果,較小的學習率意味着我們需要更多的弱學習器的迭代次數。通常我們用步長和迭代最大次數一起來決定算法的擬合效果。所以這兩個參數n_estimators和learning_rate要一起調參。一般來說,可以從一個小一點的學習率開始調參,默認是0.1。
3. subsample:無放回採樣,取值爲(0,1]。注意這裏的子採樣和隨機森林不一樣,隨機森林使用的是放回抽樣,而這裏是不放回抽樣。如果取值爲1,則全部樣本都使用,等於沒有使用子採樣。如果取值小於1,則只有一部分樣本會去做GBDT的決策樹擬合。選擇小於1的比例可以減少方差,即防止過擬合,但是會增加樣本擬合的偏差,因此取值不能太低。推薦在[0.5, 0.8]之間,默認是1.0,即不使用子採樣。
4. Init: 即我們的初始化的時候的弱學習器,如果不輸入,則用訓練集樣本來做樣本集的初始化分類迴歸預測。否則用init參數提供的學習器做初始化分類迴歸預測。一般用在我們對數據有先驗知識,或者之前做過一些擬合的時候,如果沒有的話就不用管這個參數了。
5. loss: 即我們GBDT算法中的損失函數。分類模型和迴歸模型的損失函數是不一樣的。對於分類模型,有對數似然損失函數”deviance”和指數損失函數”exponential”兩者輸入選擇。默認是對數似然損失函數”deviance”。一般來說,推薦使用默認的”deviance”。它對二元分離和多元分類各自都有比較好的優化。
6. alpha:這個參數只有GradientBoostingRegressor有,當我們使用Huber損失”huber”和分位數損失“quantile”時,需要指定分位數的值。默認是0.9,如果噪音點較多,可以適當降低這個分位數的值。
弱分類器參數:
1. max_features: 劃分時考慮的最大特徵數, 可以使用很多種類型的值,默認是”None”,意味着劃分時考慮所有的特徵數;如果是”log2”意味着劃分時最多考慮log_2N個特徵;如果是”sqrt”或者”auto”意味着劃分時最多考慮sqrt{N}個特徵。如果是整數,代表考慮的特徵絕對數。如果是浮點數,代表考慮特徵百分比,即考慮(百分比N)取整後的特徵數。其中N爲樣本總特徵數。一般來說,如果樣本特徵數不多,比如小於50,我們用默認的”None”就可以了,如果特徵數非常多,我們可以靈活使用剛纔描述的其他取值來控制劃分時考慮的最大特徵數,以控制決策樹的生成時間。
2. max_depth:控制決策樹最大深度,默認不輸入,一般來說,數據少或者特徵少的時候不用考慮。如果模型樣本量多,特徵也多的情況下,推薦限制最大深度,常用的取值10-100之間。假設樹的深度爲N,樹爲完全二叉樹,則樹有2**N個葉子節點。
3. min_samples_leaf:葉子節點最少樣本數,這個值限制了葉子結點最少的樣本數,如果葉子節點數目小於該值,則會和兄弟節點一起被剪枝,默認是1,可以輸入最少的樣本數的證書,或者最少樣本數佔樣本總數的百分比,如果樣本量不大,則不需要考慮這個值,如果樣本數據集非常大,則推薦增大這和值。
4. min_samples_split:內部節點再劃分所需最小樣本數,這個值限制了子樹繼續劃分的條件,如果某節點的樣本數少於,min_saples_split,則不會繼續再嘗試最優特徵來進行劃分。默認是2.如果樣本數量不大,不需要考慮該值。
5. min_weight_fraction_leaf:葉子節點最小的樣本權重,這個值限制了葉子節點所有樣本權重和的最小值,若果小於這個值,就會和兄弟節點一起唄剪枝,默認是0,即不考慮權重問題,一般來說,如果我們有較多樣本有缺失值,或者分類樹樣本的分佈類別偏差很大,就會引入樣本權重,這時我們就要注意這個值。
6. max_leaf_nodes;最大葉子節點數,通過限制最大葉子結點數,可以防止過擬合,默認是None,即不限制。如果加了限制,算法就會建議在最大葉子節點數內最優的決策樹。如果特徵不多,不用考慮這個值,但是特徵分成多的話,可以通過交叉驗證獲得該值。
7. min_impurity_split:節點劃分最小不純度,這個值限制了決策樹的增長,如果節點的不純度(基尼係數,均方差)小於這個閾值,則該節點不再生成子節點,即爲葉子節點,默認值1e-7。

二. 隨機森林、GBDT、Xgboost區別,以及Xgboost爲何用到二階導?
回答這個問題,首先需要理解下bagging和boosting採樣的區別。
這個問題的原文地址:http://blog.csdn.net/chuanda112233/article/details/51913434
一句話的解釋,來自周志華老師的機器學習教科書( 機器學習-周志華):Boosting主要關注降低偏差,因此Boosting能基於泛化性能相當弱的學習器構建出很強的集成;Bagging主要關注降低方差,因此它在不剪枝的決策樹、神經網絡等學習器上效用更爲明顯。偏差指的是算法的期望預測與真實預測之間的偏差程度,反應了模型本身的擬合能力;方差度量了同等大小的訓練集的變動導致學習性能的變化,刻畫了數據擾動所導致的影響。
隨機森林使用Bagging策略爲每個分類器隨機選擇樣本做放回的採樣,然後分別在這些樣本上訓練分類器,通過投票的策略生成結果。而GBDT,Xgboost,Adaboost則採用boosting策略無放回採樣,通過迭代地訓練一系列的分類器,每個分類器採用的樣本分佈和上一輪的學習結果有關。
對於Bagging算法來說,由於我們會並行地訓練很多不同的分類器的目的就是降低這個方差(variance) ,因爲採用了相互獨立的基分類器多了以後,值自然就會靠近.所以對於每個基分類器來說,目標就是如何降低這個偏差(bias),所以我們會採用深度很深甚至不剪枝的決策樹。
對於Boosting來說,每一步我們都會在上一輪的基礎上更加擬合原數據,所以可以保證偏差(bias),所以對於每個基分類器來說,問題就在於如何選擇variance更小的分類器,即更簡單的分類器,所以我們選擇了深度很淺的決策樹。
接下來談一談GBDT和Xgboost的區別:
區別引自知乎:https://www.zhihu.com/question/41354392/answer/98658997
• 傳統GBDT以CART作爲基分類器,xgboost還支持線性分類器,這個時候xgboost相當於帶L1和L2正則化項的邏輯斯蒂迴歸(分類問題)或者線性迴歸(迴歸問題)。
• 傳統GBDT在優化時只用到一階導數信息,xgboost則對代價函數進行了二階泰勒展開,同時用到了一階和二階導數。順便提一下,xgboost工具支持自定義代價函數,只要函數可一階和二階求導。
• xgboost在代價函數里加入了正則項,用於控制模型的複雜度。正則項裏包含了樹的葉子節點個數、每個葉子節點上輸出的score的L2模的平方和。從Bias-variance tradeoff角度來講,正則項降低了模型的variance,使學習出來的模型更加簡單,防止過擬合,這也是xgboost優於傳統GBDT的一個特性。
• 列抽樣(column subsampling)。xgboost借鑑了隨機森林的做法,支持列抽樣,不僅能降低過擬合,還能減少計算,這也是xgboost異於傳統gbdt的一個特性。
• 對缺失值的處理。對於特徵的值有缺失的樣本,xgboost可以自動學習出它的分裂方向。
• xgboost工具支持並行。boosting不是一種串行的結構嗎?怎麼並行的?注意xgboost的並行不是tree粒度的並行,xgboost也是一次迭代完才能進行下一次迭代的(第t次迭代的代價函數裏包含了前面t-1次迭代的預測值)。xgboost的並行是在特徵粒度上的。我們知道,決策樹的學習最耗時的一個步驟就是對特徵的值進行排序(因爲要確定最佳分割點),xgboost在訓練之前,預先對數據進行了排序,然後保存爲block結構,後面的迭代中重複地使用這個結構,大大減小計算量。這個block結構也使得並行成爲了可能,在進行節點的分裂時,需要計算每個特徵的增益,最終選增益最大的那個特徵去做分裂,那麼各個特徵的增益計算就可以開多線程進行。
• 可並行的近似直方圖算法。樹節點在進行分裂時,我們需要計算每個特徵的每個分割點對應的增益,即用貪心法枚舉所有可能的分割點。當數據無法一次載入內存或者在分佈式情況下,貪心算法效率就會變得很低,所以xgboost還提出了一種可並行的近似直方圖算法,用於高效地生成候選的分割點。

Xgboost使用泰勒展開式二階導函數能夠加快收斂速度。
這裏寫圖片描述
三、LR,gbdt,libfm三個模型各適用於處理什麼類型的特徵?
答案來自知乎:https://www.zhihu.com/question/35821566/answer/91208044
• LR, FM都比較適用於高維稀疏特徵, gbdt不適合. FM能夠得到特徵分量之間的關係(通常是兩兩特徵), LR常用於線性問題,對於非線性問題需要定義非線性函數對特徵進行映射, GBDT對線性/非線性問題基本上都通吃..而且效果很好. 取得好的效果嘛..建議gbdt+LR或者gbdt+FM啦, 即gbdt的輸出作爲LR或者FM的輸入, 原始特徵經過gbdt轉變成高維稀疏特徵, 簡單來說, gbdt的輸出相當於對原始特徵進行了特徵組合得到高階屬性或者說是非線性映射.

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