特征重要性置换检验#
- 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定义的(可能不同的)数据集上进行评估。接下来,对验证集中的一个特征列进行置换,并再次评估该指标。置换重要性定义为基线指标与特征列置换后的指标之间的差值。- 更多信息请阅读用户指南。 - 参数:
- estimator对象
- Xndarray 或 DataFrame,形状 (n_samples, n_features)
- 计算置换重要性的数据。 
- y数组型或 None,形状 (n_samples, ) 或 (n_samples, n_classes)
- 监督学习的目标变量,或无监督学习的 - None。
- scoringstr,可调用对象,列表,元组或字典,默认为 None
- 要使用的评分器。如果 - scoring代表单个分数,可以使用:- 单个字符串(参见评分参数:定义模型评估规则); 
- 返回单个值的可调用对象(参见可调用评分器)。 
 - 如果 - scoring代表多个分数,可以使用:- 唯一字符串的列表或元组; 
- 返回字典的可调用对象,其中键是指标名称,值是指标分数; 
- 字典,键是指标名称,值是可调用对象。 
 - 将多个分数传递给 - scoring比为每个分数调用- permutation_importance更高效,因为它重用预测以避免冗余计算。- 如果为 None,则使用估计器的默认评分器。 
- n_repeatsint,默认为 5
- 对特征进行置换的次数。 
- n_jobsint 或 None,默认为 None
- 并行运行的作业数。计算通过为每列计算置换分数并对列进行并行化来完成。 - None表示 1,除非在- joblib.parallel_backend上下文中。- -1表示使用所有处理器。更多详细信息,请参见词汇表。
- random_stateint,RandomState 实例,默认为 None
- 伪随机数生成器,用于控制每个特征的置换。传递一个整数以在函数调用之间获得可重复的结果。参见词汇表。 
- sample_weight形状为 (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 版本中添加。 
 
- 返回:
- resultBunch或此类实例的字典
- 类似字典的对象,具有以下属性。 - importances_mean形状为 (n_features, ) 的 ndarray
- 特征重要性在 - n_repeats上的平均值。
- importances_std形状为 (n_features, ) 的 ndarray
- 在 - n_repeats上的标准差。
- importances形状为 (n_features, n_repeats) 的 ndarray
- 原始置换重要性分数。 
 - 如果评分参数中有多个评分指标,则 - 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. ]) 
 
     
 
 
 
