轉載至:https://blog.csdn.net/u014035615/article/details/79612827
RF、GBDT、XGboost都可以做特徵選擇,屬於特徵選擇中的嵌入式方法。比如在sklearn中,可以用屬性feature_importances_去查看特徵的重要度, 比如:
-
from sklearn import ensemble
-
#grd = ensemble.GradientBoostingClassifier(n_estimators=30)
-
grd = ensemble.RandomForestClassifier(n_estimators=30)
-
grd.fit(X_train,y_train)
-
grd.feature_importances_
但是這三個分類器是如何計算出特徵的重要度呢?下面來分別的說明一下。
1. 隨機森林(Random Forest)
用袋外數據 (OOB) 做預測。隨機森林在每次重抽樣建立決策樹時,都會有一些樣本沒有被選中,那麼就可以用這些樣本去做交叉驗證,這也是隨機森林的優點之一。它可以不用做交叉驗證,直接用oob _score_去對模型性能進行評估。
具體的方法就是:
1. 對於每一棵決策樹,用OOB 計算袋外數據誤差,記爲 errOOB1;
2. 然後隨機對OOB所有樣本的特徵i加入噪聲干擾,再次計算袋外數據誤差,記爲errOOB2;
3. 假設有N棵樹,特徵i的重要性爲sum(errOOB2-errOOB1)/N;
如果加入隨機噪聲後,袋外數據準確率大幅下降,說明這個特徵對預測結果有很大的影響,進而說明它的重要程度比較高
2. 梯度提升樹(GBDT)
主要是通過計算特徵i在單棵樹中重要度的平均值,計算公式如下:
其中,M是樹的數量。特徵i在單棵樹的重要度主要是通過計算按這個特徵i分裂之後損失的減少值
其中,L是葉子節點的數量,L-1就是非葉子結點的數量。
3. XGboost
XGboost是通過該特徵每棵樹中分裂次數的和去計算的,比如這個特徵在第一棵樹分裂1次,第二棵樹2次……,那麼這個特徵的得分就是(1+2+...)。
--------------------- 作者:phoebe尋常 來源:CSDN 原文:https://blog.csdn.net/u014035615/article/details/79612827?utm_source=copy 版權聲明:本文爲博主原創文章,轉載請附上博文鏈接!