GradientBoostingRegressor#

class sklearn.ensemble.GradientBoostingRegressor(*, loss='squared_error', learning_rate=0.1, n_estimators=100, subsample=1.0, criterion='friedman_mse', min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_depth=3, min_impurity_decrease=0.0, init=None, random_state=None, max_features=None, alpha=0.9, verbose=0, max_leaf_nodes=None, warm_start=False, validation_fraction=0.1, n_iter_no_change=None, tol=0.0001, ccp_alpha=0.0)#

梯度提升用于回归。

该估计器以向前逐步的方式构建一个加性模型;它允许优化任意可微分的损失函数。在每个阶段,回归树被拟合到给定损失函数的负梯度上。

sklearn.ensemble.HistGradientBoostingRegressor 是该算法的一个更快的变体,适用于中间大小的数据集( n_samples >= 10_000 )。

更多信息请参阅 用户指南

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

要优化的损失函数。’squared_error’ 指的是回归的平方误差。’absolute_error’ 指的是回归的绝对误差,是一个稳健的损失函数。’huber’ 是两者的结合。’quantile’ 允许分位数回归(使用 alpha 指定分位数)。

learning_ratefloat, default=0.1

学习率缩小每棵树的贡献度为 learning_rate 。学习率和 n_estimators 之间有一个权衡。值必须在 [0.0, inf) 范围内。

n_estimatorsint, default=100

要执行的提升阶段数。梯度提升对过拟合相当稳健,因此通常较大的数量会带来更好的性能。值必须在 [1, inf) 范围内。

subsamplefloat, default=1.0

用于拟合单个基学习器的样本比例。如果小于 1.0,这将导致随机梯度提升。 subsample 与参数 n_estimators 相互作用。选择 subsample < 1.0 会导致方差减少和偏差增加。值必须在 (0.0, 1.0] 范围内。

criterion{‘friedman_mse’, ‘squared_error’}, default=’friedman_mse’

衡量分裂质量的函数。支持的标准是 “friedman_mse”,表示带有 Friedman 改进分数的均方误差,”squared_error” 表示均方误差。”friedman_mse” 的默认值通常是最好的,因为它在某些情况下可以提供更好的近似。

Added in version 0.18.

min_samples_splitint or float, default=2

分裂内部节点所需的最小样本数:

  • 如果是 int,值必须在 [2, inf) 范围内。

  • 如果是 float,值必须在 (0.0, 1.0] 范围内, min_samples_split 将是 ceil(min_samples_split * n_samples)

Changed in version 0.18: 增加了分数值。

min_samples_leafint or float, default=1

叶节点所需的最小样本数。任何深度的分裂点只有在每个左分支和右分支中留下至少 min_samples_leaf 个训练样本时才会被考虑。这可能会对模型产生平滑效果,特别是在回归中。

  • 如果是 int,值必须在 [1, inf) 范围内。

  • 如果是 float,值必须在 (0.0, 1.0) 范围内, min_samples_leaf 将是 ceil(min_samples_leaf * n_samples)

Changed in version 0.18: 增加了分数值。

min_weight_fraction_leaffloat, default=0.0

叶节点所需的最小加权分数。如果没有提供 sample_weight,样本的权重相等。值必须在 [0.0, 0.5] 范围内。

max_depthint or None, default=3

单个回归估计器的最大深度。最大深度限制了树中的节点数。调整此参数以获得最佳性能;最佳值取决于输入变量的相互作用。如果为 None,则节点会一直扩展,直到所有叶子都是纯的或所有叶子包含的样本数少于 min_samples_split。如果是 int,值必须在 [1, inf) 范围内。

min_impurity_decreasefloat, default=0.0

如果分裂导致的杂质减少大于或等于此值,则节点将被分裂。值必须在 [0.0, inf) 范围内。

加权杂质减少方程如下:

N_t / N * (impurity - N_t_R / N_t * right_impurity
                    - N_t_L / N_t * left_impurity)

其中 N 是样本总数, N_t 是当前节点的样本数, N_t_L 是左子节点的样本数, N_t_R 是右子节点的样本数。

N , N_t , N_t_RN_t_L 都指的是加权和,如果传递了 sample_weight

Added in version 0.19.

initestimator or ‘zero’, default=None

用于计算初始预测的估计器对象。 init 必须提供 fitpredict 。如果是 ‘zero’,初始原始预测设置为零。默认使用 DummyEstimator ,预测平均目标值(对于 loss=’squared_error’)或其他损失的分位数。

random_stateint, RandomState instance or None, default=None

