基于直方图梯度提升分类器 (HistGradientBoostingClassifier)#

class sklearn.ensemble.HistGradientBoostingClassifier(loss='log_loss', *, learning_rate=0.1, max_iter=100, max_leaf_nodes=31, max_depth=None, min_samples_leaf=20, l2_regularization=0.0, max_features=1.0, max_bins=255, categorical_features='from_dtype', monotonic_cst=None, interaction_cst=None, warm_start=False, early_stopping='auto', scoring='loss', validation_fraction=0.1, n_iter_no_change=10, tol=1e-07, verbose=0, random_state=None, class_weight=None)[source]#

基于直方图的梯度提升分类树。

对于大型数据集 (n_samples >= 10 000),此估计器比GradientBoostingClassifier 快得多。

此估计器原生支持缺失值 (NaN)。在训练过程中,树增长器在每个分割点学习具有缺失值的样本应该进入左子树还是右子树,这基于潜在的增益。预测时,具有缺失值的样本将相应地分配到左子树或右子树。如果在训练期间未遇到给定特征的任何缺失值,则将具有缺失值的样本映射到样本最多的子树。

此实现的灵感来自LightGBM

用户指南中了解更多信息。

在 0.21 版本中添加。

参数:
loss{‘log_loss’}, default=’log_loss’

在提升过程中使用的损失函数。

对于二元分类问题,'log_loss' 也称为逻辑损失、二项式偏差或二元交叉熵。在内部,模型每次提升迭代都拟合一棵树,并使用逻辑 sigmoid 函数 (expit) 作为逆链接函数来计算预测的正类概率。

对于多类分类问题,'log_loss' 也称为多项式偏差或分类交叉熵。在内部,模型每次提升迭代和每个类别都拟合一棵树,并使用 softmax 函数作为逆链接函数来计算类别的预测概率。

learning_ratefloat, default=0.1

学习率,也称为*收缩率*。这用作叶值的多重因子。使用1表示无收缩。

max_iterint, default=100

提升过程的最大迭代次数,即二元分类的最大树木数量。对于多类分类,每次迭代都会构建n_classes棵树。

max_leaf_nodesint 或 None, default=31

每棵树的最大叶节点数。必须严格大于 1。如果为 None,则没有最大限制。

max_depthint 或 None, default=None

每棵树的最大深度。树的深度是从根到最深叶的边数。默认情况下,深度不受约束。

min_samples_leafint, default=20

每个叶的最小样本数。对于样本数少于几百的小型数据集,建议降低此值,因为只会构建非常浅的树。

l2_regularizationfloat, default=0

惩罚具有小 Hessian 值的叶节点的 L2 正则化参数。使用0表示无正则化(默认值)。

max_featuresfloat, default=1.0

每个节点分割中随机选择的特征比例。这是一种正则化形式,较小的值使树成为较弱的学习器,并可能防止过度拟合。如果存在来自interaction_cst的交互约束,则只考虑允许的特征进行子采样。

在 1.4 版本中添加。

max_binsint,默认值=255

用于非缺失值的bin的最大数量。在训练之前,输入数组X的每个特征都被分箱到整数值bin中,这使得训练阶段速度更快。具有少量唯一值的特征可能使用少于max_bins个bin。除了max_bins个bin之外,始终为缺失值保留一个bin。必须不大于255。

categorical_features形状为(n_features)或(n_categorical_features,)的{bool, int, str}类数组,默认值=None

指示分类特征。

  • None:不会将任何特征视为分类特征。

  • 布尔型数组:指示分类特征的布尔掩码。

  • 整型数组:指示分类特征的整数索引。

  • 字符串型数组:分类特征的名称(假设训练数据具有特征名称)。

  • "from_dtype":数据类型为“category”的数据框列被认为是分类特征。为了使用此功能,输入必须是公开__dataframe__方法的对象,例如pandas或polars DataFrame。

