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=- 2, 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)#
差分隐私可解释增强回归器。
请注意,许多参数的默认值与常规 EBM 不同。
- 参数:
feature_names (str 列表, 默认值=None) – 特征名称列表。
feature_types (FeatureType 列表, 默认值=None) –
特征类型列表。对于 DP-EBM,应完全指定 feature_types。如果使用自动检测器,它会检查数据,并且不包含在隐私预算中。如果使用自动检测,将发出隐私警告。FeatureType 可以是
’auto’:自动检测(不尊重隐私预算!)。
’continuous’:使用私有连续分箱。
[str 列表]:顺序分类,其中顺序有意义。例如:[“low”, “medium”, “high”]。使用私有分类分箱。
’nominal’:分类,其中顺序无意义。例如:国家名称。使用私有分类分箱。
max_bins (int, 默认值=32) – 每个特征的最大分箱数。
exclude (特征索引|名称 元组列表, 默认值=None) – 要排除的特征。
validation_size (int 或 float, 默认值=0) –
验证集大小。如果需要外部 bag 或误差条,则需要验证集。
整数 (1 <= validation_size):放入验证集的样本计数
百分比 (validation_size < 1.0):放入验证集的数据百分比
0:外部 bag 无效,误差范围将被消除
outer_bags (int, 默认值=1) – 外部 bag 的数量。外部 bag 用于生成误差范围并帮助平滑图表。
learning_rate (float, 默认值=0.01) – 增强(boosting)的学习率。
max_rounds (int, 默认值=300) – 增强的总轮数,每轮有 n_terms 增强步。
max_leaves (int, 默认值=3) – 每棵树允许的最大叶子数。
n_jobs (int, 默认值=-2) – 并行运行的作业数。负整数按照 joblib 的公式 (n_cpus + 1 + n_jobs) 解释,就像 scikit-learn 一样。例如:-2 表示使用除 1 个线程之外的所有线程。
random_state (int 或 None, 默认值=None) – 随机状态。None 使用 device_random 并生成不可重复的序列。为了隐私应设置为 ‘None’,但可以设置为整数以进行测试和重复性。
epsilon (float, 默认值=1.0) – 要花费的总隐私预算。
delta (float, 默认值=1e-5) – 差分隐私保证的加性分量。应小于 1/n_training_samples。
composition ({'gdp', 'classic'}, 默认值='gdp') – 跟踪噪声聚合的方法。
bin_budget_frac (float, 默认值=0.1) – 用于私有分箱的总 epsilon 预算的百分比。
privacy_bounds (Union[np.ndarray, Mapping[Union[int, str], Tuple[float, float]]], 默认值=None) – 指定每个特征的已知最小值/最大值。如果为 None,DP-EBM 会显示警告并使用数据确定这些值。
privacy_target_min (float, 默认值=None) – 已知目标最小值。‘y’ 值将被剪切到此最小值。如果为 None,DP-EBM 会显示警告并使用数据确定此值。
privacy_target_max (float, 默认值=None) – 已知目标最大值。‘y’ 值将被剪切到此最大值。如果为 None,DP-EBM 会显示警告并使用数据确定此值。
- 变量:
n_features_in_ (int) – 特征数量。
feature_names_in_ (str 列表) – 已解析的特征名称。名称可以来自 feature_names、X 或自动生成。
feature_types_in_ (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_ (形状为
(n_features, 2)
的浮点数组) – 每个特征的最小值/最大值边界。feature_bounds_[feature_index, 0] 是特征的最小值,feature_bounds_[feature_index, 1] 是特征的最大值。分类特征的最小值和最大值为 NaN。term_features_ (特征索引元组列表) – 模型中使用的加性项及其组成的特征索引。
term_names_ (str 列表) – 项名称列表。
bin_weights_ (形状为
(n_bins)
的浮点数组列表) – 每个项在其分箱中的总样本权重列表。bagged_scores_ (形状为
(n_outer_bags, n_bins)
的浮点数组列表) – 每个项的 bagged 模型得分列表。term_scores_ (形状为
(n_bins)
的浮点数组列表) – 每个项的模型得分列表。standard_deviations_ (形状为
(n_bins)
的浮点数组列表) – 每个项的 bagged 模型得分的标准差列表。link_ (str) – 用于将预测或目标转换为线性空间加性得分,并通过反向链接进行逆转换的链接函数。可能的值包括:“custom_regression”、“power”、“identity”、“log”、“inverse”、“inverse_square”、“sqrt”。
link_param_ (float) – 可由链接函数使用的浮点值。主要用于 power 链接。
bag_weights_ (形状为
(n_outer_bags,)
的浮点数组) – 每个 bag 中总权重的每 bag 记录。best_iteration_ (形状为
(n_stages, n_outer_bags)
的 int 数组) – 在每个阶段执行的增强迭代次数,直到早停或达到 max_rounds。通常,主效应增强迭代的计数将位于 best_iteration_[0] 中。intercept_ (float) – 模型的截距。
bagged_intercept_ (形状为
(n_outer_bags,)
的浮点数组) – 模型的 bagged 截距。min_target_ (float) – 在 ‘y’ 中找到的最小值,如果提供了 privacy_target_min,则为该值。
max_target_ (float) – 在 ‘y’ 中找到的最大值,如果提供了 privacy_target_max,则为该值。
noise_scale_binning_ (float) – 分箱期间的噪声尺度。
noise_scale_boosting_ (float) – 增强期间的噪声尺度。
- copy()#
对 EBM 进行深度复制。
- 返回:
新的副本。
- 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 – 可选的 bag 定义。第一维长度应等于 outer_bags 的数量。第二维长度应等于样本数量。内容应为训练集 +1,验证集 -1,不包含在 bag 中则为 0。非 1 的数字表示在训练集或验证集中包含样本的次数。
init_score – 可选。可以是能生成分数的模型,也可以是每个样本的初始化分数。如果是样本分数,其长度应与 X 相同。
- 返回:
模型本身。
- monotonize(term, increasing='auto', passthrough=0.0)#
使用保序回归调整项使其单调。
一个重要的考虑因素是,此函数仅调整单个项,并且不会修改成对项。当需要全局单调的特征时,应将包含该特征的任何成对项从模型中排除。
- 参数:
term – 要进行单调化的项的索引或名称
increasing – ‘auto’ 或 bool。‘auto’ 根据 Spearman 相关性估计决定方向。
passthrough – 单调化过程可能导致模型对训练集的平均响应发生变化。如果 passthrough 设置为 0.0,则模型对训练集的平均响应不会改变。如果 passthrough 设置为 1.0,则单调化对平均响应进行的任何更改都将传递给 self.intercept_。0 到 1 之间的值将导致该百分比被传递。
- 返回:
模型本身。
- predict(X, init_score=None)#
对提供的样本进行预测。
- 参数:
X – 样本的 NumPy 数组。
init_score – 可选。可以是能生成分数的模型,也可以是每个样本的初始化分数。如果是样本分数,其长度应与 X 相同。
- 返回:
每个样本的预测值。
- predict_with_uncertainty(X, init_score=None)#
从 bagged 基模型获取原始得分和不确定性。通过对所有 bagged 模型的输出进行平均来生成预测,并使用跨 bag 预测的标准差来估计不确定性。
- 参数:
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_names
和feature_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)#
返回预测的决定系数。
决定系数 \(R^2\) 定义为 \((1 - \frac{u}{v})\),其中 \(u\) 是残差平方和
((y_true - y_pred)** 2).sum()
,而 \(v\) 是总平方和((y_true - y_true.mean()) ** 2).sum()
。最佳可能得分为 1.0,它也可能为负(因为模型可能任意糟糕)。一个总是预测 y 期望值而忽略输入特征的常数模型将获得 0.0 的 \(R^2\) 分数。- 参数:
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) – 样本权重。
- 返回:
score –
self.predict(X)
相对于 y 的 \(R^2\) 分数。- 返回类型:
float
注意
在对回归器调用
score
时使用的 \(R^2\) 分数从版本 0.23 开始使用multioutput='uniform_average'
,以与r2_score()
的默认值保持一致。这会影响所有多输出回归器的score
方法(MultiOutputRegressor
除外)。
- 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 是字符串(例如“t”),则该字符串用于缩进每个级别。
- to_jsonable(detail='all')#
将模型转换为可 JSON 化表示。
- 参数:
detail – ‘minimal’(最小)、‘interpretable’(可解释)、‘mergeable’(可合并)、‘all’(全部)。
- 返回:
可 JSON 化对象