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)[源码]#

用于特征评估的排列重要性 [BRE]

estimator(估计器)必须是一个已拟合的估计器。X 可以是用于训练估计器的数据集,也可以是留出集。特征的排列重要性计算方法如下:首先,在由 X 定义的(可能是不同的)数据集上评估由 scoring 定义的基准指标。接着,将验证集中的某一特征列进行排列(打乱),并再次评估指标。排列重要性定义为基准指标与打乱特征列后的指标之间的差值。

用户指南 中了解更多信息。

参数:
estimatorobject

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

Xndarray 或 DataFrame,形状 (n_samples, n_features)

用于计算排列重要性的数据。

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

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

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

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

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

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

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

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

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

n_repeatsint,默认=5

排列特征的次数。

n_jobsint or None, default=None

并行运行的作业数量。计算过程是通过为每个特征列计算排列分数并在各列之间并行化完成的。None 表示 1(除非在 joblib.parallel_backend 上下文中)。-1 表示使用所有处理器。详情请参阅 术语表

random_stateint, RandomState instance, default=None

用于控制每个特征排列的伪随机数生成器。传入 int 以在函数调用间获得可重现的结果。参见 术语表

sample_weightshape 为 (n_samples,) 的 array-like, default=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 或此类实例的字典

Dictionary-like object, with the following attributes.

importances_mean形状为 (n_features, ) 的 ndarray

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

importances_std形状为 (n_features, ) 的 ndarray

n_repeats 次重复中的标准差。

importances形状为 (n_features, n_repeats) 的 ndarray

原始的排列重要性得分。

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