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='warn', 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)#

直方图梯度提升回归树。

该估计器在处理大数据集(n_samples >= 10000)时比 GradientBoostingRegressor 快得多。

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

该实现灵感来自 LightGBM

更多信息请参阅 用户指南

Added in version 0.21.

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

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

Changed in version 0.23: 添加了选项 ‘poisson’。

Changed in version 1.1: 添加了选项 ‘quantile’。

Changed in version 1.3: 添加了选项 ‘gamma’。

quantilefloat, default=None

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

learning_ratefloat, default=0.1

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

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正则化参数,惩罚具有小hessians的叶子。使用 0 表示无正则化(默认)。

max_featuresfloat, default=1.0

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

Added in version 1.4.

max_binsint, default=255

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

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

指示分类特征。

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

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

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

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

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

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

更多信息请参阅 用户指南

Added in version 0.24.

Changed in version 1.2: 添加了对特征名称的支持。

Changed in version 1.4: 添加了 "from_dtype" 选项。默认值将在v1.6中更改为 "from_dtype"

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

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

  • 1: 单调增加

  • 0: 无约束

  • -1: 单调减少

如果为字典且键为字符串,则按名称映射特征到单调约束。如果为数组,则按位置映射特征到约束。请参阅 monotonic_cst_features_names 以获取使用示例。

更多信息请参阅 用户指南

Added in version 0.23.

Changed in version 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上分裂。

Added in version 1.2.

warm_startbool, default=False

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

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

如果为 ‘auto’,如果样本大小大于10000,则启用早期停止。如果为True,则启用早期停止,否则禁用早期停止。

Added in version 0.23.

scoringstr or callable or None, default=’loss’

用于早期停止的评分参数。它可以是单个字符串(请参阅 scoring_parameter )或可调用对象(请参阅 从指标函数定义您的评分策略 )。如果为None,则使用估计器的默认评分器。如果 scoring='loss' ,则根据损失值检查早期停止。仅在执行早期停止时使用。

validation_fractionint or float or None, default=0.1

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

n_iter_no_changeint, default=10

用于确定何时“早期停止”。当最近的 n_iter_no_change 个分数都不比第 n_iter_no_change - 1 个分数好时,停止拟合过程,直到某个容差。仅在执行早期停止时使用。

tolfloat, default=1e-7

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

verboseint, default=0

详细级别。如果不为零,打印一些关于拟合过程的信息。

random_stateint, RandomState instance or None, default=None

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

Attributes:
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

fit 期间看到的特征数。

Added in version 0.24.

feature_names_in_ndarray of shape ( n_features_in_ ,)

fit 期间看到的特征名称。仅当 X 的特征名称均为字符串时定义。

Added in version 1.0.

See also

GradientBoostingRegressor

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

sklearn.tree.DecisionTreeRegressor

决策树回归器。

RandomForestRegressor

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

AdaBoostRegressor

一种元估计器,首先在原始数据集上拟合一个回归器,然后在同一数据集上拟合回归器的附加副本,但实例权重根据当前预测的误差进行调整。因此,后续的回归器更多地关注困难情况。

Examples

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

拟合梯度提升模型。

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

输入样本。

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

目标值。

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

训练数据的权重。

Added in version 0.23.

Returns:
selfobject

拟合的估计器。

get_metadata_routing()#

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

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

Returns:
routingMetadataRequest

MetadataRequest 封装的 路由信息。

get_params(deep=True)#

获取此估计器的参数。

Parameters:
deepbool, 默认=True

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

Returns:
paramsdict

参数名称映射到它们的值。

property n_iter_#

迭代增强过程的次数。

predict(X)#

预测X的值。

Parameters:
Xarray-like, shape (n_samples, n_features)

输入样本。

Returns:
yndarray, shape (n_samples,)

预测的值。

score(X, y, sample_weight=None)#

返回预测的决定系数。

决定系数 \(R^2\) 定义为 \((1 - rac{u}{v})\) ,其中 \(u\) 是残差平方和 ((y_true - y_pred)** 2).sum() ,而 \(v\) 是总平方和 ((y_true - y_true.mean()) ** 2).sum() 。最好的可能得分是 1.0,它可能是负的(因为模型可能任意地差)。一个总是预测 y 的期望值的常数模型,忽略输入特征,将得到 \(R^2\) 得分为 0.0。

Parameters:
Xarray-like of shape (n_samples, n_features)

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

yarray-like of shape (n_samples,) or (n_samples, n_outputs)

X 的真实值。

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

样本权重。

Returns:
scorefloat

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

Notes

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

set_fit_request(*, sample_weight: bool | None | str = '$UNCHANGED$') HistGradientBoostingRegressor#

Request metadata passed to the fit method.

Note that this method is only relevant if enable_metadata_routing=True (see sklearn.set_config ). Please see User Guide on how the routing mechanism works.

The options for each parameter are:

  • True : metadata is requested, and passed to fit if provided. The request is ignored if metadata is not provided.

  • False : metadata is not requested and the meta-estimator will not pass it to fit .

  • None : metadata is not requested, and the meta-estimator will raise an error if the user provides it.

  • str : metadata should be passed to the meta-estimator with this given alias instead of the original name.

The default ( sklearn.utils.metadata_routing.UNCHANGED ) retains the existing request. This allows you to change the request for some parameters and not others.

Added in version 1.3.

Note

This method is only relevant if this estimator is used as a sub-estimator of a meta-estimator, e.g. used inside a Pipeline . Otherwise it has no effect.

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

Metadata routing for sample_weight parameter in fit .

Returns:
selfobject

The updated object.

set_params(**params)#

设置此估计器的参数。

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

Parameters:
**paramsdict

估计器参数。

Returns:
selfestimator instance

估计器实例。

set_score_request(*, sample_weight: bool | None | str = '$UNCHANGED$') HistGradientBoostingRegressor#

Request metadata passed to the score method.

Note that this method is only relevant if enable_metadata_routing=True (see sklearn.set_config ). Please see User Guide on how the routing mechanism works.

The options for each parameter are:

  • True : metadata is requested, and passed to score if provided. The request is ignored if metadata is not provided.

  • False : metadata is not requested and the meta-estimator will not pass it to score .

  • None : metadata is not requested, and the meta-estimator will raise an error if the user provides it.

  • str : metadata should be passed to the meta-estimator with this given alias instead of the original name.

The default ( sklearn.utils.metadata_routing.UNCHANGED ) retains the existing request. This allows you to change the request for some parameters and not others.

Added in version 1.3.

Note

This method is only relevant if this estimator is used as a sub-estimator of a meta-estimator, e.g. used inside a Pipeline . Otherwise it has no effect.

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

Metadata routing for sample_weight parameter in score .

Returns:
selfobject

The updated object.

staged_predict(X)#

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

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

Added in version 0.24.

Parameters:
Xarray-like of shape (n_samples, n_features)

输入样本。

Yields:
ygenerator of ndarray of shape (n_samples,)

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