TabularPredictor.feature_importance

TabularPredictor.feature_importance(data=None, model: str = None, features: list = None, feature_stage: str = 'original', subsample_size: int = 5000, time_limit: float = None, num_shuffle_sets: int = None, include_confidence_band: bool = True, confidence_level: float = 0.99, silent: bool = False)[source]

通过排列重要性计算给定模型的特征重要性分数。有关排列重要性的解释,请参阅https://explained.ai/rf-importance/。 特征的重要性分数表示当模型对数据的扰动副本进行预测时,性能下降的程度,其中该特征的值在行之间随机打乱。 特征得分为0.01表示当特征被随机打乱时,预测性能下降了0.01。 特征得分越高,对模型性能的影响越大。 如果特征的得分为负,这意味着该特征可能对最终模型有害,并且预计在移除该特征后训练的模型将获得更好的预测性能。 请注意,计算特征重要性可能是一个非常耗费计算资源的过程,特别是如果模型使用数百或数千个特征。在许多情况下,这可能比原始模型训练花费更长的时间。 要估计feature_importance(model, data, features)所需的时间,大致是predict_proba(data, model)所花费的时间乘以特征数量。

注意:为了获得高度准确的重要性估计和p值估计,建议尽可能将subsample_size设置为至少5000,并将num_shuffle_sets设置为至少10。

Parameters:
  • data (str 或 pd.DataFrame (可选)) –

    此数据还必须包含与fit()期间指定的列名相同的标签列。 如果指定,则使用该数据来计算特征重要性分数。 如果传递了str,data将使用str值作为文件路径加载。 如果未指定,则在cache_data=True时将使用fit()期间使用的原始数据。否则,将引发异常。 不要通过此参数传递训练数据,因为由于过拟合,计算出的特征重要性分数会有偏差。

    fit()期间保留的新数据中将获得更准确的特征重要性。

  • model (str, default = None) – 用于获取特征重要性的模型,如果为None,则选择最佳模型。 有效的模型可以通过调用predictor.model_names()在此predictor中列出。

  • features (list, default = None) –

    用于计算并返回特征重要性的字符串特征名称列表,指定为None以获取所有特征重要性。 如果您只想计算某些特征的重要性,可以将它们的名称作为字符串列表传递。 有效的特征名称会根据feature_stage而变化。

    要获取feature_stage=’original’的特征名称列表,请调用predictor.feature_metadata_in.get_features()。 要获取feature_stage=’transformed’的特征名称列表,请调用list(predictor.transform_features().columns)。 要获取feature_stage=`transformed_model的特征名称列表,请调用list(predictor.transform_features(model={model_name}).columns)

    [高级] 也可以包含形式为(feature_name, feature_list)的元组作为元素。

    feature_name可以是任何字符串,只要它与列表中所有其他特征名称/特征唯一。 feature_list可以是数据中任何有效特征的列表。 这将计算feature_list中特征组合的重要性,并在返回的DataFrame中将这组特征命名为feature_name。 这种重要性将与将feature_list中每个特征的单独重要性相加不同,并且更准确地反映整个组的重要性。 示例:[‘featA’, ‘featB’, ‘featC’, (‘featBC’, [‘featB’, ‘featC’])] 在此示例中,‘featBC’的重要性将通过将‘featB’和‘featC’联合置换来计算,就好像它们是一个单一的两维特征。

  • feature_stage (str, default = 'original') –

    应该为哪个特征处理阶段计算重要性。 选项:

    ’original’:

    计算原始特征的重要性。 警告:data 必须指定此选项,否则将引发异常。

    ’transformed’:

    计算内部转换后特征的重要性(在自动特征工程之后)。这些特征可能缺少一些原始特征,或者完全添加了新特征。 新特征的一个例子是从文本列生成的 ngram 特征。 警告:对于 bagged 模型,当 data=None 时,此选项尚不支持特征重要性计算。这样做将引发异常。

    ’transformed_model’:

    计算模型转换后特征的重要性。这些特征是请求模型使用的内部特征。它们可能与原始特征有很大不同。 如果模型是堆叠集成,这将包括堆叠集成特征,例如堆叠集成的基础(祖先)模型的预测概率特征。

  • subsample_size (int, default = 5000) – 从data中采样用于计算特征重要性的行数。 如果subsample_size=Nonedata包含的行数少于subsample_size,则在计算过程中将使用所有行。 较大的值会增加特征重要性分数的准确性。 运行时间与subsample_size线性增长。

  • time_limit (float, default = None) – 以秒为单位的时间限制,用于限制特征重要性的计算。 如果为None,特征重要性将在没有提前停止的情况下计算。 至少会评估一个完整的洗牌集。如果洗牌集评估所需的时间超过time_limit,则无论time_limit如何,该方法都将返回洗牌集评估所需的时间长度。

  • num_shuffle_sets (int, default = None) – 评估数据的不同排列组合的数量。 较大的值将提高重要性评估的质量。 通常建议在增加num_shuffle_sets之前增加subsample_size。 如果time_limit为None,则默认为5;如果指定了time_limit,则默认为10。 运行时间与num_shuffle_sets线性增长。

  • include_confidence_band (bool, default = True) – 如果为True,返回的DataFrame将包括两列额外的列,用于指定每个特征的真实重要性值的置信区间。 增加subsample_sizenum_shuffle_sets将缩小置信区间。

  • confidence_level (float, default = 0.99) – 此参数仅在 include_confidence_band 为 True 时考虑,可用于指定用于构建置信区间的置信水平。 例如,如果 confidence_level 设置为 0.99,则返回的 DataFrame 将包括列 'p99_high' 和 'p99_low',这表示真实特征重要性将在 99% 的时间内(99% 置信区间)位于 'p99_high' 和 'p99_low' 之间。 更一般地,如果 confidence_level = 0.XX,则包含 XX% 置信区间的列将命名为 'pXX_high' 和 'pXX_low'。

  • silent (bool, default = False) – 是否抑制日志输出。

Returns:

index: 特征名称。 ‘importance’: 估计的特征重要性分数。 ‘stddev’: 特征重要性分数的标准差。如果为NaN,则表示没有使用足够的num_shuffle_sets来计算方差。 ‘p_value’: 对零假设进行统计t检验的P值:重要性 = 0,与(单侧)替代假设:重要性 > 0。

具有低p值的特征对预测器来说显然是有用的,而其他特征可能对预测器无用(甚至在其训练数据中包含这些特征可能有害)。 p值为0.01表示有1%的几率该特征是无用或有害的,有99%的几率该特征是有用的。 p值为0.99表示有99%的几率该特征是无用或有害的,有1%的几率该特征是有用的。

’n’: 用于估计重要性分数的混洗次数(对应于用于确定真实分数的置信区间的样本大小)。 ‘pXX_high’: 真实特征重要性分数的XX%置信区间的上限(默认情况下XX=99)。 ‘pXX_low’: 真实特征重要性分数的XX%置信区间的下限。

Return type:

pd.DataFrame 包含6列的特征重要性分数