控制每个树估计器在每次提升迭代时给出的随机种子。此外,它控制每次分裂时特征的随机排列(详见注释)。如果 n_iter_no_change 不是 None,它还控制训练数据的随机分裂以获得验证集。传递一个 int 以在多次函数调用中获得可重复的输出。参见 Glossary

max_features{‘sqrt’, ‘log2’}, int or float, default=None

寻找最佳分裂时考虑的特征数:

  • 如果是 int,值必须在 [1, inf) 范围内。

  • 如果是 float,值必须在 (0.0, 1.0] 范围内,每次分裂时考虑的特征数将是 max(1, int(max_features * n_features_in_))

  • 如果是 “sqrt”,则 max_features=sqrt(n_features)

  • 如果是 “log2”,则 max_features=log2(n_features)

  • 如果是 None,则 max_features=n_features

选择 max_features < n_features 会导致方差减少和偏差增加。

注意:搜索分裂不会在至少找到一个有效的节点样本分区之前停止,即使需要有效检查超过 max_features 个特征。

alphafloat, default=0.9

huber 损失函数和分位数损失函数的 alpha-分位数。仅当 loss='huber'loss='quantile' 时。值必须在 (0.0, 1.0) 范围内。

verboseint, default=0

启用详细输出。如果是 1,则偶尔打印进度和性能(树越多,频率越低)。如果大于 1,则每棵树打印进度和性能。值必须在 [0, inf) 范围内。

max_leaf_nodesint, default=None

以最佳优先方式生长的树的 max_leaf_nodes 。最佳节点定义为杂质的相对减少。值必须在 [2, inf) 范围内。如果为 None,则叶节点数量不受限制。

warm_startbool, default=False

当设置为 True 时,重用上一次调用 fit 的解决方案并添加更多估计器到集成中,否则,清除之前的解决方案。参见 the Glossary

validation_fractionfloat, default=0.1

留作早期停止验证集的训练数据比例。值必须在 (0.0, 1.0) 范围内。仅当 n_iter_no_change 设置为整数时使用。

Added in version 0.20.

n_iter_no_changeint, default=None

n_iter_no_change 用于决定是否使用早期停止来终止训练,当验证分数没有提高时。默认设置为 None 以禁用早期停止。如果设置为数字,将留出 validation_fraction 大小的训练数据作为验证,并在验证分数在之前的 n_iter_no_change 次迭代中没有提高时终止训练。值必须在 [1, inf) 范围内。参见 梯度提升中的提前停止

Added in version 0.20.

tolfloat, default=1e-4

早期停止的容差。当损失在 n_iter_no_change 次迭代中(如果设置为数字)没有至少改善 tol 时,训练停止。值必须在 [0.0, inf) 范围内。

Added in version 0.20.

ccp_alphanon-negative float, default=0.0

用于最小成本复杂度剪枝的复杂度参数。将选择成本复杂度小于 ccp_alpha 的最大子树。默认不进行剪枝。值必须在 [0.0, inf) 范围内。详见 最小成本复杂度剪枝

Added in version 0.22.

Attributes:
n_estimators_int

由早期停止选择的估计器数量(如果 n_iter_no_change 指定)。否则设置为 n_estimators

n_trees_per_iteration_int

每次迭代构建的树的数量。对于回归器,这总是 1。

Added in version 1.4.0.

feature_importances_ndarray of shape (n_features,)

杂质特征重要性。

oob_improvement_ndarray of shape (n_estimators,)

相对于前一次迭代,在包外样本上的损失改进。 oob_improvement_[0] 是第一阶段相对于 init 估计器的损失改进。仅当 subsample < 1.0 时可用。

oob_scores_ndarray of shape (n_estimators,)

包外样本上的损失值的完整历史。仅当 subsample < 1.0 时可用。

Added in version 1.3.

oob_score_float

包外样本上的损失的最后一个值。与 oob_scores_[-1] 相同。仅当 subsample < 1.0 时可用。

Added in version 1.3.

train_score_ndarray of shape (n_estimators,)

第 i 个分数 train_score_[i] 是模型在第 i 次迭代时在包内样本上的损失。如果 subsample == 1 ,这是训练数据上的损失。

init_estimator

提供初始预测的估计器。通过 init 参数设置。

estimators_ndarray of DecisionTreeRegressor of shape (n_estimators, 1)

拟合的子估计器集合。

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.

max_features_int

max_features 的推断值。

See also

HistGradientBoostingRegressor

基于直方图的梯度提升分类树。

sklearn.tree.DecisionTreeRegressor

决策树回归器。

sklearn.ensemble.RandomForestRegressor

随机森林回归器。

Notes

