RF、GBDT、XGboost特征选择重要性计算 或 如何做特征选择的?

RF、GBDT、XGboost可用于特征选择,属于嵌入式方法,在sklearn中可用feature_importances_查看特征重要度。文章分别介绍了三者计算特征重要度的方法,随机森林用袋外数据做预测评估,GBDT计算特征在单棵树中重要度的平均值,XGboost通过特征在每棵树中分裂次数的和计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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寻常 
来源:优快云 
原文:https://blog.youkuaiyun.com/u014035615/article/details/79612827 
版权声明:本文为博主原创文章,转载请附上博文链接!

### 特征重要性排序中的具体公式 在机器学习领域,特征重要性用于衡量各个输入特征对模型预测结果的影响程度。不同的算法有不同的计算方式,以下是几种常见的特征重要性计算公式的详细介绍。 #### XGBoost 的特征重要性公式 XGBoost 提供了内置的特征重要性计算功能,主要依据分裂增益(Gain)、覆盖度(Cover)和频率(Frequency)。其中最常用的指标是 **分裂增益**,它表示某个特征被用来分割数据时带来的目标函数减少量之和[^1]。 对于第 \(i\) 个特征的重要性分数可以定义为: \[ I_i = \sum_{t=1}^{T} Gain(t), \quad \text{if feature } t = i, \] 其中 \(T\) 是树的数量,\(Gain(t)\) 表示某次分裂所带来的增益值。 #### GBDT 的特征重要性公式 GBDT 中的特征重要性通常基于每棵树中该特征参与分裂次数及其贡献大小来计算。假设一棵决策树中有多个节点进行了分裂操作,则每个节点上的分裂都会带来一定的损失下降值(Loss Reduction),记作 \(L_j\)。整个模型中某一特征的重要度可以用如下公式表达: \[ FI_k = \frac{\sum_{j=1}^J L_j}{\sum_{l=1}^K (\sum_{j=1}^J L_j)}, \] 这里 \(k\) 表示当前考虑的具体特征编号;\(J\) 和 \(K\) 则分别代表单棵子树内的所有可能分支总数目以及整体集合里的全部独立维度数量[^3]。 #### 随机森林的特征重要性公式 随机森林采用基尼系数变化率者信息熵差额的方式来量化各因素的作用效果。如果聚焦于回归任务的话,则会更多关注平均绝对偏差缩减情况。设原始样本集的标准误为 Std(Y),而经过移除掉特定变量后的残余部分的新标准误会变成 Std'(Y|X_m),那么这个差异就可以作为评判准则之一: \[ ImpurityDecrease(m) = Std(Y) - E[Std'(Y|X_m)]. \] 另外还有一种替代方案叫“排列测试法”,即人为打乱某些列向量内部顺序后再重新执行一遍完整的流程并观察最终得分的变化幅度,以此间接反映它们各自的实际意义所在[^5]。 ```python from sklearn.datasets import load_boston from sklearn.model_selection import train_test_split from sklearn.ensemble import RandomForestRegressor import numpy as np # 加载波士顿房价数据集 data = load_boston() X, y = data.data, data.target X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2) rf = RandomForestRegressor(random_state=42) rf.fit(X_train, y_train) # 输出特征重要性 print(rf.feature_importances_) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值