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’},默认值='log_loss'

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

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

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

learning_rate浮点型,默认值=0.1

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

max_iter整型,默认值=100

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

max_leaf_nodes整型或None,默认值=31

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

max_depth整型或None,默认值=None

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

min_samples_leaf整型,默认值=20

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

l2_regularization浮点型,默认值=0

L2 正则化参数,用于惩罚海森矩阵较小的叶子。使用0表示无正则化(默认)。

max_features浮点型,默认值=1.0

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

1.4 版本新增。

max_bins整型,默认值=255

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

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

指示类别特征。

  • None : 没有特征会被视为类别型。

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

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

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

  • "from_dtype": dtype 为“category”的数据框列被认为是类别特征。输入必须是暴露 __dataframe__ 方法的对象,例如 pandas 或 polars DataFrames 才能使用此功能。

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

更多信息请参阅用户指南

0.24 版本新增。

1.2 版本变更: 增加了对特征名称的支持。

1.4 版本变更: 增加了"from_dtype"选项。

1.6 版本变更: 默认值从None变为"from_dtype"

monotonic_cst形状为 (n_features) 或字典的整型类数组,默认值=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上进行分裂。

有关如何使用interaction_cst,请参阅此示例

1.2 版本新增。

warm_start布尔型,默认值=False

设置为True时,重用上一次调用fit的结果,并向集成模型添加更多估计器。为使结果有效,估计器应仅在相同数据上重新训练。请参阅术语表

early_stopping‘auto’ 或 布尔型,默认值='auto'

如果为‘auto’,当样本量大于10000,或X_valy_val传递给fit时,启用提前停止。如果为True,则启用提前停止,否则禁用。

0.23 版本新增。

scoring字符串或可调用对象或None,默认值='loss'

用于提前停止的评分方法。仅当启用early_stopping时使用。选项:

  • 字符串: 有关选项,请参阅字符串名称评分器

  • 可调用对象: 带有签名 scorer(estimator, X, y) 的评分器可调用对象(例如,函数)。有关详细信息,请参阅可调用评分器

  • None: 使用准确率

  • ‘loss’: 提前停止根据损失值进行检查。

validation_fraction整型或浮点型或None,默认值=0.1

为提前停止而留作验证数据的训练数据比例(或绝对大小)。如果为None,则在训练数据上执行提前停止。如果未执行提前停止(例如,early_stopping=False),或者如果X_valy_val传递给fit方法,则此值被忽略。

n_iter_no_change整型,默认值=10

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

tol浮点型,默认值=1e-7

比较得分时使用的绝对容差。容差越高,提前停止的可能性越大:更高的容差意味着后续迭代更难被视为对参考得分的改进。

verbose整型,默认值=0

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

random_state整型、RandomState实例或None,默认值=None

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

class_weight字典或‘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_布尔型

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

n_iter_整型

提升过程的迭代次数。

n_trees_per_iteration_整型

每次迭代构建的树的数量。二元分类为1,多类别分类为n_classes

train_score_ndarray,形状 (n_iter_+1,)

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

validation_score_ndarray,形状 (n_iter_+1,)

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

is_categorical_ndarray,形状 (n_features, ) 或 None

类别特征的布尔掩码。如果没有类别特征,则为None

n_features_in_整型

fit期间看到的特征数量。

0.24 版本新增。

feature_names_in_形状为 (n_features_in_,) 的ndarray

fit期间看到的特征名称。仅当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类数组,形状 (n_samples, n_features)

输入样本。

返回:
decisionndarray,形状 (n_samples,) 或 (n_samples, n_trees_per_iteration)

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

fit(X, y, sample_weight=None, *, X_val=None, y_val=None, sample_weight_val=None)[source]#

拟合梯度提升模型。

参数:
X形状为 (n_samples, n_features) 的类数组

输入样本。

y形状为 (n_samples,) 的类数组

目标值。

sample_weight形状为 (n_samples,) 的类数组,默认值=None

训练数据的权重。

0.23 版本新增。

X_val形状为 (n_val, n_features) 的类数组

用于提前停止的额外验证特征样本。在Pipeline中,X_val可以使用Pipeline(..., transform_input=["X_val"])X以相同方式进行转换。

1.7 版本新增。

y_val形状为 (n_samples,) 的类数组

用于提前停止的额外验证目标值样本。

1.7 版本新增。

sample_weight_val形状为 (n_samples,) 的类数组,默认值=None

用于提前停止的额外验证权重。

1.7 版本新增。

返回:
self对象

已拟合的估计器。

get_metadata_routing()[source]#

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

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

返回:
routingMetadataRequest

一个封装了路由信息的MetadataRequest

get_params(deep=True)[source]#

获取此估计器的参数。

参数:
deep布尔型,默认值=True

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

返回:
params字典

参数名称及其对应的值。

predict(X)[source]#

预测X的类别。

参数:
X类数组,形状 (n_samples, n_features)

输入样本。

返回:
yndarray,形状 (n_samples,)

预测的类别。

predict_proba(X)[source]#

预测X的类别概率。

参数:
X类数组,形状 (n_samples, n_features)

输入样本。

返回:
pndarray,形状 (n_samples, n_classes)

输入样本的类别概率。

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

返回在提供的数据和标签上的准确率

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

参数:
X形状为 (n_samples, n_features) 的类数组

测试样本。

y形状为 (n_samples,) 或 (n_samples, n_outputs) 的类数组

X的真实标签。

sample_weight形状为 (n_samples,) 的类数组,默认值=None

样本权重。

返回:
score浮点型

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

set_fit_request(*, X_val: bool | None | str = '$UNCHANGED$', sample_weight: bool | None | str = '$UNCHANGED$', sample_weight_val: bool | None | str = '$UNCHANGED$', y_val: 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内部使用)的子估计器时才相关。否则它没有效果。

参数:
X_val字符串、True、False 或 None,默认值=sklearn.utils.metadata_routing.UNCHANGED

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

sample_weight字符串、True、False 或 None,默认值=sklearn.utils.metadata_routing.UNCHANGED

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

sample_weight_val字符串、True、False 或 None,默认值=sklearn.utils.metadata_routing.UNCHANGED

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

y_val字符串、True、False 或 None,默认值=sklearn.utils.metadata_routing.UNCHANGED

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

返回:
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_weight字符串、True、False 或 None,默认值=sklearn.utils.metadata_routing.UNCHANGED

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

返回:
self对象

更新后的对象。

staged_decision_function(X)[source]#

计算每次迭代X的决策函数。

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

参数:
X形状为 (n_samples, n_features) 的类数组

输入样本。

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

输入样本的决策函数,对应于集成模型中树的原始预测值。类别与属性classes_中的类别一致。

staged_predict(X)[source]#

预测每次迭代的类别。

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

0.24 版本新增。

参数:
X形状为 (n_samples, n_features) 的类数组

输入样本。

生成:
y形状为 (n_samples,) 的ndarray生成器

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

staged_predict_proba(X)[source]#

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

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

参数:
X形状为 (n_samples, n_features) 的类数组

输入样本。

生成:
y形状为 (n_samples,) 的ndarray生成器

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