Notes—Random Forest-feature importance随机森林对特征排序

本文介绍了随机森林中评估特征重要性的两种方法:Mean Decrease Impurity(MDI)和Mean Decrease Accuracy(MDA)。MDI通过计算每个特征对袋外数据误差的影响来衡量重要性,而MDA则是通过扰动特征值观察对预测准确性的影响。在sklearn中,MDI得到实现,而MDA未直接提供。在Spark的ml.classification.RandomForestClassificationModel中,可以通过featureImportances获取特征重要性。

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

……未完待补充……
ref:http://blog.datadive.net/selecting-good-features-part-iii-random-forests/

two methods:
1.Mean decrease impurity
大概是对于每颗树,按照impurity(gini /entropy /information gain)给特征排序,然后整个森林取平均

2.Mean decrease accuracy
大概就是measure一下对每个特征加躁,看对结果的准确率的影响。影响小说明这个特征不重要,反之重要
具体步骤如下:
在随机森林中某个特征X的重要性的计算方法如下:
1:对于随机森林中的每一颗决策树,使用相应的OOB(袋外数据)数据来计算它的袋外数据误差,记为errOOB1.
2: 随机地对袋外数据OOB所有样本的特征X加入噪声干扰(就可以随机的改变样本在特征X处的值),再次计算它的袋外数据误差,记为errOOB2.
3:假设随机森林中有Ntree棵树,那么对于特征X的重要性=∑(errOOB2-errOOB1)/Ntree,之所以可以用这个表达式来作为相应特征的重要性的度量值是因为:若给某个特征随机加入噪声之后,袋外的准确率大幅度降低,则说明这个特征对于样本的分类结果影响很大,也就是说它的重要程度比较高。
ref:https://www.cnblogs.com/justcxtoworld/p/3447231.html

### 随机森林特征重要性计算方法 随机森林是一种基于决策树集成的学习算法,其核心优势之一在于能够评估特征的重要性。这种评估对于特征选择以及深入理解数据集的内在结构具有重要意义。具体而言,随机森林通过计算每个特征在整个森林中所有树的信息增益来衡量该特征的重要程度[^1]。 #### 方法实现 在随机森林中,特征重要性的计算通常采用两种主要策略: 1. **基尼不纯度减少法 (Gini Impurity Reduction)** 这种方法利用每棵树节点分裂时所使用的特征及其对应的基尼指数变化量来进行统计。每次分割都会带来一定的信息增益(即基尼不纯度的降低),这些增益会被累积并最终取平均值作为某个特征的整体重要性得分。 2. **排列重要性 (Permutation Importance)** 排列重要性则是在模型已经训练完成的基础上重新打乱单个特征的值,观察这样做对预测误差的影响大小。如果某特征被打乱后显著增加了测试错误率,则说明这个特征非常重要;反之亦然。这种方法虽然更耗时但也更加通用,因为它独立于具体的损失函数定义之外。 以下是使用Python中的`scikit-learn`库实现上述第一种方法的具体代码示例: ```python from sklearn.datasets import load_iris from sklearn.ensemble import RandomForestClassifier import numpy as np import matplotlib.pyplot as plt # 加载样本数据集 data = load_iris() X, y = data.data, data.target # 训练随机森林分类器 rfc = RandomForestClassifier(n_estimators=100, random_state=42) rfc.fit(X, y) # 获取特征重要性分数 feature_importances = rfc.feature_importances_ # 打印结果并与原始特征名称对应起来 for name, importance in zip(data.feature_names, feature_importances): print(f"{name}: {importance}") # 可视化展示 indices = np.argsort(feature_importances)[::-1] plt.figure(figsize=(8, 6)) plt.title("Feature Importances") plt.bar(range(len(indices)), feature_importances[indices], align="center", color='b') plt.xticks(range(len(indices)), [data.feature_names[i] for i in indices]) plt.show() ``` 此脚本展示了如何加载Iris数据集、构建随机森林模型,并提取和可视化各个输入变量相对于目标标签的关键贡献比例。 值得注意的是,在其他梯度提升框架比如LightGBM里也有类似的特性评价机制,不过它们可能采用了不同的内部逻辑去量化所谓的“重要性”,例如基于权重(weight)或者收益(gain),其中官方文档建议优先考虑weight模式下的指标解释力更强一些[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值