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_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)#
返回给定测试数据和标签的平均准确率。
在多标签分类中,这是子集准确率,这是一个严格的指标,因为它要求每个样本的每个标签集都被正确预测。
- 参数:
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) – 样本权重。
- 返回:
score –
self.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 的对象