对于每个分类特征,最多必须有max_bins个唯一类别。编码为数值类型的分类特征的负值被视为缺失值。所有分类值都被转换为浮点数。这意味着1.0和1的分类值被视为同一类别。

用户指南中了解更多信息。

在0.24版本中添加。

1.2版本中的更改:添加了对特征名称的支持。

1.4版本中的更改:添加了"from_dtype"选项。

monotonic_cst形状为(n_features)的int类数组或字典,默认值=None

使用以下整数值指定要对每个特征强制执行的单调约束

  • 1:单调递增

  • 0:无约束

  • -1:单调递减

如果是一个带有字符串键的字典,则按名称将特征映射到单调约束。如果是一个数组,则按位置将特征映射到约束。有关使用方法示例,请参见使用特征名称指定单调约束

这些约束仅对二元分类有效,并且适用于正类的概率。在用户指南中了解更多信息。

在0.23版本中添加。

1.2版本中的更改:接受具有特征名称作为键的约束字典。

interaction_cst{"pairwise", "no_interactions"}或整数列表/元组/集合序列,默认值=None

指定交互约束,即可以在子节点分割中相互交互的特征集。

每个项目指定允许相互交互的一组特征索引。如果特征数量超过这些约束中指定的数量,则将其视为额外集合。

字符串“pairwise”和“no_interactions”分别是允许仅成对交互或不允许交互的简写。

例如,总共有5个特征时,interaction_cst=[{0, 1}]等效于interaction_cst=[{0, 1}, {2, 3, 4}],并指定树的每个分支要么只分割特征0和1,要么只分割特征2、3和4。

在1.2版本中添加。

warm_startbool,默认值=False

设置为True时,重用先前fit调用的解决方案,并向集成中添加更多估计器。为了使结果有效,应仅在相同数据上重新训练估计器。参见词汇表

early_stopping‘auto’ 或 bool,默认值=‘auto’

如果为“auto”,则如果样本大小大于10000,则启用提前停止。如果为True,则启用提前停止,否则禁用提前停止。

在0.23版本中添加。

scoringstr 或 callable 或 None,默认值='loss'

用于提前停止的评分参数。它可以是单个字符串(参见评分参数:定义模型评估规则)或可调用对象(参见可调用评分器)。如果为None,则使用估计器的默认评分器。如果scoring='loss',则根据损失值检查提前停止。仅在执行提前停止时使用。

validation_fractionint 或 float 或 None,默认值=0.1

将训练数据的一部分(或绝对大小)留作验证数据以进行提前停止的比例(或绝对大小)。如果为None,则在训练数据上进行提前停止。仅在执行提前停止时使用。

n_iter_no_changeint,默认值=10

用于确定何时“提前停止”。当最后n_iter_no_change个分数中没有一个比倒数第n_iter_no_change - 1个更好时(在一定的容差范围内),拟合过程就会停止。仅在执行提前停止时使用。

tolfloat,默认值=1e-7

比较分数时使用的绝对容差。容差越高,越有可能提前停止:更高的容差意味着后续迭代将更难以被认为是对参考分数的改进。

verboseint,默认值=0

详细程度级别。如果不为零,则打印有关拟合过程的一些信息。1只打印摘要信息,2打印每次迭代的信息。

random_stateint,RandomState 实例或 None,默认值=None

伪随机数生成器,用于控制分箱过程中的子采样,以及如果启用提前停止则控制训练/验证数据的分割。传递一个整数以在多次函数调用中获得可重现的输出。参见词汇表

class_weightdict 或 ‘balanced’,默认值=None

与类关联的权重,形式为{class_label: weight}。如果没有给出,则所有类都应该具有权重为1。“balanced”模式使用y的值来自动调整权重,使其与输入数据中类频率成反比,如n_samples / (n_classes * np.bincount(y))。请注意,如果指定了sample_weight,则这些权重将与sample_weight(通过fit方法传递)相乘。

在1.2版本中添加。

属性:
classes_数组,形状=(n_classes,)

类标签。

do_early_stopping_bool

