HistGradientBoostingRegressor#

class sklearn.ensemble.HistGradientBoostingRegressor(loss='squared_error', *, quantile=None, 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)[source]#

基于直方图的梯度提升回归树。

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

此估计器原生支持缺失值(NaNs)。在训练期间,树的生长器会在每个分裂点学习具有缺失值的样本应根据潜在增益进入左子节点还是右子节点。在预测时,具有缺失值的样本会相应地分配到左子节点或右子节点。如果在训练期间某个给定特征没有遇到缺失值,那么具有缺失值的样本将被映射到样本数量最多的子节点。有关此功能的用例示例,请参阅直方图梯度提升树中的特征

此实现受到 LightGBM 的启发。

更多信息请参阅用户指南

0.21 版新增。

参数:
loss{‘squared_error’, ‘absolute_error’, ‘gamma’, ‘poisson’, ‘quantile’},默认值=’squared_error’

在提升过程中使用的损失函数。请注意,“平方误差”、“伽马”和“泊松”损失实际上实现了“半最小二乘损失”、“半伽马偏差”和“半泊松偏差”,以简化梯度计算。此外,“伽马”和“泊松”损失内部使用对数链接(log-link),“伽马”要求 y > 0,“泊松”要求 y >= 0。“分位数”使用弹球损失(pinball loss)。

0.23 版更改: 添加了 'poisson' 选项。

1.1 版更改: 添加了 'quantile' 选项。

1.3 版更改: 添加了 'gamma' 选项。

quantile浮点数,默认值=None

如果损失函数为“quantile”,此参数指定要估计的分位数,并且必须介于 0 和 1 之间。

learning_rate浮点数,默认值=0.1

学习率,也称为 收缩率 (shrinkage)。它用作叶子值的乘法因子。使用 1 表示不进行收缩。

max_iter整数,默认值=100

提升过程的最大迭代次数,即最大树的数量。

max_leaf_nodes整数或None,默认值=31

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

max_depth整数或None,默认值=None

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

min_samples_leaf整数,默认值=20

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

l2_regularization浮点数,默认值=0

惩罚具有小 Hessian 值的叶子的 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,) 的类数组对象,包含 {布尔值, 整数, 字符串},默认值='from_dtype'

指示分类特征。

  • None:不考虑任何特征为分类特征。

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

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

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

  • "from_dtype":数据框中数据类型为“category”的列被视为分类特征。要使用此功能,输入必须是一个暴露 __dataframe__ 方法的对象,例如 pandas 或 polars DataFrames。

对于每个分类特征,最多只能有 max_bins 个唯一类别。编码为数值数据类型的分类特征的负值被视为缺失值。所有分类值都转换为浮点数。这意味着分类值 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:使用决定系数\(R^2\))。

  • ‘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

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

属性:
do_early_stopping_布尔值

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

n_iter_整数

提升过程的迭代次数。

n_trees_per_iteration_整数

每次迭代构建的树的数量。对于回归器,此值始终为 1。

train_score_ndarray,形状 (n_iter_+1,)

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

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 版新增。

另请参阅

GradientBoostingRegressor

精确的梯度提升方法,对于具有大量样本的数据集,其伸缩性不佳。

sklearn.tree.DecisionTreeRegressor

一个决策树回归器。

RandomForestRegressor

一个元估计器,它在数据集的各种子样本上拟合多个决策树回归器,并使用平均来提高统计性能和控制过拟合。

AdaBoostRegressor

一个元估计器,它首先在原始数据集上拟合一个回归器,然后将回归器的额外副本拟合到相同的数据集上,但实例的权重根据当前预测的误差进行调整。因此,后续的回归器会更侧重于处理困难的案例。

示例

>>> from sklearn.ensemble import HistGradientBoostingRegressor
>>> from sklearn.datasets import load_diabetes
>>> X, y = load_diabetes(return_X_y=True)
>>> est = HistGradientBoostingRegressor().fit(X, y)
>>> est.score(X, y)
0.92...
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,)

预测值。

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

返回测试数据上的决定系数

决定系数 \(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\) 分数。

备注

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

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$') HistGradientBoostingRegressor[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$') HistGradientBoostingRegressor[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_predict(X)[source]#

预测每次迭代的回归目标。

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

0.24 版新增。

参数:
X形如 (n_samples, n_features) 的类数组对象

输入样本。

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

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