permutation_importance#

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 定义的(可能不同的)数据集上,评估由 评分 定义的基线指标。接下来,验证集中的一个特征列被置换,并再次评估该指标。置换重要性被定义为基线指标与置换特征列后指标之间的差异。

用户指南中阅读更多内容。

参数:
estimatorobject

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

Xndarray 或 DataFrame, 形状 (n_samples, n_features)

用于计算置换重要性的数据。

yarray-like 或 None, 形状 (n_samples, ) 或 (n_samples, n_classes)

有监督学习的目标,或无监督学习的 None

scoringstr, callable, list, tuple, 或 dict, 默认为 None

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

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

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

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

  • 一个以指标名称为键,可调用对象为值的字典。

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

n_repeatsint, 默认为 5

置换特征的次数。

n_jobsint 或 None, 默认为 None

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

random_stateint, RandomState 实例, 默认为 None

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

sample_weightarray-like of shape (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 或此类实例的 dict

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

importances_meanndarray of shape (n_features, )

n_repeats 次重复中特征重要性的平均值。

importances_stdndarray of shape (n_features, )

n_repeats 次重复中的标准差。

importancesndarray of shape (n_features, n_repeats)

原始置换重要性分数。

如果在评分参数中有多个评分指标,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.       ])