DPExplainableBoostingClassifier#

算法描述链接: DPEBM

class interpret.privacy.DPExplainableBoostingClassifier(feature_names=None, feature_types=None, max_bins=32, exclude=None, validation_size=0, outer_bags=1, learning_rate=0.01, max_rounds=300, max_leaves=3, n_jobs=- 2, random_state=None, epsilon=1.0, delta=1e-05, composition='gdp', bin_budget_frac=0.1, privacy_bounds=None)#

差分隐私可解释增强分类器。

请注意,许多参数的默认值与常规 EBM 不同。

参数:
  • feature_names (list of str, default=None) – 特征名称列表。

  • feature_types (list of FeatureType, default=None) –

    特征类型列表。对于 DP-EBM,feature_types 应该完全指定。如果使用自动检测器,它会检查数据,但不包含在隐私预算中。如果使用自动检测,将发出隐私警告。FeatureType 可以是

    • 'auto':自动检测(不遵守隐私预算!)。

    • 'continuous':使用私有连续分箱。

    • [List of str]:有序类别,其中顺序有意义。例如:["low", "medium", "high"]。使用私有类别分箱。

    • 'nominal':无序类别,其中顺序没有意义。例如:国家名称。使用私有类别分箱。

  • max_bins (int, default=32) – 每个特征的最大分箱数。

  • exclude (list of tuples of feature indices|names, default=None) – 要排除的特征。

  • validation_size (int or float, default=0) –

    验证集大小。如果需要外部袋或误差条,则需要验证集。

    • 整数 (1 <= validation_size):放入验证集的样本数量

    • 百分比 (validation_size < 1.0):放入验证集的数据百分比

    • 0:外部袋没有用处,误差边界将被取消

  • outer_bags (int, default=1) – 外部袋数量。外部袋用于生成误差边界并帮助平滑图表。

  • learning_rate (float, default=0.01) – 增强的学习率。

  • max_rounds (int, default=300) – 总增强轮数,每轮包含 n_terms 增强步骤。

  • max_leaves (int, default=3) – 每棵树允许的最大叶子数。

  • n_jobs (int, default=-2) – 并行运行的作业数。负整数按照 joblib 的公式 (n_cpus + 1 + n_jobs) 解释,就像 scikit-learn 一样。例如:-2 表示使用除了 1 个以外的所有线程。

  • random_state (int or None, default=None) – 随机状态。None 使用 device_random 并生成不可重复的序列。出于隐私考虑,应设置为 'None',但可以设置为整数用于测试和重复性。

  • epsilon (float, default=1.0) – 要花费的总隐私预算。

  • delta (float, default=1e-5) – 差分隐私保证的附加成分。应小于 1/n_training_samples。

  • composition ({'gdp', 'classic'}, default='gdp') – 噪声聚合跟踪方法。

  • bin_budget_frac (float, default=0.1) – 用于私有分箱的总 epsilon 预算百分比。

  • privacy_bounds (Union[np.ndarray, Mapping[Union[int, str], Tuple[float, float]]], default=None) – 指定每个特征的已知最小值/最大值。如果为 None,DP-EBM 将显示警告并使用数据确定这些值。

变量:
  • classes_ (bool, int 或 unicode 数组,形状 (2,)) – 类别标签。DPExplainableBoostingClassifier 仅支持二分类,因此有两个类别。

  • n_features_in_ (int) – 特征数量。

  • feature_names_in_ (List of str) – 解析后的特征名称。名称可以来自 feature_names、X 或自动生成。

  • feature_types_in_ (List of str) – 解析后的特征类型。可以是:‘continuous’(连续型)、‘nominal’(名义型)或 ‘ordinal’(序数型)。

  • bins_ (List[Union[List[Dict[str, int]], List[array of float with shape (n_cuts,)]]]) – 每个特征的分箱定义列表。列表中的每个特征包含分箱分辨率列表。分箱分辨率列表中的第一项用于主效应特征的分箱。如果分箱分辨率列表中有更多项,它们定义了连续级别分辨率的分箱。索引 1 处的项(如果存在)定义了对的分箱。最后的分箱分辨率定义了所有后续交互级别的分箱。如果分箱分辨率列表包含字典,则该特征是‘nominal’(名义型)或‘ordinal’(序数型)类别。如果分箱分辨率列表包含数组,则该特征是‘continuous’(连续型),数组将包含用于将连续值分隔到分箱中的浮点切割点。

  • feature_bounds_ (float 数组,形状 (n_features, 2)) – 每个特征的最小值/最大值边界。feature_bounds_[feature_index, 0] 是该特征的最小值,feature_bounds_[feature_index, 1] 是该特征的最大值。类别特征的最小值和最大值为 NaN。

  • term_features_ (List of tuples of feature indices) – 模型中使用的加性项及其组成特征索引。

  • term_names_ (List of str) – 项名称列表。

  • bin_weights_ (float 数组列表,形状 (n_bins)) – 按项列出的每个项分箱中的总样本权重。

  • bagged_scores_ (float 数组列表,形状 (n_outer_bags, n_bins)) – 按项列出的袋装模型得分。

  • term_scores_ (float 数组列表,形状 (n_bins)) – 按项列出的模型得分。

  • standard_deviations_ (float 数组列表,形状 (n_bins)) – 按项列出的袋装模型得分的标准差。

  • link_ (str) – 用于将预测或目标通过逆链接转换为线性空间加性得分的链接函数。可能的值包括:“monoclassification”, “custom_binary”, “custom_ovr”, “custom_multinomial”, “mlogit”, “vlogit”, “logit”, “probit”, “cloglog”, “loglog”, “cauchit”

  • link_param_ (float) – 链接函数可以使用的浮点值。对于分类,它仅由“custom_classification”使用。

  • bag_weights_ (float 数组,形状 (n_outer_bags,)) – 每个袋中总权重的按袋记录。

  • best_iteration_ (int 数组,形状 (n_stages, n_outer_bags)) – 在每个阶段内执行的增强迭代次数,直到早停或达到 max_rounds。通常,主效应增强迭代次数在 best_iteration_[0] 中。

  • intercept_ (float 数组,形状 (1,)) – 模型的截距。

  • bagged_intercept_ (float 数组,形状 (n_outer_bags,)) – 模型的袋装截距。

  • noise_scale_binning_ (float) – 分箱时的噪声规模。

  • noise_scale_boosting_ (float) – 增强时的噪声规模。

