特徵選擇 GBDT 特徵重要度

2021-07-31 23:33:36 字數 2260 閱讀 9740

整合學習因具有**精度高的優勢而受到廣泛關注,尤其是使用決策樹作為基學習器的整合學習演算法。樹的整合演算法的著名**有隨機森林和gbdt。隨機森林具有很好的抵抗過擬合的特性,並且引數(決策樹的個數)對**效能的影響較小,調參比較容易,一般設定乙個比較大的數。gbdt具有很優美的理論基礎,一般而言效能更有優勢。

基於樹的整合演算法還有乙個很好的特性,就是模型訓練結束後可以輸出模型所使用的特徵的相對重要度,便於我們選擇特徵,理解哪些因素是對**有關鍵影響,這在某些領域(如生物資訊學、神經系統科學等)特別重要。本文主要介紹基於樹的整合演算法如何計算各特徵的相對重要度。

friedman在gbm的**中提出的方法:特徵j

[math processing error]的全域性重要度通過特徵j

[math processing error]在單顆樹中的重要度的平均值來衡量:  j

2j^=

1m∑m

=1mj

2j^(

tm)

[math processing error]

其中,m是樹的數量。特徵j

[math processing error]

在單顆樹中的重要度的如下: j2

j^(t

)=∑t

=1l−

1i2t

^1(v

t=j)

[math processing error]

其中,l

[math processing error]

為樹的葉子節點數量,l−

1 [math processing error]

即為樹的非葉子節點數量(構建的樹都是具有左右孩子的二叉樹),vt

[math processing error]

是和節點t

[math processing error]

相關聯的特徵,i2

t^[math processing error]

是節點t

[math processing error]

**之後平方損失的減少值。

為了更好的理解特徵重要度的計算方法,下面給出scikit-learn工具包中的實現,**移除了一些不相關的部分。

下面的**來自於gradientboostingclassifier物件的feature_importances屬性的計算方法:

def

feature_importances_

(self):

total_sum = np.zeros((self.n_features, ), dtype=np.float64)

for tree in self.estimators_:

total_sum += tree.feature_importances_

importances = total_sum / len(self.estimators_)

return importances

其中,self.estimators_是演算法構建出的決策樹的陣列,tree.feature_importances_ 是單棵樹的特徵重要度向量,其計算方法如下:

cpdef compute_feature_importances(self, normalize=true):

"""computes the importance of each feature (aka variable)."""

while node != end_node:

if node.left_child != _tree_leaf:

# ... and node.right_child != _tree_leaf:

left = &nodes[node.left_child]

right = &nodes[node.right_child]

importance_data[node.feature] += (

node.weighted_n_node_samples * node.impurity -

left.weighted_n_node_samples * left.impurity -

right.weighted_n_node_samples * right.impurity)

node += 1

importances /= nodes[0].weighted_n_node_samples

return importances

上面的**經過了簡化,保留了核心思想。計算所有的非葉子節點在**時加權不純度的減少,減少得越多說明特徵越重要。

GBDT如何選擇特徵

gbdt選擇特徵其實就是cart tree的生成過程。gbdt的弱分類器預設選擇的是cart tree。其實也可以選擇其他弱分類器的,選擇的前提是低方差和高偏差。假設我們目前總共有 m 個特徵。第一步我們需要從中選擇出乙個特徵 j,做為二叉樹的第乙個節點。然後對特徵 j 的值選擇乙個切分點 m.乙個...

RandomForest特徵重要度問題

在構建隨機森林的過程中,每一顆樹所使用的資料不同,這使得每一顆樹上的特徵重要性表現的都不同。所以要評估每個特徵在每棵樹上的重要度來作為特徵選擇的依據。隨機森林衡量特徵重要度的方法主要有兩種,分別是gini係數,和袋外誤差率。隨機森林的不純度常用gini entropy information gai...

特徵選擇 單變數特徵選擇

1.selectkbest可以依據相關性對特徵進行選擇,保留k個評分最高的特徵。方差分析 分類問題使用f classif,回歸問題使用f regression。f classif 分類任務 跟目標的分類,將樣本劃分成n個子集,s1,s2,sn,我們希望每個子集的均值 1,2,n不相等。我們假設h0 ...