特征重要性置换检验#

sklearn.inspection.permutation_importance(estimator, X, y, *, scoring=None, n_repeats=5, n_jobs=None, random_state=None, sample_weight=None, max_samples=1.0)[source]#

用于特征评估的置换重要性 [BRE]

需要使用已拟合的估计器X 可以是用于训练估计器的训练数据集,也可以是留出的数据集。 特征的置换重要性计算如下:首先,根据评分定义的基线指标在X定义的(可能不同的)数据集上进行评估。接下来,对验证集中的一个特征列进行置换,并再次评估该指标。置换重要性定义为基线指标与特征列置换后的指标之间的差值。

更多信息请阅读用户指南

参数:
estimator对象

一个已经拟合并与评分器兼容的估计器。

Xndarray 或 DataFrame,形状 (n_samples, n_features)

计算置换重要性的数据。

y数组型或 None,形状 (n_samples, ) 或 (n_samples, n_classes)

监督学习的目标变量,或无监督学习的None

scoringstr,可调用对象,列表,元组或字典,默认为 None

要使用的评分器。如果scoring代表单个分数,可以使用:

如果scoring代表多个分数,可以使用:

  • 唯一字符串的列表或元组;

  • 返回字典的可调用对象,其中键是指标名称,值是指标分数;

  • 字典,键是指标名称,值是可调用对象。

将多个分数传递给scoring 比为每个分数调用permutation_importance 更高效,因为它重用预测以避免冗余计算。

如果为 None,则使用估计器的默认评分器。

n_repeatsint,默认为 5

对特征进行置换的次数。

n_jobsint 或 None,默认为 None

并行运行的作业数。计算通过为每列计算置换分数并对列进行并行化来完成。None 表示 1,除非在joblib.parallel_backend 上下文中。-1 表示使用所有处理器。更多详细信息,请参见词汇表

random_stateint,RandomState 实例,默认为 None

伪随机数生成器,用于控制每个特征的置换。传递一个整数以在函数调用之间获得可重复的结果。参见词汇表

sample_weight形状为 (n_samples,) 的数组型,默认为 None

评分中使用的样本权重。

在 0.24 版本中添加。

max_samplesint 或 float,默认为 1.0

每次重复从 X 中抽取的样本数以计算特征重要性(无放回抽样)。

  • 如果为 int,则抽取max_samples个样本。

  • 如果为 float,则抽取max_samples * X.shape[0]个样本。

  • 如果max_samples等于1.0X.shape[0],则将使用所有样本。

虽然使用此选项可能会提供不太准确的重要性估计,但在评估大型数据集上的特征重要性时,它可以使该方法易于处理。结合n_repeats,这允许控制该方法的计算速度与统计精度之间的权衡。

在 1.0 版本中添加。

返回:
resultBunch 或此类实例的字典

类似字典的对象,具有以下属性。

importances_mean形状为 (n_features, ) 的 ndarray

特征重要性在n_repeats上的平均值。

importances_std形状为 (n_features, ) 的 ndarray

n_repeats上的标准差。

importances形状为 (n_features, n_repeats) 的 ndarray

原始置换重要性分数。

如果评分参数中有多个评分指标,则result是一个字典,键为评分器名称(例如“roc_auc”),值为如上所示的Bunch对象。

参考文献

示例

>>> from sklearn.linear_model import LogisticRegression
>>> from sklearn.inspection import permutation_importance
>>> X = [[1, 9, 9],[1, 9, 9],[1, 9, 9],
...      [0, 9, 9],[0, 9, 9],[0, 9, 9]]
>>> y = [1, 1, 1, 0, 0, 0]
>>> clf = LogisticRegression().fit(X, y)
>>> result = permutation_importance(clf, X, y, n_repeats=10,
...                                 random_state=0)
>>> result.importances_mean
array([0.4666..., 0.       , 0.       ])
>>> result.importances_std
array([0.2211..., 0.       , 0.       ])