GradientBoostingClassifier#

class sklearn.ensemble.GradientBoostingClassifier(*, loss='log_loss', 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, 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)[source]#

用于分类的梯度提升。

此算法以向前阶段式方式构建加性模型;它允许优化任意可微损失函数。在每个阶段,都会在损失函数(例如二元或多类对数损失)的负梯度上拟合 n_classes_ 个回归树。二元分类是一种特殊情况,其中只诱导一个回归树。

HistGradientBoostingClassifier 是此算法的一种快得多的变体,适用于中型和大型数据集(n_samples >= 10_000),并支持单调约束。

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

参数:
loss{‘log_loss’, ‘exponential’}, default=’log_loss’

要优化的损失函数。‘log_loss’ 指的是二项式和多项式偏差,与逻辑回归中使用的相同。它对于具有概率输出的分类是一个很好的选择。对于损失 ‘exponential’,梯度提升恢复了 AdaBoost 算法。

learning_ratefloat, default=0.1

学习率通过 learning_rate 缩小每棵树的贡献。学习率和 n_estimators 之间存在权衡。值必须在 [0.0, inf) 范围内。

有关此参数及其与 subsample 相互作用的示例,请参阅梯度提升正则化

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' 通常是最佳选择,因为它在某些情况下可以提供更好的近似。

版本 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)

版本 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)

版本 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 是右子节点中的样本数。

如果传递了 sample_weight,则 NN_tN_t_RN_t_L 都指的是加权和。

Added in version 0.19.

initestimator or ‘zero’, default=None

用于计算初始预测的估计器对象。init 必须提供 fitpredict_proba。如果为 ‘zero’,则初始原始预测设置为零。默认情况下,使用预测类先验的 DummyEstimator

random_stateint, RandomState instance or None, default=None

控制在每次提升迭代中赋予每个树估计器的随机种子。此外,它还控制每次分割时特征的随机排列(有关详细信息,请参阅注释)。如果 n_iter_no_change 不为 None,它还控制训练数据的随机分割以获取验证集。传递一个 int 以在多次函数调用中获得可重现的输出。请参阅术语表

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 个特征,搜索分割也不会停止,直到找到至少一个有效的节点样本分区。

verboseint, default=0

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

max_leaf_nodesint, default=None

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

warm_startbool, default=False

当设置为 True 时,重用上次调用 fit 的解决方案,并向集成添加更多估计器,否则,擦除以前的解决方案。请参阅术语表

validation_fractionfloat, default=0.1

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

0.20 版本新增。

n_iter_no_changeint, default=None

n_iter_no_change 用于决定当验证分数没有提高时是否使用提前停止来终止训练。默认情况下,设置为 None 以禁用提前停止。如果设置为一个数字,它将把 validation_fraction 大小的训练数据作为验证集,并在所有前 n_iter_no_change 次迭代中验证分数没有提高时终止训练。分割是分层的。值必须在 [1, inf) 范围内。请参阅梯度提升中的提前停止

0.20 版本新增。

tolfloat, default=1e-4

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

0.20 版本新增。

ccp_alphanon-negative float, default=0.0

用于最小成本复杂性剪枝的复杂性参数。将选择成本复杂性小于 ccp_alpha 的最大子树。默认情况下,不执行剪枝。值必须在 [0.0, inf) 范围内。有关详细信息,请参阅最小成本复杂性剪枝。有关此类剪枝的示例,请参阅使用成本复杂性剪枝后剪枝决策树

版本 0.22 新增。

属性:
n_estimators_int

如果指定了 n_iter_no_change,则由提前停止选择的估计器数量。否则设置为 n_estimators

0.20 版本新增。

n_trees_per_iteration_int

每次迭代构建的树的数量。对于二元分类器,这始终是 1。

版本 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 时可用。

在版本 1.3 中新增。

oob_score_float

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

在版本 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, n_trees_per_iteration_)

拟合的子估计器集合。n_trees_per_iteration_ 对于二元分类为 1,否则为 n_classes

classes_ndarray of shape (n_classes,)

类别标签。

n_features_in_int

拟合 期间看到的特征数。

0.24 版本新增。

feature_names_in_shape 为 (n_features_in_,) 的 ndarray

fit 期间看到的特征名称。仅当 X 具有全部为字符串的特征名称时才定义。

1.0 版本新增。

n_classes_int

类的数量。

max_features_int

推断的 max_features 值。

另请参阅

HistGradientBoostingClassifier

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

sklearn.tree.DecisionTreeClassifier

决策树分类器。

RandomForestClassifier

一个元估计器,它在数据集的各个子样本上拟合多个决策树分类器,并使用平均来提高预测准确性并控制过拟合。

AdaBoostClassifier

一个元估计器,它首先在原始数据集上拟合一个分类器,然后在同一数据集上拟合额外的分类器副本,其中调整错误分类实例的权重,使后续分类器更关注困难情况。

注意事项

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

References

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

  1. Friedman, Stochastic Gradient Boosting, 1999

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

示例

以下示例展示了如何使用 100 个决策树桩作为弱学习器拟合梯度提升分类器。

>>> from sklearn.datasets import make_hastie_10_2
>>> from sklearn.ensemble import GradientBoostingClassifier
>>> X, y = make_hastie_10_2(random_state=0)
>>> X_train, X_test = X[:2000], X[2000:]
>>> y_train, y_test = y[:2000], y[2000:]
>>> clf = GradientBoostingClassifier(n_estimators=100, learning_rate=1.0,
...     max_depth=1, random_state=0).fit(X_train, y_train)
>>> clf.score(X_test, y_test)
0.913
apply(X)[source]#

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

