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