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]

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

User Guide 中阅读更多内容。

参数:
estimatorobject

一个已经 拟合 且与 scorer 兼容的估计器。

Xndarray 或 DataFrame, shape (n_samples, n_features)

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

yarray-like or None, shape (n_samples, ) or (n_samples, n_classes)

用于监督学习的目标值,或用于无监督学习的 None

scoringstr, callable, list, tuple, or dict, default=None

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

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

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

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

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

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

n_repeatsint, default=5

对一个特征进行置换的次数。

n_jobsint or None, default=None

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

random_stateint, RandomState instance, default=None

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

sample_weightshape 为 (n_samples,) 的 array-like, default=None

评分时使用的样本权重。

0.24 版本新增。

max_samplesint or float, default=1.0

在每次重复中从 X 抽取样本以计算特征重要性的数量(不替换)。

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

  • 如果是浮点数,则抽取 max_samples * X.shape[0] 个样本。

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

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

1.0 版本新增。

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

Dictionary-like object, with the following attributes.

importances_meanndarray of shape (n_features, )

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

importances_stdndarray of shape (n_features, )

n_repeats 次重复中的标准差。

importancesndarray of shape (n_features, n_repeats)

原始置换重要性分数。

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

References

示例

>>> 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.       ])