版本0.17中新增。

参数:
Xshape 为 (n_samples, n_features) 的 {array-like, sparse matrix}

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

返回:
X_leavesarray-like of shape (n_samples, n_estimators, n_classes)

对于 X 中的每个数据点 x 和集成中的每棵树,返回 x 在每个估计器中最终到达的叶节点索引。在二元分类的情况下,n_classes 为 1。

decision_function(X)[source]#

计算 X 的决策函数。

参数:
Xshape 为 (n_samples, n_features) 的 {array-like, sparse matrix}

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

返回:
scorendarray of shape (n_samples, n_classes) or (n_samples,)

输入样本的决策函数,对应于从集成树预测的原始值。类的顺序对应于属性 classes_ 中的顺序。回归和二元分类产生形状为 (n_samples,) 的数组。

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

拟合梯度提升模型。

参数:
Xshape 为 (n_samples, n_features) 的 {array-like, sparse matrix}

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

yarray-like of shape (n_samples,)

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

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

样本权重。如果为 None,则样本权重相等。在每个节点中搜索分割时,将忽略会创建净零或负权重子节点的分割。在分类的情况下,如果分割会导致任一子节点中的任何单个类具有负权重,也会忽略该分割。

monitorcallable, default=None

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

返回:
selfobject

拟合的估计器。

get_metadata_routing()[source]#

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

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

返回:
routingMetadataRequest

封装路由信息的 MetadataRequest

get_params(deep=True)[source]#

获取此估计器的参数。

参数:
deepbool, default=True

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

返回:
paramsdict

参数名称映射到其值。

predict(X)[source]#

预测 X 的类别。

参数:
Xshape 为 (n_samples, n_features) 的 {array-like, sparse matrix}

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

返回:
yndarray of shape (n_samples,)

预测值。

predict_log_proba(X)[source]#

预测 X 的类别对数概率。

参数:
Xshape 为 (n_samples, n_features) 的 {array-like, sparse matrix}

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

返回:
pndarray of shape (n_samples, n_classes)

输入样本的类别对数概率。类的顺序对应于属性 classes_ 中的顺序。

Raises:
AttributeError

如果 loss 不支持概率。

predict_proba(X)[source]#

预测 X 的类别概率。

参数:
Xshape 为 (n_samples, n_features) 的 {array-like, sparse matrix}

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

返回:
pndarray of shape (n_samples, n_classes)

输入样本的类别概率。类的顺序对应于属性 classes_ 中的顺序。

Raises:
AttributeError

如果 loss 不支持概率。

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

返回在提供的数据和标签上的 准确率 (accuracy)

在多标签分类中,这是子集准确率 (subset accuracy),这是一个严格的指标,因为它要求每个样本的每个标签集都被正确预测。

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

测试样本。

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

X 的真实标签。

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

样本权重。

返回:
scorefloat

self.predict(X) 相对于 y 的平均准确率。

set_fit_request(*, monitor: bool | None | str = '$UNCHANGED$', sample_weight: bool | None | str = '$UNCHANGED$') GradientBoostingClassifier[source]#

配置是否应请求元数据以传递给 fit 方法。

请注意,此方法仅在以下情况下相关:此估计器用作 元估计器 中的子估计器,并且通过 enable_metadata_routing=True 启用了元数据路由(请参阅 sklearn.set_config)。请查看 用户指南 以了解路由机制的工作原理。

每个参数的选项如下:

  • True:请求元数据,如果提供则传递给 fit。如果未提供元数据,则忽略该请求。

  • False:不请求元数据,元估计器不会将其传递给 fit

  • None:不请求元数据,如果用户提供元数据,元估计器将引发错误。

  • str:应将元数据以给定别名而不是原始名称传递给元估计器。

默认值 (sklearn.utils.metadata_routing.UNCHANGED) 保留现有请求。这允许您更改某些参数的请求而不更改其他参数。

在版本 1.3 中新增。

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

fitmonitor 参数的元数据路由。

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

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

返回:
selfobject

更新后的对象。

set_params(**params)[source]#

设置此估计器的参数。

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

参数:
**paramsdict

估计器参数。

返回:
selfestimator instance

估计器实例。

set_score_request(*, sample_weight: bool | None | str = '$UNCHANGED$') GradientBoostingClassifier[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_decision_function(X)[source]#

计算 X 在每次迭代的决策函数。

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

参数:
Xshape 为 (n_samples, n_features) 的 {array-like, sparse matrix}

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

生成:
scoregenerator of ndarray of shape (n_samples, k)

输入样本的决策函数,对应于从集成树预测的原始值。类对应于属性 classes_ 中的顺序。回归和二元分类是 k == 1 的特殊情况,否则 k==n_classes

staged_predict(X)[source]#

预测 X 在每个阶段的类别。

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

参数:
Xshape 为 (n_samples, n_features) 的 {array-like, sparse matrix}

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

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

输入样本的预测值。

staged_predict_proba(X)[source]#

预测 X 在每个阶段的类别概率。

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

参数:
Xshape 为 (n_samples, n_features) 的 {array-like, sparse matrix}

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

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

输入样本的预测值。