指示在训练期间是否使用提前停止。

n_iter_int

提升过程的迭代次数。

n_trees_per_iteration_int

每次迭代构建的树的数量。对于二元分类,此值等于 1;对于多类分类,此值等于 n_classes

train_score_ndarray,shape (n_iter_+1,)

每次迭代在训练数据上的得分。第一个条目是第一次迭代之前集成模型的得分。得分根据 scoring 参数计算。如果 scoring 不是 'loss',则得分是在最多 10000 个样本的子集上计算的。如果没有提前停止,则为空。

validation_score_ndarray,shape (n_iter_+1,)

每次迭代在保留的验证数据上的得分。第一个条目是第一次迭代之前集成模型的得分。得分根据 scoring 参数计算。如果没有提前停止或 validation_fraction 为 None,则为空。

is_categorical_ndarray,shape (n_features, ) 或 None

类别特征的布尔掩码。None 表示没有类别特征。

n_features_in_int

拟合 期间看到的特征数量。

在0.24版本中添加。

feature_names_in_ndarray,shape (n_features_in_,)

拟合 期间看到的特征名称。仅当 X 的特征名称全部为字符串时才定义。

版本 1.0 中添加。

另请参见

GradientBoostingClassifier

精确的梯度提升方法,在样本数量较大的数据集上不能很好地扩展。

sklearn.tree.DecisionTreeClassifier

决策树分类器。

RandomForestClassifier

元估计器,它在数据集的各种子样本上拟合多个决策树分类器,并使用平均值来提高预测精度并控制过拟合。

AdaBoostClassifier

元估计器,它首先在原始数据集上拟合一个分类器,然后在相同的数据集上拟合分类器的附加副本,其中错误分类实例的权重被调整,以便后续的分类器更关注困难的案例。

示例

>>> from sklearn.ensemble import HistGradientBoostingClassifier
>>> from sklearn.datasets import load_iris
>>> X, y = load_iris(return_X_y=True)
>>> clf = HistGradientBoostingClassifier().fit(X, y)
>>> clf.score(X, y)
1.0
decision_function(X)[source]#

计算 X 的决策函数。

参数:
X类数组,shape (n_samples, n_features)

输入样本。

返回:
decisionndarray,shape (n_samples,) 或 (n_samples, n_trees_per_iteration)

每个样本的原始预测值(即树叶的总和)。在多类分类中,n_trees_per_iteration 等于类的数量。

fit(X, y, sample_weight=None)[source]#

拟合梯度提升模型。

参数:
X类数组,shape (n_samples, n_features)

输入样本。

y类数组,shape (n_samples,)

目标值。

sample_weight类数组,shape (n_samples,),默认为 None

训练数据的权重。

在0.23版本中添加。

返回:
self对象

已拟合的估计器。

get_metadata_routing()[source]#

获取此对象的元数据路由。

请查看 用户指南,了解路由机制的工作原理。

返回:
routingMetadataRequest

一个 MetadataRequest 封装路由信息。

get_params(deep=True)[source]#

获取此估计器的参数。

参数:
deepbool,默认为 True

如果为 True,则将返回此估计器和包含的作为估计器的子对象的参数。

返回:
paramsdict

参数名称与其值的映射。

property n_iter_#

提升过程的迭代次数。

predict(X)[source]#

预测 X 的类别。

参数:
X类数组,shape (n_samples, n_features)

输入样本。

返回:
yndarray,shape (n_samples,)

预测的类别。

predict_proba(X)[source]#

预测 X 的类别概率。

参数:
X类数组,shape (n_samples, n_features)

输入样本。

返回:
pndarray,shape (n_samples, n_classes)

输入样本的类别概率。

score(X, y, sample_weight=None)[source]#

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

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

参数:
X类数组,shape (n_samples, n_features)

测试样本。

y类数组,shape (n_samples,) 或 (n_samples, n_outputs)

X 的真实标签。

sample_weightarray-like,形状为 (n_samples,),默认为 None

