特征重要性排序--Permutation Importance

特征重要性排序–Permutation Importance

参考:Permutation Importance | Kaggle

相比于其他衡量特征重要性的方法,Permutation Importance的优点:

  • 计算量低
  • 广泛使用和容易理解
  • 与我们要测量特征重要性的属性一致

Permutation Importance的计算是在模型训练完成后进行的,即,模型参数不再改变。如果我们将验证集中的单独一列的数据进行打乱,并保持其他列和目标值不变,那么,预测打乱后的验证集的结果会怎么变化?
在这里插入图片描述

上图示例是将第二列的数据进行shaffle,如果模型预测对该列特征的依赖性很大,那么打乱后,预测精度会受到很大的影响。

具体实施流程:

  1. 训练模型
  2. 打乱其中一列的数据,用该数据集进行预测,评估预测精度下降来提现该特征变量的重要性
  3. 将验证数据集还原,并重复第二步,分析其他特征变量

代码示例:

import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier

data = pd.read_csv('../input/fifa-2018-match-statistics/FIFA 2018 Statistics.csv')
y = (data['Man of the Match'] == "Yes")  # Convert from string "Yes"/"No" to binary
feature_names = [i for i in data.columns if data[i].dtype in [np.int64]]
X = data[feature_names]
train_X, val_X, train_y, val_y = train_test_split(X, y, random_state=1)
my_model = RandomForestClassifier(n_estimators=100,
                                  random_state=0).fit(train_X, train_y)

import eli5
from eli5.sklearn import PermutationImportance

perm = PermutationImportance(my_model, random_state=1).fit(val_X, val_y)
eli5.show_weights(perm, feature_names = val_X.columns.tolist())

在这里插入图片描述

像大部分数据科学中的结果一样,当打乱单个列的时候的结果变化会存在一定随机性,我们通过重复这个过程多次打乱来测量permutation importance计算的随机性大小。

我们通过重复这个过程多次打乱来测量permutation importance计算的随机性大小。

经常会遇到一些负的值,在这种情形下,在打乱(噪声)数据上的预测会得到比真实数据更高精度的结果,该特征的重要性接近于0,但存在一定的机会导致在打乱数据上的预测会更精确。这种情形一般更容易发生在小数据集,因为会有更大几率好运。

### 机器学习中的特征重要性排序方法 在机器学习领域,特征选择是一个重要的预处理步骤,它能够帮助提高模型性能并减少过拟合的风险。对于特征重要性排序而言,存在多种有效的方法。 #### 使用随机森林评估特征重要性 一种常用的技术是利用随机森林来估计各个输入变量的重要性。该方法基于决策树集合的思想,在构建每棵树的过程中统计各属性分裂节点所带来的纯度增益总和作为其权重指标[^2]。具体来说: - **概念**:随机森林由多个决策树组成,这些树通过对数据集的不同子样本训练而成。 - **特性**:由于采用了Bagging机制(自助法重采样),使得单棵树木间的差异增大从而增强了整体稳定性;同时具备天然支持多分类任务的优势。 - **实现细节**: - 构建足够数量的基础分类器; - 对于每一个基分类器,记录下用于划分内部结点的最佳分割条件所涉及的那个维度及其带来的信息熵减小程度; - 将上述数值累加求平均即得出了相应字段在整个集成结构里发挥的作用大小。 ```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) # 训练模型 rfc.fit(X, y) # 获取特征重要性分数 feature_importances = rfc.feature_importances_ # 绘制柱状图展示结果 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)), indices) plt.show() ``` 此段代码展示了如何使用Python库`sklearn`快速搭建起一个简单的随机森林,并提取出其中蕴含的关于各个因素影响力的信息。最终以图形化的方式直观呈现出来便于观察比较。 #### Permutation Importance 方法介绍 另一种流行的方案叫做置换重要性(Permutation Importance),它的核心思路是在保持目标响应不变的情况下打乱某个特定列的数据分布再重新做预测,进而考察这样做之后误差变化情况的程度有多大。如果某项属性被打乱后导致泛化能力显著下降,则说明它是较为关键的因素之一[^3]。 这种方法具有如下几个优点: - 不依赖任何假设前提; - 能够很好地捕捉非线性和交互效应的影响关系; - 易于解释且计算成本较低廉。 综上所述,无论是采用随机森林还是置换检验都可以有效地完成对给定数据集中各项要素相对价值高低顺序排列的任务。实际应用时可根据具体情况灵活选用合适策略组合起来综合考量更为理想。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值