copy()#

创建 EBM 的深拷贝。

返回:

新的拷贝。

decision_function(X, init_score=None)#

在调用链接函数之前,从模型中预测得分。

参数:
  • X – 用于样本的 NumPy 数组。

  • init_score – 可选。可以是能够生成得分的模型,或每个样本的初始化得分。如果是样本得分,其长度应与 X 相同。

返回:

加性项贡献的总和。

eval_terms(X)#

项得分与通过调用 ebm.explain_local(x) 获得的局部解释值相同。

调用 interpret.utils.inv_link(ebm.eval_terms(X).sum(axis=1) + ebm.intercept_, ebm.link_) 等同于对于回归调用 ebm.predict(X),对于分类调用 ebm.predict_proba(X)。

参数:

X – 用于样本的 NumPy 数组。

返回:

每个样本每个项的局部解释得分。

explain_global(name=None)#

提供模型的全局解释。

参数:

name – 用户定义的解释名称。

返回:

一个解释对象,将特征-值对可视化为水平条形图。

explain_local(X, y=None, name=None, init_score=None)#

为提供的样本提供局部解释。

参数:
  • X – 用于解释的 X 的 NumPy 数组。

  • y – 用于解释的 y 的 NumPy 向量。

  • name – 用户定义的解释名称。

  • init_score – 可选。可以是能够生成得分的模型,或每个样本的初始化得分。如果是样本得分,其长度应与 X 相同。

返回:

一个解释对象,将每个样本的特征-值对可视化为水平条形图。

fit(X, y, sample_weight=None, bags=None, init_score=None)#

使用提供的样本拟合模型。

参数:
  • X – 用于训练样本的 NumPy 数组。

  • y – 作为训练标签的 NumPy 数组。

  • sample_weight – 可选的每个样本权重数组。长度应与 X 和 y 相同。

  • bags – 可选的袋定义。第一维长度应等于 outer_bags 数量。第二维长度应等于样本数量。内容中,+1 表示用于训练,-1 表示用于验证,0 表示不包含在袋中。除 1 以外的数字表示将样本包含在训练集或验证集中的次数。

  • init_score – 可选。可以是能够生成得分的模型,或每个样本的初始化得分。如果是样本得分,其长度应与 X 相同。

返回:

模型本身。

monotonize(term, increasing='auto', passthrough=0.0)#

使用等渗回归调整项使其单调。

一个重要的考虑因素是,此函数仅调整单个项,不会修改成对项。当某个特征需要全局单调时,应将包含该特征的任何成对项从模型中排除。

参数:
  • term – 要进行单调调整的项的索引或名称

  • increasing – ‘auto’ 或 布尔值。‘auto’ 根据 Spearman 相关性估计决定方向。

  • passthrough – 单调化过程可能导致模型在训练集上的平均响应发生变化。如果 passthrough 设置为 0.0,则模型在训练集上的平均响应不会改变。如果 passthrough 设置为 1.0,则单调化引起的平均响应变化将完全传递给 self.intercept_。0 到 1 之间的值将按该百分比传递变化。

返回:

模型本身。

predict(X, init_score=None)#

对提供的样本进行预测。

