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
- 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表示一个单一分数,可以使用str: 有关选项,请参阅 String name scorers。
callable: 带有签名
scorer(estimator, X, y)的可调用评分器对象(例如函数)。有关详细信息,请参阅 Callable scorers。None:使用estimator的 默认评估标准。
如果
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.0或X.shape[0],将使用所有样本。
虽然使用此选项可能会提供不太准确的重要性估计,但在大型数据集上评估特征重要性时,它可以使该方法易于处理。结合
n_repeats,这允许控制此方法的计算速度与统计精度之间的权衡。1.0 版本新增。
- 返回:
- result
Bunch或此类实例的字典 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对象。
- result
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. ])