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

梯度提升用于分类。

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

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

更多信息请参阅 用户指南

Parameters:
loss{‘log_loss’, ‘exponential’}, 默认=’log_loss’

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

learning_ratefloat, 默认=0.1

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

n_estimatorsint, 默认=100

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

subsamplefloat, 默认=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’ 的默认值通常是最好的,因为它在某些情况下可以提供更好的近似。

Added in version 0.18.

min_samples_splitint 或 float, 默认=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 或 float, 默认=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, 默认=0.0

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

max_depthint 或 None, 默认=3

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

min_impurity_decreasefloat, 默认=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 或 ‘zero’, 默认=None

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

random_stateint, RandomState 实例或 None, 默认=None

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

max_features{‘sqrt’, ‘log2’}, int 或 float, 默认=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, 默认=0

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

max_leaf_nodesint, 默认=None

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

warm_startbool, 默认=False

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

validation_fractionfloat, 默认=0.1

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

Added in version 0.20.

n_iter_no_changeint, 默认=None

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

Added in version 0.20.

tolfloat, 默认=1e-4

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

Added in version 0.20.

ccp_alpha非负浮点数, 默认=0.0

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

Added in version 0.22.

Attributes:
n_estimators_int

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

Added in version 0.20.

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, n_trees_per_iteration_ )

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

classes_ndarray of shape (n_classes,)

类标签。

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.

n_classes_int

类的数量。

max_features_int

max_features 的推断值。

See also

HistGradientBoostingClassifier

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

sklearn.tree.DecisionTreeClassifier

一个决策树分类器。

RandomForestClassifier

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

AdaBoostClassifier

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

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

以下示例展示了如何使用 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)#

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

Added in version 0.17.

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

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

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

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

decision_function(X)#

计算 X 的决策函数。

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

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

Returns:
scorendarray,形状为 (n_samples, n_classes) 或 (n_samples,)

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

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

预测的值。

predict_log_proba(X)#

预测X的类别对数概率。

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

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

Returns:
pndarray,形状为 (n_samples, n_classes)

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

Raises:
AttributeError

如果 loss 不支持概率。

predict_proba(X)#

预测X的类别概率。

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

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

Returns:
pndarray,形状为 (n_samples, n_classes)

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

Raises:
AttributeError

如果 loss 不支持概率。

score(X, y, sample_weight=None)#

返回给定测试数据和标签的平均准确率。

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

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

测试样本。

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

` X`的真实标签。

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

样本权重。

Returns:
scorefloat

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

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

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

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_decision_function(X)#

计算每个迭代中的 X 的决策函数。

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

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

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

Yields:
scorendarray 形状为 (n_samples, k) 的生成器

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

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,) 的生成器

输入样本的预测值。

staged_predict_proba(X)#

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

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

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

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

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

输入样本的预测值。