RF與GBDT的區別
1. 相同點:
- 都是基於樹模型的集成學習方法
- 最終的結果都是由多顆樹一起決定
2. 不同點:
- RF的基學習器可以是分類樹也可以是回歸樹,GBDT只由回歸樹組成
- RF可以並行生成,GBDT只能串行
- RF的結果為多數表決或者平均值,GBDT則是多顆樹累加之和
- RF對異常值不太敏感(數據的數據、特征的隨機),GBDT對異常值敏感
- RF減少的是方差、GBDT減少的是偏差
- RF不需要進行數據預處理(特征歸一化),GBDT需要特征歸一化(GBDT通過擬合殘差來訓練,因此需要歸一化處理,這里有梯度下降為什么需要對特征歸一化的解釋)
Xgb使用二階導的好處:
- 可以適配不同的損失函數:Xgb樹分類的准則是通過對損失函數求解得出的,且這個標准只和損失函數的一階導和二階導有關,那么不管用什么損失函數,只需要處理好其一、二階導數就好。
- 二階導的引導可以加速收斂。
分類樹和回歸樹的區別
- 分類樹使用信息增益或者增益比率來划分節點;最終的結果采取投票的形式決定
- 回歸樹使用最小化均方誤差划分節點;每個節點樣本的均值作為測試樣本的回歸預測值
GBDT、Xgb的區別
GBDT的核心就在於,每一棵樹學的是之前所有樹結論和的殘差,這個殘差就是一個加預測值后能得真實值的累加量。
Xgb是GBDT算法的一種很好的工程實現,並且在算法上做了一些優化,主要有以下幾個優化:首先在損失函數部分,加了顯示的正則化項,限制了CART葉子節點的個數、對葉子節點的權重有一個約束;再就是二階泰勒展開去擬合損失函數,讓梯度收斂更快更准確(梯度收斂更快更准確。這一點在優化算法里的牛頓法里已經證實了,而且還能增加Xgb的適用性);其次Xgb支持對數據進行采樣,不僅能有效降低過擬合的風險還能降低計算的成本;再就是樹結構調整方面,它不需要遍歷所有可能的分裂點了,采用了一種近似估計分裂點的算法;最后是Xgb能夠自動處理缺失值(把缺失值放到兩邊,看放到那邊增益大),能夠分塊並行、緩存優化
(1) 傳統GBDT以CART作為基分類器,xgboost還支持線性分類器,這個時候xgboost相當於帶L1和L2正則化項的邏輯斯蒂回歸(分類問題)或者線性回歸(回歸問題)。節點分裂的方式不同,gbdt是用的gini系數,xgboost是經過優化推導后的。
(2) 傳統GBDT在優化時只用到一階導數信息,xgboost則對代價函數進行了二階泰勒展開,同時用到了一階和二階導數。為什么xgboost要用泰勒展開,優勢在哪里?xgboost使用了一階和二階偏導, 二階導數有利於梯度下降的更快更准. 使用泰勒展開取得函數做自變量的二階導數形式, 可以在不選定損失函數具體形式的情況下, 僅僅依靠輸入數據的值就可以進行葉子分裂優化計算, 本質上也就把損失函數的選取和模型算法優化/參數選擇分開了. 這種去耦合增加了xgboost的適用性, 使得它按需選取損失函數, 可以用於分類, 也可以用於回歸。
(3) Xgboost在代價函數里加入了正則項,用於控制模型的復雜度,降低了過擬合的可能性。正則項里包含了樹的葉子節點個數、每個葉子節點上輸出的score的L2模的平方和
(4) Xgboost工具支持並行。boosting不是一種串行的結構嗎?怎么並行的?注意xgboost的並行不是tree粒度的並行,xgboost也是一次迭代完才能進行下一次迭代的(第t次迭代的代價函數里包含了前面t-1次迭代的預測值)。xgboost的並行是在特征粒度上的。我們知道,決策樹的學習最耗時的一個步驟就是對特征的值進行排序(因為要確定最佳分割點),xgboost在訓練之前,預先對數據進行了排序,然后保存為block結構,后面的迭代中重復地使用這個結構,大大減小計算量。這個block結構也使得並行成為了可能,在進行節點的分裂時,需要計算每個特征的增益,最終選增益最大的那個特征去做分裂,那么各個特征的增益計算就可以開多線程進行。這部分詳見這里。
RF與Xgb特征重要計算方式:
1.RF
RF主要有基於基尼指數以及基於袋外數據兩種方式,詳見這里。
2. Xgb
Xgb主要有三種計算方法:
a. importance_type=weight(默認值),特征重要性使用特征在所有樹中作為划分屬性的次數。
b. importance_type=gain,特征重要性使用特征在作為划分屬性時loss平均的降低量。
c. importance_type=cover,特征重要性使用特征在作為划分屬性時對樣本的覆蓋度。
針對GBDT的一些提問:
1) 怎樣設置單棵樹的停止生長條件?
a. 設置分裂節點的最小樣本數
b. 限制樹的深度
c. 設置最多葉子節點個數
d. 給loss設置約束條件
2)如何評估特征的權重大小?
a. 計算每個特征在訓練集下的信息增益,最后計算每個特征信息增益與所有特征信息增益的之和的比例。
b. 借鑒投票機制。用相同的gbdt參數對每個特征訓練出一個模型,然后在該模型下計算每個特征正確分類的個數,最后計算每個特征正確分類的個數與所有正確分類個數之和的比例為權重值。
3)當增加樣本數量時,訓練時長是線性增加的嗎?
不是。損失函數的極小值與樣本數量並不是線性相關的。
4)當增加樹的數量的時候,訓練時長是否線性增加
不是。每棵樹生成的時間是不一樣的。
5)當增加一顆樹葉子節點樹木的時候,訓練時長是否線性增加
否,葉子節點數和每棵樹的生成的時間復雜度不成正比。
6)每個節點上都保存什么信息?
中間節點保存某個特征的分裂值,葉結點保存預測是某個類別的概率。
7)如何防止過擬合?
a. 增加樣本數量,減少噪聲
b. 減少特征,選取重要特征
c. 對樣本進行采樣。
d. 對特征進行采樣。但采樣有個很嚴重的問題,就是不可復現,也就是每次的訓練結果不一樣,不知道是調了參數導致效果好,還是采樣導致效果好,還是其他的?
e. 在迭代中,動態調整學習率。(早停)
f. 對回歸樹進行剪枝。
g. 減少回歸樹的個數, 尤其那些作用不大的回歸樹(在驗證集上進行測試)。
8)gbdt中哪些部分可以並行?
a. 梯度計算
b. 選取最優分裂點的時候
c. 梯度更新
d. 預測最終結果,累加所有樹的預測結果的時候
9) 樹生長成畸形樹,會帶來哪些危害,如何預防?
在生成樹的過程中,加入一些樹不平衡的約束條件。例如對 樣本集中分到某個節點,而另一個節點的樣本很少的情況進行懲罰。