DP可解释增强回归器#

链接到算法描述:DPEBM

class interpret.privacy.DPExplainableBoostingRegressor(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=- 1, random_state=None, epsilon=1.0, delta=1e-05, composition='gdp', bin_budget_frac=0.1, privacy_bounds=None, privacy_target_min=None, privacy_target_max=None)#

差分隐私可解释增强回归器。

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

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

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

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

    • ’auto’: 自动检测(不尊重隐私预算!)。

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

    • [List of str]: 有序分类,其中顺序有意义。例如:[“低”,“中”,“高”]。使用私有分类分箱。

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

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

  • exclude (特征索引的元组列表|名称, 默认=None) – 需要排除的特征。

  • validation_size (intfloat, 默认=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=-1) – 并行运行的作业数。负整数按照joblib的公式解释(n_cpus + 1 + n_jobs),就像scikit-learn一样。例如:-2表示使用除1个线程外的所有线程。

  • random_state (intNone, 默认=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会显示警告并使用数据来确定这些值。

  • privacy_target_min (float, default=None) – 已知的目标最小值。'y' 值将被裁剪到此最小值。 如果为 None,DP-EBM 会显示警告并使用数据来确定此值。

  • privacy_target_max (float, default=None) – 已知的目标最大值。'y' 值将被裁剪到此最大值。 如果为 None,DP-EBM 会显示警告并使用数据来确定此值。

Variables:
  • 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处的项(如果存在)定义了对的分箱。最后一个分箱分辨率定义了所有连续交互级别的分箱。如果分箱分辨率列表包含字典,则该特征是“名义”或“有序”分类。如果分箱分辨率列表包含数组,则该特征是“连续”的,数组将包含将连续值分隔为箱的浮点切割点。

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

  • term_features_ (特征索引的元组列表) – 模型中使用的加法项及其组成特征索引。

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

  • bin_weights_ (形状为 (n_bins) 的浮点数数组列表) – 每个项的箱中总样本权重的每项列表。

  • bagged_scores_ (形状为 (n_outer_bags, n_bins) 的浮点数数组列表) – 每个项的袋装模型分数列表。

  • term_scores_ (形状为 (n_bins) 的浮点数数组列表) – 模型得分的每项列表。

  • standard_deviations_ (形状为 (n_bins) 的浮点数数组列表) – 每个项的袋装模型得分的标准差列表。

  • link_ (str) – 用于将预测或目标转换为线性空间加性分数的链接函数,反之亦然通过逆链接。可能的取值包括: “custom_regression”, “power”, “identity”, “log”, “inverse”, “inverse_square”, “sqrt”

  • link_param_ (float) – 浮点值,可以被链接函数使用。主要用途是用于幂链接。

  • bag_weights_ (形状为 (n_outer_bags,) 的浮点数数组) – 每个袋子中总重量的记录。

  • best_iteration_ (形状为 (n_stages, n_outer_bags) 的整数数组) – 在每个阶段内执行的提升迭代次数,直到达到早停或最大轮数。 通常,主效应提升迭代的次数将在 best_iteration_[0] 中。

  • intercept_ (float) – 模型的截距。

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

  • min_target_ (float) – 在‘y’中找到的最小值,如果提供了privacy_target_min,则使用该值。

  • max_target_ (float) – 在'y'中找到的最大值,如果提供了privacy_target_max,则使用该值。

  • noise_scale_binning_ (float) – 分箱过程中的噪声尺度。

  • noise_scale_boosting_ (float) – 提升过程中的噪声尺度。

copy()#

对EBM进行深度复制。

Returns:

新的副本。

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) 进行分类。

Parameters:

X – 样本的NumPy数组。

Returns:

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

explain_global(name=None)#

为模型提供全局解释。

Parameters:

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

Returns:

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

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

为提供的样本提供本地解释。

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

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

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

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

Returns:

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

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

将模型拟合到提供的样本。

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

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

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

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

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

Returns:

它本身。

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

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

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

Parameters:
  • term – 要单调化的项的索引或名称

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

  • passthrough – 单调化过程可能会导致模型平均响应的变化。如果 passthrough 设置为 0.0,则模型对训练集的平均响应将不会改变。如果 passthrough 设置为 1.0,则单调化对平均响应的任何变化都将传递到 self.intercept_。0 到 1 之间的值将导致该百分比被传递。

Returns:

它本身。

predict(X, init_score=None)#

对提供的样本进行预测。

Parameters:
  • X – 样本的NumPy数组。

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

Returns:

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

predict_with_uncertainty(X, init_score=None)#

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

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

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

Returns:

形状为 (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

Parameters:

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

Returns:

它本身。

remove_terms(terms)#

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

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

Parameters:

terms – 术语名称、索引或布尔值的列表(或其他可枚举对象)。

Returns:

它本身。

scale(term, factor)#

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

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

Parameters:
  • term – 要缩放的术语索引或术语名称。

  • factor – 缩放项的比例。

Returns:

它本身。

score(X, y, sample_weight=None)#

返回预测的确定系数。

决定系数 \(R^2\) 定义为 \((1 - \frac{u}{v})\),其中 \(u\) 是残差 平方和 ((y_true - y_pred)** 2).sum(),而 \(v\) 是总平方和 ((y_true - y_true.mean()) ** 2).sum()。 最佳可能得分为1.0,且可能为负(因为 模型可能任意更差)。一个总是预测 y 的期望值而不考虑输入特征的常数模型,将获得 \(R^2\) 得分为0.0。

Parameters:
  • X (形状为 (n_samples, n_features) 的数组类) – 测试样本。对于某些估计器,这可能是预计算的内核矩阵或形状为 (n_samples, n_samples_fitted) 的通用对象列表,其中 n_samples_fitted 是用于估计器拟合的样本数量。

  • y (形状为 (n_samples,) 或 (n_samples, n_outputs) 的数组类) – X 的真实值。

  • sample_weight (形状为 (n_samples,)的类数组, 默认=None) – 样本权重。

Returns:

score\(R^2\)self.predict(X) 相对于 y

Return type:

浮点数

注释

在回归器上调用score时使用的\(R^2\)分数从0.23版本开始使用multioutput='uniform_average',以保持与r2_score()的默认值一致。这影响了所有多输出回归器的score方法(除了MultiOutputRegressor)。

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

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

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

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

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

Returns:

它本身。

term_importances(importance_type='avg_weight')#

提供术语的重要性。

Parameters:

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

Returns:

一个数组,包含每个加性项的重要性

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

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

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

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

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

to_jsonable(detail='all')#

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

Parameters:

详情 – ‘minimal’, ‘interpretable’, ‘mergeable’, ‘all’

Returns:

可JSON化的对象