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 快得多。

此估计器原生支持缺失值 (NaNs)。在训练过程中,树生长器在每个分割点都会根据潜在增益来学习带有缺失值的样本应该进入左子节点还是右子节点。在预测时,带有缺失值的样本相应地分配给左子节点或右子节点。如果在训练过程中给定特征没有遇到缺失值,则带有缺失值的样本将被映射到具有最多样本的子节点。有关此功能的用例示例,请参阅 Features in Histogram Gradient Boosting Trees

此实现受到 LightGBM 的启发。

欲了解更多信息,请阅读 用户指南

0.21 版本新增。

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

在提升过程中使用的损失函数。请注意,“squared error”、“gamma”和“poisson”损失函数实际实现的是“半最小平方损失”、“半伽马偏差”和“半泊松偏差”,以简化梯度的计算。此外,“gamma”和“poisson”损失函数内部使用对数链接(log-link),“gamma”要求 y > 0,而“poisson”要求 y >= 0。“quantile”使用 pinball loss。

0.23 版本更改: 新增选项 ‘poisson’。

1.1 版本更改: 新增选项 ‘quantile’。

1.3 版本更改: 新增选项 ‘gamma’。

quantilefloat, default=None

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

learning_ratefloat, default=0.1

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

max_iterint, default=100

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

max_leaf_nodesint or None, default=31

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

max_depthint or None, default=None

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

min_samples_leafint, default=20

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

l2_regularizationfloat, default=0

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=’from_dtype’

指示类别特征。

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

  • boolean array-like : 布尔掩码,指示类别特征。

  • integer array-like : 整数索引,指示类别特征。

  • str array-like: 类别特征的名称(假设训练数据具有特征名称)。

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

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

欲了解更多信息,请阅读 用户指南Categorical Feature Support in Gradient Boosting

0.24 版本新增。

1.2 版本更改: 新增对特征名称的支持。

1.4 版本更改: 新增 "from_dtype" 选项。

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

monotonic_cstarray-like of int of shape (n_features) or dict, default=None

使用以下整数值指定要对每个特征施加的单调约束

  • 1:单调增加

  • 0:无约束

  • -1:单调减少

如果为带有字符串键的字典,则按名称将特征映射到单调约束。如果为数组,则按位置将特征映射到约束。有关使用示例,请参阅 Using feature names to specify monotonic constraints

欲了解更多信息,请阅读 用户指南

0.23 版本新增。

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

interaction_cst{“pairwise”, “no_interactions”} or sequence of lists/tuples/sets of int, default=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_startbool, default=False

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

early_stopping‘auto’ or bool, default=’auto’

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

0.23 版本新增。

scoringstr or callable or None, default=’loss’

用于早期停止的评分方法。仅在启用 early_stopping 时使用。选项:

  • str: 有关选项,请参阅 String name scorers

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

  • None: 使用 决定系数 (\(R^2\))。

  • ‘loss’: 根据损失值检查早期停止。

validation_fractionint or float or None, default=0.1

设置用于早期停止的训练数据中作为验证数据的比例(或绝对大小)。如果为 None,则在训练数据上进行早期停止。如果未执行早期停止(例如 early_stopping=False)或者将 X_valy_val 传递给 fit,则忽略此值。

n_iter_no_changeint, default=10

用于确定何时“早期停止”。当最后 n_iter_no_change 次迭代的分数都没有比倒数第 n_iter_no_change - 1 次迭代的分数更好时(在一定的容差范围内),拟合过程停止。仅在执行早期停止时使用。

tolfloat, default=1e-7

在早期停止期间比较分数时使用的绝对容差。容差越高,越有可能早期停止:容差越高意味着后续迭代被认为是比参考分数有改进的可能性越小。

verboseint, default=0

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

random_stateint, RandomState instance or None, default=None

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

属性:
do_early_stopping_bool

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

n_iter_int

提升过程的迭代次数。

n_trees_per_iteration_int

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

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, ) or None

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

n_features_in_int

拟合 期间看到的特征数。

0.24 版本新增。

feature_names_in_shape 为 (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]#

拟合梯度提升模型。

参数:
Xshape 为 (n_samples, n_features) 的 array-like

输入样本。

yarray-like of shape (n_samples,)

目标值。

sample_weightarray-like of shape (n_samples,) default=None

训练数据的权重。

0.23 版本新增。

X_valarray-like of shape (n_val, n_features)

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

在版本 1.7 中新增。

y_valarray-like of shape (n_samples,)

用于早期停止的额外验证目标值样本。

在版本 1.7 中新增。

sample_weight_valarray-like of shape (n_samples,) default=None

用于早期停止的额外验证权重。

在版本 1.7 中新增。

返回:
selfobject

拟合的估计器。

get_metadata_routing()[source]#

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

请查阅 用户指南,了解路由机制如何工作。

返回:
routingMetadataRequest

封装路由信息的 MetadataRequest

get_params(deep=True)[source]#

获取此估计器的参数。

参数:
deepbool, default=True

如果为 True,将返回此估计器以及包含的子对象(如果它们是估计器)的参数。

返回:
paramsdict

参数名称映射到其值。

predict(X)[source]#

预测 X 的值。

参数:
Xarray-like, shape (n_samples, n_features)

输入样本。

返回:
yndarray, shape (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。

参数:
Xshape 为 (n_samples, n_features) 的 array-like

测试样本。对于某些估计器,这可能是一个预先计算的核矩阵或一个通用对象列表,形状为 (n_samples, n_samples_fitted),其中 n_samples_fitted 是用于估计器拟合的样本数。

yshape 为 (n_samples,) 或 (n_samples, n_outputs) 的 array-like

X 的真实值。

sample_weightshape 为 (n_samples,) 的 array-like, default=None

样本权重。

返回:
scorefloat

self.predict(X) 相对于 y\(R^2\)

注意事项

从0.23版本开始,当在回归器上调用 score 时使用的 \(R^2\) 分数使用 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 中新增。

参数:
X_valstr, True, False, or None, default=sklearn.utils.metadata_routing.UNCHANGED

fitX_val 参数的元数据路由。

sample_weightstr, True, False, or None, default=sklearn.utils.metadata_routing.UNCHANGED

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

sample_weight_valstr, True, False, or None, default=sklearn.utils.metadata_routing.UNCHANGED

fitsample_weight_val 参数的元数据路由。

y_valstr, True, False, or None, default=sklearn.utils.metadata_routing.UNCHANGED

fity_val 参数的元数据路由。

返回:
selfobject

更新后的对象。

set_params(**params)[source]#

设置此估计器的参数。

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

参数:
**paramsdict

估计器参数。

返回:
selfestimator instance

估计器实例。

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

参数:
sample_weightstr, True, False, or None, default=sklearn.utils.metadata_routing.UNCHANGED

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

返回:
selfobject

更新后的对象。

staged_predict(X)[source]#

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

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

0.24 版本新增。

参数:
Xshape 为 (n_samples, n_features) 的 array-like

输入样本。

生成:
ygenerator of ndarray of shape (n_samples,)

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