決策樹和基於決策樹的集成方法(DT,RF,GBDT,XGB)復習總結
摘要:
1.算法概述
2.算法推導
3.算法特性及優缺點
4.註意事項
5.實現和具體例子
內容:
1.算法概述
1.1 決策樹(DT)是一種基本的分類和回歸方法。在分類問題中它可以認為是if-then規則的集合,也可以認為是定義在特征空間與類空間上的條件概率分布,學習思想包括ID3,C4.5,CART(摘自《統計學習方法》)。
1.2 Bagging :基於數據隨機重抽樣的集成方法(Ensemble methods),也稱為自舉匯聚法(boostrap aggregating),整個數據集是通過在原始數據集中隨機選擇一個樣本進行替換得到的。進而得到S個基預測器( base estimators),選擇estimators投票最多的類別作為分類結果,estimators的平均值作為回歸結果。(摘自《統計學習方法》和scikit集成方法介紹)
1.3 隨機森林(RF):基於boostrap重抽樣和隨機選取特征,基預測器是決策樹的集成方法(Ensemble methods)
1.4 Boosting :通過改變樣本的權重(誤分樣本權重擴大)學習多個基預測器,並將這些預測器進行線性加權的集成方法 (摘自《統計學習方法》)
1.5 梯度提升決策樹(GBDT):基於boosting方法,提升方向是梯度方向的決策樹的集成方法(Ensemble methods)
1.6 XGBDT:基於GBDT的一種升級版本,對目標函數做了二階導數,主要改進是使用了正則化和特征分塊存儲並行處理(參考大殺器xgboost指南)
1.7 回歸/分類樹樹模型函數:
,這裏數據集被劃分為R1,...,Rm個區域,每一個區域對應一個預測值Cm;其中I()是指示函數,當滿足條件時返回1,否則為0
1.8 決策樹常見的損失函數:
用於分類的損失函數:01損失,LR的對數損失,softmax的mlogloss
用於回歸的損失函數:線性回歸的MSE
2.算法推導
2.1 決策樹生成過程就是一個遞歸的過程,如果滿足某種停止條件(樣本都是同一類別,叠代次數或者其他預剪枝參數)則返回多數投票的類作為葉結點標識;否則選擇最佳劃分特征和特征值生成|T|個子節點,對子節點數據進行劃分;所以劃分屬性的計算方式是DT的精髓,以下總結各種劃分屬性的計算方法(附一個java實現決策樹的demo):
ID3與C4.5中使用的信息增益和信息增益率:
信息熵(Entropy)是表示隨機變量不確定性的度量:
,其中S是數據集,X是類別集合,p(x)是類別x占數據集的比值。
信息增益(Information gain)表示數據集以特征A劃分,數據集S不確定性下降的程度
,其中H(S)是原數據集S的熵;T是S以特征A劃分的子集集合,即
p(t)是T的某一劃分子集t占數據集S的比值,H(t)是劃分子集t的熵。
信息增益率(為了克服ID3傾向於特征值多的特征):
IG_Ratio = IG(A,S) / H(A),特征A的熵越大,受到的懲罰也越多,從而保證特征之間的信息增益率可比
信息增益/信息增益率越大,樣本集合的不確定性越小
CART中使用的Gini指數:
基尼(gini)指數是元素被隨機選中的一種度量:
數據集D的gini系數:
在數據集D中以特征A劃分的gini系數:
gini指數越小,樣本集合的不確定性越小
2.2回歸樹:CART,GBDT以及XGBoost 都可以用作回歸樹,所以這裏梳理下回歸樹是如何確定劃分特征和劃分值的:
,其中C1,C2是劃分區域R1,R2的均值,J,S是劃分特征和劃分的特征值
2.3 GBDT算法(來自這個論文,可以參考《統計學習方法》中例8.2手算一下)
附:
參考自:《統計學習基礎 數據挖據、推理與預測》 by Friedman 10.9節
2.4 XGBoost
模型函數:
最終得:
詳細的推導會附在文尾
3.算法特性及優缺點
決策樹的優(特性)缺點:
優點:
(1)輸出結果易於理解,
(2)對缺失值不敏感,可以處理無關數據,可以處理非線性數據
(3)對於異常點的容錯能力好,健壯性高
(4)不需要提前歸一化
(5)可以處理多維度輸出的分類問題。
缺點:
(1)容易過擬合,需要剪枝或者RF避免
(2)只註重單個特征的局部劃分,而不能像LR那樣考慮整體的特征
ID3算法比較:
缺點:
(1)按照特征切分後,特征不在出現,切分過於迅速;
(2)只能處理類別類型,決策樹不一定是二叉樹,導致學習出來的樹可能非常寬
(3)不能回歸
(4)信息增益的結果偏向於數值多的特征
CART算法比較:
優點:離散或者連續特征可以重復使用;可以處理連續性特征;可以回歸
RF的特性
優點:並行處理速度快,泛化能力強,可以很好的避免過擬合;能夠得到特征的重要性評分(部分參考這篇總結)
對於不平衡數據集可以平衡誤差(參考中文維基百科)
缺點:偏差會增大(方差減小)
GBDT的特性
優點:精度高;可以發現多種有區分性的特征以及特征組合
缺點:串行處理速度慢
XGB算法比較:
使用了二階導數,對特征分塊,從而可以並行加快運算速度
4.註意事項
4.1 樹的剪枝(結合sklearn中的參數進行總結)
max_depth :DT的最大深度(默認值是3)
max_features :最大特征數(默認值是None)
min_samples_split :觸發分割的最小樣本個數,如果是2,兩個葉結點各自1個樣本
min_samples_leaf :葉子節點的最小樣本數,如果是2,兩個葉結點至少2個樣本
min_impurity_split :最小分割純度(與分割標準有關,越大越不容易過擬合)
(附:樹模型調參)
4.2 如何計算的屬性評分(結合sklearn總結)
The importance of a feature is computed as the (normalized) total reduction of the criterion brought by that feature. It is also known as the Gini importance [R245].
4.3 正則化
衰減(Shrinkage)因子(learning_rate):
proposed a simple regularization strategy that scales the contribution of each weak learner by a factor :
The parameter is also called the learning rate because it scales the step length the gradient descent procedure; it can be set via the learning_rate
parameter. ——摘自scikit官網
eta [default=0.3]
- 為了防止過擬合,更新過程中用到的收縮步長。在每次提升計算之後,算法會直接獲得新特征的權重。 eta通過縮減特征的權重使提升計算過程更加保守。
缺省值為0.3
- 取值範圍為:[0,1]
- 通常最後設置eta為0.01~0.2 ——摘自XGBOOST調優
正則項系數:
- lambda [default=0]
- L2 正則的懲罰系數
- 用於處理XGBoost的正則化部分。通常不使用,但可以用來降低過擬合
- alpha [default=0]
- L1 正則的懲罰系數
- 當數據維度極高時可以使用,使得算法運行更快。
- lambda_bias
- 在偏置上的L2正則。
缺省值為0
(在L1上沒有偏置項的正則,因為L1時偏置不重要) ——摘自XGBOOST調優
- 在偏置上的L2正則。
4.4 其他參數:
class_weight:為了克服類別不均衡問題,引入代價敏感方法,class_weight是各類別的權重 ——摘自scikit官網:
- gamma [default=0]
- minimum loss reduction required to make a further partition on a leaf node of the tree. the larger, the more conservative the algorithm will be.
- range: [0,∞]
- 模型在默認情況下,對於一個節點的劃分只有在其loss function 得到結果大於0的情況下才進行,而gamma 給定了所需的最低loss function的值
- gamma值使得算法更conservation,且其值依賴於loss function ,在模型中應該進行調參。 ——摘自XGBOOST調優
註:以上只是列出個人覺得比較重要的超參,具體的調參還請參見這兩篇博文:RF和GBDT參數詳解:《使用sklearn進行集成學習——實踐》;XGBoost參數調優:XGBoost-Python完全調參指南-參數解釋篇
5.實現和具體例子
微額借款人品預測競賽
風控違約預測競賽
CTR預測(GBDT+LR),sklearn官網RF+LR的進行特征選擇的例子
Spark ml GradientBoostedTrees 核心實現部分
預測多變量的例子——(kaggle)預測沃爾瑪超市38個購物區購物量
附:XGB推導目標函數推導:
決策樹和基於決策樹的集成方法(DT,RF,GBDT,XGB)復習總結