特征在每次分裂时总是随机排列。因此,即使使用相同的训练数据和 max_features=n_features ,如果标准的改进对于几个枚举的分裂是相同的,最佳找到的分裂也可能会有所不同。为了在拟合过程中获得确定性的行为, random_state 必须固定。

References

  1. Friedman, Greedy Function Approximation: A Gradient Boosting Machine, The Annals of Statistics, Vol. 29, No. 5, 2001.

  1. Friedman, Stochastic Gradient Boosting, 1999

  1. Hastie, R. Tibshirani and J. Friedman. Elements of Statistical Learning Ed. 2, Springer, 2009.

Examples

>>> from sklearn.datasets import make_regression
>>> from sklearn.ensemble import GradientBoostingRegressor
>>> from sklearn.model_selection import train_test_split
>>> X, y = make_regression(random_state=0)
>>> X_train, X_test, y_train, y_test = train_test_split(
...     X, y, random_state=0)
>>> reg = GradientBoostingRegressor(random_state=0)
>>> reg.fit(X_train, y_train)
GradientBoostingRegressor(random_state=0)
>>> reg.predict(X_test[1:2])
array([-61...])
>>> reg.score(X_test, y_test)
0.4...

有关利用 GradientBoostingRegressor 拟合弱预测模型集合的详细示例,请参阅 梯度提升回归

apply(X)#

将集成中的树应用于X,返回叶索引。

Added in version 0.17.

Parameters:
X{array-like, sparse matrix},形状为 (n_samples, n_features)

输入样本。内部将转换为 dtype=np.float32 。如果提供稀疏矩阵,将转换为稀疏的 csr_matrix

Returns:
X_leavesarray-like,形状为 (n_samples, n_estimators)

对于X中的每个数据点x和集成中的每棵树,返回x在每个估计器中结束的叶索引。

property feature_importances_#

杂质特征重要性。

数值越高,特征越重要。 特征的重要性计算为该特征带来的准则(归一化)总减少量。它也被称为基尼重要性。

警告:基于杂质的特征重要性对于高基数特征(许多唯一值)可能会产生误导。请参阅 sklearn.inspection.permutation_importance 作为替代方法。

Returns:
feature_importances_ndarray of shape (n_features,)

该数组的值总和为1,除非所有树都是单节点树,仅由根节点组成,在这种情况下,它将是一个零数组。

fit(X, y, sample_weight=None, monitor=None)#

拟合梯度提升模型。

Parameters:
X{array-like, sparse matrix},形状为 (n_samples, n_features)

输入样本。内部将转换为 dtype=np.float32 ,如果提供稀疏矩阵,则转换为稀疏的 csr_matrix

yarray-like,形状为 (n_samples,)

目标值(在分类中为字符串或整数,在回归中为实数) 对于分类,标签必须对应于类别。

sample_weightarray-like,形状为 (n_samples,),默认=None

样本权重。如果为 None,则样本等权重。在每个节点中搜索分割时,会忽略那些会创建净零或负权重的子节点的分割。在分类的情况下,如果任何单个类别在任一子节点中携带负权重,也会忽略这些分割。

monitorcallable,默认=None

每次迭代后调用监视器,当前迭代次数、估计器的引用和 _fit_stages 的局部变量作为关键字参数 callable(i, self, locals()) 。如果 callable 返回 True ,则拟合过程将停止。监视器可用于各种事情,例如计算保留估计、提前停止、模型内省和快照。

Returns:
selfobject

拟合的估计器。

get_metadata_routing()#

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

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

Returns:
routingMetadataRequest

MetadataRequest 封装的 路由信息。

get_params(deep=True)#

获取此估计器的参数。

Parameters:
deepbool, 默认=True

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

Returns:
paramsdict

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

predict(X)#

预测X的回归目标。

Parameters:
X{array-like, sparse matrix},形状为 (n_samples, n_features)

输入样本。内部将转换为 dtype=np.float32 ,如果提供稀疏矩阵, 则转换为稀疏的 csr_matrix

Returns:
yndarray,形状为 (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(*, monitor: bool | None | str = '$UNCHANGED$', sample_weight: bool | None | str = '$UNCHANGED$') GradientBoostingRegressor#

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:
monitorstr, True, False, or None, default=sklearn.utils.metadata_routing.UNCHANGED

Metadata routing for monitor parameter in fit .

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$') GradientBoostingRegressor#

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

预测X在每个阶段的回归目标。

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

Parameters:
X{array-like, sparse matrix} of shape (n_samples, n_features)

输入样本。内部将转换为 dtype=np.float32 ,如果提供稀疏矩阵,则转换为稀疏的 csr_matrix

Yields:
yndarray of shape (n_samples,) 的生成器

输入样本的预测值。