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]#

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

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

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

此实现的灵感来自LightGBM

用户指南中阅读更多内容。

在 0.21 版本中添加。

参数:
loss{‘squared_error’, ‘absolute_error’, ‘gamma’, ‘poisson’, ‘quantile’}, default=’squared_error’

在提升过程中使用的损失函数。请注意,“squared_error”、“gamma”和“poisson”损失实际上实现了“半最小二乘损失”、“半伽马偏差”和“半泊松偏差”,以简化梯度的计算。“gamma”和“poisson”损失在内部使用对数链接,“gamma”要求y > 0,“poisson”要求y >= 0。“quantile”使用Pinball损失。

0.23 版本中的更改: 添加了“poisson”选项。

1.1 版本中的更改: 添加了“quantile”选项。

1.3 版本中的更改: 添加了“gamma”选项。

quantilefloat, default=None

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

learning_ratefloat, default=0.1

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

max_iterint, default=100

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

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, default=255

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

categorical_featuresarray-like of {bool, int, str} of shape (n_features) or shape (n_categorical_features,), default=None

指示类别特征。

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

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

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

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

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

对于每个类别特征,最多必须有 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。

1.2 版本新增。

warm_start布尔值,默认为 False

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

early_stopping‘auto’ 或布尔值,默认为 ‘auto’

如果为 ‘auto’,则当样本大小大于 10000 时启用提前停止。如果为 True,则启用提前停止,否则禁用提前停止。

0.23 版本新增。

scoring字符串或可调用对象或 None,默认为 ‘loss’

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

validation_fraction整数或浮点数或 None,默认为 0.1

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

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’,则最多在 10000 个样本的子集上计算分数。如果没有提前停止,则为空。

validation_score_ndarray,形状为 (n_iter_+1,)

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

is_categorical_ndarray,形状 (n_features, ) 或 None

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

n_features_in_int

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

0.24 版本新增。

feature_names_in_形状为 (n_features_in_,) 的ndarray

拟合期间看到的特征名称。仅当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)[source]#

拟合梯度提升模型。

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

输入样本。

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

目标值。

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

训练数据的权重。

0.23 版本新增。

返回:
self对象

已拟合的估计器。

get_metadata_routing()[source]#

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

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

返回:
routingMetadataRequest

一个MetadataRequest,封装了路由信息。

get_params(deep=True)[source]#

获取此估计器的参数。

参数:
deep布尔值,默认为 True

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

返回:
params字典

参数名称与其值的映射。

property n_iter_#

提升过程的迭代次数。

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期望值的常数模型,忽略输入特征,其\(R^2\)分数为 0.0。

参数:
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浮点数

\(R^2\) of self.predict(X) w.r.t. y

备注

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

set_fit_request(*, sample_weight: 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 中使用)此方法才相关。否则,它无效。

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

fitsample_weight 参数的元数据路由。

返回:
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_weightstr、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 生成器

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