样本权重。

返回:
score浮点数

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

set_fit_request(*, sample_weight: bool | None | str = '$UNCHANGED$') HistGradientBoostingClassifier[source]#

请求传递给 fit 方法的元数据。

请注意,只有在 enable_metadata_routing=True 时(参见 sklearn.set_config)此方法才相关。请参阅 用户指南,了解路由机制的工作原理。

每个参数的选项:

  • True:请求元数据,如果提供则传递给 fit。如果未提供元数据,则忽略请求。

  • False:不请求元数据,元估计器不会将其传递给 fit

  • None:不请求元数据,如果用户提供元数据,元估计器将引发错误。

  • str:元数据应使用此给定的别名而不是原始名称传递给元估计器。

默认值(sklearn.utils.metadata_routing.UNCHANGED)保留现有的请求。这允许您更改某些参数的请求,而其他参数则不变。

版本 1.3 中新增。

注意

只有当此估计器用作元估计器的子估计器时(例如,在 Pipeline 中使用)此方法才相关。否则,它无效。

参数:
sample_weightstr, True, False 或 None,默认为 sklearn.utils.metadata_routing.UNCHANGED

fit 方法中 sample_weight 参数的元数据路由。

返回:
self对象

更新后的对象。

set_params(**params)[source]#

设置此估计器的参数。

此方法适用于简单的估计器以及嵌套对象(例如 Pipeline)。后者具有 <component>__<parameter> 形式的参数,因此可以更新嵌套对象的每个组件。

参数:
**params字典

估计器参数。

返回:
self估计器实例

估计器实例。

set_score_request(*, sample_weight: bool | None | str = '$UNCHANGED$') HistGradientBoostingClassifier[source]#

请求传递给 score 方法的元数据。

请注意,只有在 enable_metadata_routing=True 时(参见 sklearn.set_config)此方法才相关。请参阅 用户指南,了解路由机制的工作原理。

每个参数的选项:

  • True:请求元数据,如果提供则传递给 score。如果未提供元数据,则忽略请求。

  • False:不请求元数据,元估计器不会将其传递给 score

  • None:不请求元数据,如果用户提供元数据,元估计器将引发错误。

  • str:元数据应使用此给定的别名而不是原始名称传递给元估计器。

默认值(sklearn.utils.metadata_routing.UNCHANGED)保留现有的请求。这允许您更改某些参数的请求,而其他参数则不变。

版本 1.3 中新增。

注意

只有当此估计器用作元估计器的子估计器时(例如,在 Pipeline 中使用)此方法才相关。否则,它无效。

参数:
sample_weightstr, True, False 或 None,默认为 sklearn.utils.metadata_routing.UNCHANGED

score 方法中 sample_weight 参数的元数据路由。

返回:
self对象

更新后的对象。

staged_decision_function(X)[source]#

计算每次迭代的 X 的判别函数。

此方法允许在每个阶段之后进行监控(即确定测试集上的误差)。

参数:
X类数组,shape (n_samples, n_features)

输入样本。

生成:
decision形状为 (n_samples,) 或 (n_samples, n_trees_per_iteration) 的 ndarray 生成器

输入样本的判别函数,对应于从集成树预测的原始值。类对应于属性 classes_ 中的类。

staged_predict(X)[source]#

每次迭代的预测类别。

此方法允许在每个阶段之后进行监控(即确定测试集上的误差)。

在0.24版本中添加。

参数:
X类数组,shape (n_samples, n_features)

输入样本。

生成:
yshape 为 (n_samples,) 的 ndarray 生成器

每次迭代输入样本的预测类别。

staged_predict_proba(X)[source]#

每次迭代的预测类别概率。

此方法允许在每个阶段之后进行监控(即确定测试集上的误差)。

参数:
X类数组,shape (n_samples, n_features)

输入样本。

生成:
yshape 为 (n_samples,) 的 ndarray 生成器

每次迭代输入样本的预测类别概率。