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’},默认值=’log_loss’

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

learning_rate浮点数,默认值=0.1

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

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

n_estimators整数,默认值=100

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

subsample浮点数,默认值=1.0

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

criterion{‘friedman_mse’, ‘squared_error’},默认值=’friedman_mse’

衡量分割质量的函数。支持的准则是‘friedman_mse’(表示带有Friedman改进分数的均方误差)和‘squared_error’(表示均方误差)。默认值‘friedman_mse’通常是最佳选择,因为它在某些情况下可以提供更好的近似。

0.18 版本新增。

min_samples_split整数或浮点数,默认值=2

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

  • 如果为整数,值必须在[2, inf)范围内。

  • 如果为浮点数,值必须在(0.0, 1.0]范围内,并且min_samples_split将为ceil(min_samples_split * n_samples)

0.18 版本更改: 增加了小数(浮点数)值。

min_samples_leaf整数或浮点数,默认值=1

在叶节点处所需的最小样本数。只有当分割点在左右分支中都至少留下min_samples_leaf个训练样本时,才会考虑该分割点。这可能会使模型平滑,尤其是在回归中。

  • 如果为整数,值必须在[1, inf)范围内。

  • 如果为浮点数,值必须在(0.0, 1.0)范围内,并且min_samples_leaf将为ceil(min_samples_leaf * n_samples)

0.18 版本更改: 增加了小数(浮点数)值。

min_weight_fraction_leaf浮点数,默认值=0.0

在叶节点处所需的(所有输入样本)总权重之和的最小加权分数。当未提供`sample_weight`时,样本具有相同的权重。值必须在[0.0, 0.5]范围内。

max_depth整数或None,默认值=3

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

min_impurity_decrease浮点数,默认值=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均指加权和。

0.19 版本新增。

init估计器或‘zero’,默认值=None

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

random_state整数,RandomState实例或None,默认值=None

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

max_features{‘sqrt’, ‘log2’},整数或浮点数,默认值=None