参数:
  • X – 用于样本的 NumPy 数组。

  • init_score – 可选。可以是能够生成得分的模型,或每个样本的初始化得分。如果是样本得分,其长度应与 X 相同。

返回:

每个样本的预测类别标签。

predict_proba(X, init_score=None)#

对提供的样本进行概率估计。

参数:
  • X – 用于样本的 NumPy 数组。

  • init_score – 可选。可以是能够生成得分的模型,或每个样本的初始化得分。如果是样本得分,其长度应与 X 相同。

返回:

每个样本对每个类别的概率估计。

predict_with_uncertainty(X, init_score=None)#

从袋装基础模型获取原始得分和不确定性。通过对所有袋装模型的输出进行平均来生成预测,并使用袋间预测的标准差来估计不确定性。

参数:
  • X – 形状为 (n_samples, n_features) 的 ndarray,用于预测的输入样本。

  • init_score – 可选。可以是能够生成得分的模型,或每个样本的初始化得分。如果是样本得分,其长度应与 X 相同。

返回:

形状为 (n_samples, 2) 的 ndarray

第一列包含平均预测 第二列包含不确定性

remove_features(features)#

从已拟合的 EBM 中移除特征(及其相关组件)。

请注意,这将改变 self 的以下组件的结构(即,通过移除指定的索引):histogram_edges_histogram_weights_unique_val_counts_bins_feature_names_in_feature_types_in_feature_bounds_。此外,任何使用了被删除特征的项也将被删除。调用者传递给 __init__ 函数的以下属性不会被修改:feature_namesfeature_types

参数:

features – 一个列表或可枚举对象,包含要移除的特征名称、索引或指示哪些特征要移除的布尔值。

返回:

模型本身。

remove_terms(terms)#

从已拟合的 EBM 中移除项(及其相关组件)。

请注意,这将改变 self 的以下组件的结构(即,通过移除指定的索引):term_features_term_names_term_scores_bagged_scores_standard_deviations_bin_weights_

参数:

terms – 一个列表(或其他可枚举对象),包含项名称、索引或指示哪些项要移除的布尔值。

返回:

模型本身。

scale(term, factor)#

将单个项的贡献乘以常数因子进行缩放。

例如,您可以通过将其对应的权重设置为零来抵消特定项的贡献;这将导致相关的全局解释(例如变量重要性)也为零。有几点值得注意:1) 此方法不影响已拟合的截距,用户必须直接更改该属性(如果需要);2) 重新加权特定项贡献也将以类似方式重新加权其相关组件(例如,变量重要性得分、标准差等)。

参数:
  • term – 要缩放的项的索引或名称。

  • factor – 缩放项的量。

返回:

模型本身。

score(X, y, sample_weight=None)#

返回给定测试数据和标签的平均准确率。

在多标签分类中,这是子集准确率,这是一个严格的指标,因为它要求每个样本的每个标签集都被正确预测。

参数:
  • X (array-like of shape (n_samples, n_features)) – 测试样本。

  • y (array-like of shape (n_samples,) or (n_samples, n_outputs)) – X 的真实标签。

  • sample_weight (array-like of shape (n_samples,), default=None) – 样本权重。

返回:

scoreself.predict(X) 相对于 y 的平均准确率。

返回类型:

float

sweep(terms=True, bins=True, features=False)#

从已拟合的 EBM 中清除未使用的元素。

参数:
  • terms – 布尔值,指示是否应从模型中清除不影响输出的归零项。

  • bins – 布尔值,指示是否应从模型中清除不影响输出的未使用的分箱级别。

  • features – 布尔值,指示是否应从模型中清除在任何项中未使用因此不影响输出的特征。

返回:

模型本身。

term_importances(importance_type='avg_weight')#

提供项的重要性。

参数:

importance_type – 请求的项重要性类型(‘avg_weight’,‘min_max’)

返回:

一个项重要性数组,每个加性项有一个重要性值

to_json(file, detail='all', indent=2)#

将模型导出为 JSON 文本文件。

参数:
  • file – 一个路径类对象(str 或 os.PathLike),或一个实现了 .write() 方法的文件类对象。

  • detail – ‘minimal’、‘interpretable’、‘mergeable’、‘all’

  • indent – 如果 indent 是一个非负整数或字符串,则 JSON 数组元素和对象成员将以该缩进级别进行美化打印。缩进级别为 0、负数或空字符串 (“”) 将仅插入换行符。None (默认值) 选择最紧凑的表示形式。使用正整数 indent 将每级缩进这么多空格。如果 indent 是一个字符串(例如 “t”),则该字符串用于缩进每个级别。

to_jsonable(detail='all')#

将模型转换为可转换为 JSON 的表示形式。

参数:

detail – ‘minimal’、‘interpretable’、‘mergeable’、‘all’

返回:

可转换为 JSON 的对象