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://w

### 使用Python对随机森林模型特征重要性进行排序 在Python中,可以利用`scikit-learn`库中的`RandomForestClassifier`或`RandomForestRegressor`类构建随机森林模型,并通过访问`.feature_importances_`属性获得各个特征的重要性得分。这些得分反映了各特征对于决策树分裂过程的影响程度。 为了更直观地理解和解释模型行为,通常会按照特征的重要性的降序排列并可视化展示。下面是一个完整的流程示例: #### 构建和训练随机森林模型 ```python from sklearn.datasets import load_wine from sklearn.model_selection import train_test_split from sklearn.ensemble import RandomForestClassifier # 加载数据集 data = load_wine() X, y = data.data, data.target # 划分训练集与测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42) # 定义随机森林分类器 model = RandomForestClassifier(n_estimators=50, random_state=42) model.fit(X_train, y_train) # 训练模型 ``` #### 提取特征重要性和排序 一旦模型训练完成,就可以提取特征重要性分数并对它们进行排序: ```python import pandas as pd # 获取特征名称列表 features = data.feature_names # 将特征名与其对应的重要性组合成DataFrame importance_df = pd.DataFrame({ 'Feature': features, 'Importance': model.feature_importances_ }) # 按照重要性降序排序 sorted_importance_df = importance_df.sort_values(by='Importance', ascending=False).reset_index(drop=True) print(sorted_importance_df) ``` 上述代码片段展示了如何创建一个包含特征及其相应重要性的表格,并对其进行排序以便于查看最重要的几个特征[^1]。 #### 可视化特征重要性 除了打印出排序后的特征外,还可以绘制条形图来更好地展现这一关系: ```python import matplotlib.pyplot as plt import seaborn as sns plt.figure(figsize=(10,7)) sns.barplot(x="Importance", y="Feature", data=sorted_importance_df) plt.title('Feature Importance from Random Forest') plt.show() ``` 此部分代码使用Seaborn库生成了一个水平条形图,其中横轴代表特征的重要性,纵轴则列出了不同特征的名字。这种图形化的表达方式有助于快速识别哪些因素最能影响最终的结果预测[^2]。 此外,如果希望进一步探索特征之间相互作用的效果或者评估单个样本上特定特征的变化所带来的差异,则可以考虑采用置换重要度(permutation importance)[^3] 或者SHAP值等高级技术来进行更加细致入微的分析。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值