寻找最佳分割时要考虑的特征数量

  • 如果为整数,值必须在[1, inf)范围内。

  • 如果为浮点数,值必须在(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个特征。

verbose整数,默认值=0

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

max_leaf_nodes整数,默认值=None

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

warm_start布尔值,默认值=False

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

validation_fraction浮点数,默认值=0.1

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

0.20 版本新增。

n_iter_no_change整数,默认值=None

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

0.20 版本新增。

tol浮点数,默认值=1e-4

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

0.20 版本新增。

ccp_alpha非负浮点数,默认值=0.0

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

0.22 版本新增。

属性:
n_estimators_整数

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

0.20 版本新增。

n_trees_per_iteration_整数

每次迭代中构建的树的数量。对于二分类器,此值始终为1。

1.4.0 版本新增。

feature_importances_形状为 (n_features,) 的ndarray

基于杂质的特征重要性。

oob_improvement_形状为 (n_estimators,) 的ndarray

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

oob_scores_形状为 (n_estimators,) 的ndarray

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

1.3 版本新增。

oob_score_浮点数

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

1.3 版本新增。

train_score_形状为 (n_estimators,) 的ndarray

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

init_估计器

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

estimators_形状为 (n_estimators, n_trees_per_iteration_) 的DecisionTreeRegressor ndarray

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

classes_形状为 (n_classes,) 的ndarray

类别标签。

n_features_in_整数

fit期间所见的特征数量。

0.24 版本新增。

feature_names_in_形状为 (n_features_in_,) 的ndarray

fit期间所见的特征名称。仅当X的所有特征名称均为字符串时才定义。

1.0 版本新增。

n_classes_整数

类的数量。

max_features_整数

max_features的推断值。

另请参阅

HistGradientBoostingClassifier

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

sklearn.tree.DecisionTreeClassifier

一个决策树分类器。

RandomForestClassifier

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

AdaBoostClassifier

一种元估计器,它首先在原始数据集上拟合一个分类器,然后将分类器的额外副本拟合到相同的数据集上,其中错误分类实例的权重会进行调整,以便后续分类器更侧重于困难情况。

备注

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

参考文献

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个决策残差(decision stumps)作为弱学习器来拟合梯度提升分类器。

>>> 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 版本新增。

参数:
X形状为 (n_samples, n_features) 的 {array-like, 稀疏矩阵}

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

返回:
X_leaves形状为 (n_samples, n_estimators, n_classes) 的 array-like

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

decision_function(X)[source]#

计算X的决策函数。

参数:
X形状为 (n_samples, n_features) 的 {array-like, 稀疏矩阵}

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

返回:
score形状为 (n_samples, n_classes) 或 (n_samples,) 的ndarray

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

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

拟合梯度提升模型。

参数:
X形状为 (n_samples, n_features) 的 {array-like, 稀疏矩阵}

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

y形状为 (n_samples,) 的 array-like

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

sample_weight形状为 (n_samples,) 的 array-like,默认值=None

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

monitor可调用对象,默认值=None

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

返回:
self对象

已拟合的估计器。

get_metadata_routing()[source]#

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

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

返回:
routingMetadataRequest

封装路由信息的MetadataRequest

get_params(deep=True)[source]#

获取此估计器的参数。

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

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

返回:
params字典

参数名称映射到其值。

predict(X)[source]#

预测X的类别。

参数:
X形状为 (n_samples, n_features) 的 {array-like, 稀疏矩阵}

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

返回:
y形状为 (n_samples,) 的ndarray

预测值。

predict_log_proba(X)[source]#

预测X的类别对数概率。

参数:
X形状为 (n_samples, n_features) 的 {array-like, 稀疏矩阵}

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

返回:
p形状为 (n_samples, n_classes) 的ndarray

输入样本的类别对数概率。类别的顺序与属性classes_中的顺序一致。

引发:
AttributeError

如果loss不支持概率。

predict_proba(X)[source]#

预测X的类别概率。

参数:
X形状为 (n_samples, n_features) 的 {array-like, 稀疏矩阵}

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

返回:
p形状为 (n_samples, n_classes) 的ndarray

输入样本的类别概率。类别的顺序与属性classes_中的顺序一致。

引发:
AttributeError

如果loss不支持概率。

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

返回在提供的数据和标签上的准确性

在多标签分类中,这是子集准确性,这是一个严苛的指标,因为它要求每个样本的每个标签集都必须正确预测。

参数:
X形状为 (n_samples, n_features) 的 array-like

测试样本。

y形状为 (n_samples,) 或 (n_samples, n_outputs) 的 array-like

X的真实标签。

sample_weight形状为 (n_samples,) 的 array-like,默认值=None

样本权重。

返回:
score浮点数

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 版本新增。

注意

此方法仅当此估计器用作元估计器的子估计器时(例如在Pipeline内部使用)才相关。否则,它没有效果。

参数:
monitor字符串、True、False 或 None,默认值=sklearn.utils.metadata_routing.UNCHANGED

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

sample_weight字符串、True、False 或 None,默认值=sklearn.utils.metadata_routing.UNCHANGED

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

返回:
self对象

更新后的对象。

set_params(**params)[source]#

设置此估计器的参数。

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

参数:
**params字典

估计器参数。

返回:
self估计器实例

估计器实例。

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 版本新增。

注意

此方法仅当此估计器用作元估计器的子估计器时(例如在Pipeline内部使用)才相关。否则,它没有效果。

参数:
sample_weight字符串、True、False 或 None,默认值=sklearn.utils.metadata_routing.UNCHANGED

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

返回:
self对象

更新后的对象。

staged_decision_function(X)[source]#

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

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

参数:
X形状为 (n_samples, n_features) 的 {array-like, 稀疏矩阵}

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

生成:
score形状为 (n_samples, k) 的ndarray生成器

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

staged_predict(X)[source]#

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

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

参数:
X形状为 (n_samples, n_features) 的 {array-like, 稀疏矩阵}

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

生成:
y形状为 (n_samples,) 的ndarray生成器

输入样本的预测值。

staged_predict_proba(X)[source]#

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

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

参数:
X形状为 (n_samples, n_features) 的 {array-like, 稀疏矩阵}

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

生成:
y形状为 (n_samples,) 的ndarray生成器

输入样本的预测值。