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